Hello, i am trying to do a forums GUI with datastores, but the problem is that when i post it duplicates, an example

if the message 1 is a and the message 2 is b i will get a b b and if the message 3 is c i will get a c c c It overwrites the other messages and duplicates, why ?

function newp(info)
	
		local a = script.Parent.pos:Clone()
		
		a.Name = info.realName
		a.Parent = script.Parent.psts
		a.Visible = true
	local success, image, ready = pcall(function()
    return game.Players:GetUserThumbnailAsync(info.usid, Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size420x420) 
	end)
	if success then
			if ready then
	a.im.Image = image
			end
			
	end
	local elaboratedUD = UDim2.new(0,0,0,script.Parent.psts.UIListLayout.AbsoluteContentSize.Y)
	script.Parent.psts.CanvasSize = elaboratedUD
a.des.Text = info.Text
a.us.Text = info.Name
if info.Name == "maumaumaumaumaumau" then
	a.OW.Visible = true
	
end

if info.usid == script.Parent.Parent.Parent.Parent.UserId then
	a.del.Visible = true
	a.del.MouseButton1Click:Connect(function()
		a:Destroy()
		print("clicked")
	local dtstore = game:GetService("DataStoreService"):GetDataStore("adatastore")
			local ps = dtstore:GetAsync("Posts")
			
			for i,v in pairs(ps) do
				if v == info.id then
					print("found")
					table.remove(ps,i)
				end
			end -- remove the post from table if the delete button was clicked
			dtstore:SetAsync(info.realName,false)
			dtstore:SetAsync("Posts",ps)
			loadData()
	end)

end
if script.Parent.Parent.Parent.Parent.Name == "maumaumaumaumaumau" then
	if a.del.Visible == false then
	a.del.Visible = true
-- for me
	a.del.MouseButton1Click:Connect(function()
		a:Destroy()
	local dtstore = game:GetService("DataStoreService"):GetDataStore("adatastore")
			local ps = dtstore:GetAsync("Posts")
			
			for i,v in pairs(ps) do
				if v == info.id then
					table.remove(ps,i)
				end
			end -- delete the post from the table posts
			dtstore:SetAsync(info.realName,false)
			dtstore:SetAsync("Posts",ps)
			loadData()
	end)
end
end
end
	
	function loadData()
	local dtstore = game:GetService("DataStoreService"):GetDataStore("adatastore")
	local ps = dtstore:GetAsync("Posts")
	for i,v in pairs(script.Parent.psts:GetChildren()) do
		if v:IsA("Frame") then
			v:Destroy()
		end
	end
	if not ps then
		
		dtstore:SetAsync("Posts",{})
		ps = dtstore:GetAsync("Posts")
	end
	
	for i,v in pairs(ps) do
		local dt = dtstore:GetAsync("P-"..v)
		if dt ~= false then
		newp(dt)
		end
	end
	end
	
	loadData()

	script.Parent.send.OnServerEvent:Connect(function(plr,txt)
		
		local dtstore = game:GetService("DataStoreService"):GetDataStore("adatastore")
			local ps = dtstore:GetAsync("Posts")
			local nm = 0
			for i,v in pairs(ps) do
				if not ps[tostring(tonumber(v)+1)] then
					nm = tonumber(v)+1 -- make a new number
					break
				end
			end
			if nm == 0 then
				nm = 1
			end
			table.insert(ps, tostring(nm))
			dtstore:SetAsync("Posts", ps)
			dtstore:SetAsync("P-"..tostring(nm), {
				realName = "P-"..tostring(nm),
				usid = plr.UserId,
				Name = plr.Name,
				Text = txt,
				id = tostring(nm)
				}) -- set the table data
			
			loadData() -- reload the data
			
			
	end)