29. december 2007 - 23:11Der er
40 kommentarer og 1 løsning
Gem variabelt antal checkbox (samt deres værdi) til database
Hej eksperter
Jeg har lavet en whileløkke som henter n lang række variabel data ud fra en database - sammen med denne data har får jeg generet en checkbox ud fra hver linie data (jeg har lavet to test-rækker i databasen som jeg henter ud her: http://iceweb.eu/xplayn/vinslottet/admin_tilfravalg.php?id=88888888 )
Hvordan skriver jeg min post-funktion og MySQL query når jeg ikke kender det eksakte antal checkboxe eller værdien af dem?
(simplificeret, så er det i bund og grund ret enkelt - jeg vil gerne have at man kan checke og unchecke checkboxene på denne side http://iceweb.eu/xplayn/vinslottet/admin_tilfravalg.php?id=88888888, trykke på "Gem" og så bliver de uncheckede fjernet, og de checkede gemt)
det skal nok lige sides at dataen, altså teksten, hentes ud fra en seperat database-tabel
om checkboksene er checkede eller ej afhænger af en tabel med to rækker - den ene indeholder værdien i _GET-funktionen (her altså 88888888) og så nummeret på de checkbokse der er checked
altså på nævnte side er det altså:
2 - 88888888 35 - 88888888
dvs når en box bliver unchecked skal jeg have fjernet den post i databasen, og hvis der er en checkbox som er checked, skal jeg have en linie tilføjet i databasen
Håber det forklarede det hele lidt bedre - ellers spørg endelig
________________________________________________________ Så skal det indsættes
$vinID = $_POST[vinID]; foreach($vinID as $key => $val){ mysql_query("UPDATE vine_priv SET vin_id = '$val' WHERE id = '$key' LIMIT 1") or die(mysql_error()); }
$vinID = $_POST[vinID]; foreach($vinID as $key => $val){ mysql_query("UPDATE wine_priv SET vin_id = '$val' WHERE id = '$key' LIMIT 1") or die(mysql_error()); }
?>
- nu får jeg så følgende to fejl:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\webserver\xampp\htdocs\iceweb\xplayn\vinslottet\admin_tilfravalg.php on line 37
Warning: Invalid argument supplied for foreach() in C:\webserver\xampp\htdocs\iceweb\xplayn\vinslottet\admin_tilfravalg.php on line 102
$vinID = $_POST[vinID]; foreach($vinID as $key => $val){ mysql_query("UPDATE wine_priv SET vin_id = '$val' WHERE id = '$key' LIMIT 1") or die(mysql_error()); }
Den skal selvfølgelig først køre når der bliver postet. if(isset($_POST[])); eller hvordan du nu gør det. Og tjek lige om navnene i queryen passer.
der bliver ikke tilføjet noget, og den opdaterer kun den eksisterende post, hvor brugernummer er 88888888, selvom det er en anden bruger jeg gemmer fra
Men altså lige nu sker der altså ingenting når jeg trykker gem - Det eneste jeg ønsker er at der kommer en ny linie i tabellen for hver vin der er checked - nummeret, og brugernummeret - og hvis man unchecker en boks skal linien bare fjernes fra databasen igen - som det er nu checker den selv boksen af hvis nummeret eksisterer i databasen
kan jeg egentligt skrive mit header_location således Header("Location: side.php?id='.$_GET[id].'"); ??
Indsæt istedet for det tidligere hvor vi updaterede: --------------------------------------------------------------
$vinID = $_POST[vinID]; $nummer = $_POST[nummer]; //først sletter vi de gamle rækker $sql = "DELETE FROM wine_priv WHERE tlfnummer='$nummer'"; //Det hedder nok ikke tlfnummer ved dig så det skal ændres. $result = mysql_query($sql) or die(mysql_error()); //så indsætter vi de nye foreach($vinID as $key => $val){
mysql_query("INSERT INTO wine_priv (id, vin_id, tlfnummer) values ('NULL', '$key', '$nummer')") or die(mysql_error()); //her skal du også ændre så navnene passer.
$vinID = $_POST[vinID]; $nummer = $_POST[nummer]; //først sletter vi de gamle rækker $sql = "DELETE FROM wine_priv WHERE user_id= '{$_GET[id]}' "; //Det hedder nok ikke tlfnummer $result = mysql_query($sql) or die(mysql_error()); //så indsætter vi de nye foreach($vinID as $key => $val){
mysql_query("INSERT INTO wine_priv (id, wine_id, user_id) values ('NULL', '$key', '$nummer')") or die(mysql_error()); }
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.