webForumDet fria alternativet
Logga in / Bli medlem

Checkboxar och UPDATE

PHP

4 svar · 443 visningar · startad av Melea

Medlem sedan juli 20033 147 inlägg
Trådstart#1

Tjenamors!

Har lite problem med ett nyhetsarkiv jag håller på att bygga.
På sidan har jag olika grupper, som det skrivs olika nyheter för.
När man skriver en nyhet loopas alla grupper ut med checkboxar, så man får fylla i till vilka nyheten ska skrivas.
Detta löste jag med att döpa inputfältet till "group[]" och sedan spara det såhär i en enskild tabell

INSERT INTO news ...

foreach ($_POST[group] as &$value) {
	mysql_query("
	INSERT INTO news_group (NewsID, GroupID)
	VALUES ($insert_id, $value)
	") or die(mysql_error());
}

So far, so good.

Men när jag nu ska fixa så man kan redigera en nyhet, vet jag inte riktigt hur jag ska gå till väga.
Eftersom jag ibland kan behöva ta bort nyheter från vissa grupper, och ibland lägga till, blir det problem.
Jag kan ju inte gärna skriva såhär:

foreach ($_POST[group] as &$value) {
	mysql_query("
	INSERT INTO news_group (NewsID, GroupID)
	VALUES ($_POST[ID], $value)
	") or die(mysql_error());

	mysql_query("
	DELETE FROM news_group
	WHERE NewsID = $_POST[ID] AND GroupID = $value
	") or die(mysql_error());
}

Eftersom en DELETE-sats tydligen inte klarar av ett AND villkor.
Någon som har tips på hur jag ska lösa detta?

Tacksam för alla svar
MVH

Medlem sedan mars 20034 471 inlägg
#2

Jag har inte riktigt fattat vad dina grupper är och så, men... är $_POST[group] verkligen en array? I så fall borde det nog stå:
$_POST["group"] till att börja med i foreach.

Sedan:

"INSERT INTO news_group (NewsID, GroupID)
	VALUES (".$_POST["ID"].", $value)"

"DELETE FROM news_group
WHERE NewsID = ".$_POST["ID"]." AND GroupID = $value"}

Har nog lite större chanser att funka som du vill. :)

Medlem sedan juli 20033 147 inlägg
#3

Eftersom $_POST[ID] endast innehåller en siffra är det inte nödvändigt.
Min kod genererar exakt samma sak som den du skrev. :)

Medlem sedan juli 20033 147 inlägg
#4

Okej, nu har jag iallafall förstått var problemet ligger.
När jag kör foreach-loopen och kollar igenom alla $_POST[group] så får den bara med alla värden jag kryssat i.
Så! Jag tänkte att jag kunde lösa det med en for($i = 1; $i < 20; $i++) { loop, eftersom det är 20 grupper.
Men hur får jag med värdet då? Med foreach-loopen blir det ju $value.

Tack på förhand
MVH

Medlem sedan juli 20033 147 inlägg
#5

Okej, har nu löst det. :)

mysql_query("
DELETE FROM news_group
WHERE NewsID = $_POST[ID]
") or die(mysql_error());

if(count($_POST[group]) > 0) {
	foreach ($_POST[group] as $value) {

		mysql_query("
		INSERT INTO news_group (NewsID, GroupID)
		VALUES ($_POST[ID], $value)
		") or die(mysql_error());
	
	}
}
264 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)