08. december 2007 - 18:23Der er
35 kommentarer og 1 løsning
Valg i select-boks skal ændre checkbokse udfra databaseudtræk
Hej Eksperter
Jeg står og skal bruge en funktion, som henter en række brugere ud fra en database og lister dem i en dropdown-boks (altså en SELECT-boks)
Under denne select-boks har jeg en lang liste med data, hvor der er en checkbox ud for hver række
når man så vælger en bruger i dropdownboksen skal man kunne checke de checkboxe af som man har lyst til, og derefter gemme valgene i databasen - når man så næste gang vil redigere valgene, skal de valg man lavede sidst hentes ud fra databasen
Den data som bliver hentet ud hvor checkboksene er i, bliver genereret ud fra en whileløkke
Alle linier i min whileløkke har et nummer, og der bliver oprettet en tabel i databasen for hver bruger, så det nemmeste er vel at smide en liste ind med de numre som er blever checked af - men hvordan udfører jeg dette rent praktisk?
min select:
<select name="vaelgbruger"> <? $result = mysql_query("select * from users"); while ($row = mysql_fetch_array($result)) { echo "<option value=\"$row[phone]\">".$row[name]."</option>"; } ?> </select>
Ja, du er nød til at oprette en ny række, som indeholder den fra brugerens side valgte data. Og så opstille nogle nogle if's til at se hvad der skal vælges:
Hvordan fortæller jeg så at den skal SELECT * from user_XXXXXXXX"); (altså user_$phone) og så checke alle dem allerede ER gemt i databasen når man vælger brugeren?
Jeg misforstode det vist lidt. Du skal nok nærmere have fat i en hop menu, og så derfra hoppe til et bruger id, og så se på hvad du har af valg til netop den bruger.
som du kan se, så står den på "Hansens Bøfhus" foroven - det jeg gerne vil have, er at man kan checke de vine af som man gerne vil gemme, og derefter trykke "Tilføj" - derefter kan jeg så vælge "Larsens Bodega" i menuen og de valg som jeg tidligere har foretaget til "Larsens Bodega" skal så blive krydset af automatisk
(Jeg ved godt hvordan jeg reelt gemmer det i databasen, men mit problem er at hente dem ind for hver af brugerne og så få checkboksene opdateret automatisk)
Jamen så er jeg med. Jeg troede det var en mere kompliceret. I din bruger tabel, kan du så oprette rækker for alle de forskellige valg man kan lave, og så standart sætte dem til 0. Her eksempel på en hop menu:
head: <script type="text/javascript"> function MM_jumpMenu(targ,selObj,restore){ //v3.0 eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'"); if (restore) selObj.selectedIndex=0; } </script>
det stemmer desværre ikke overens med resten af systemet hvis jeg opretter rækker for alle de forskellige valg
jeg havde mere tænkt mig at den indsætter et nummer (hver genstand har et nummer) og derefter henter det antal linier ud som der er numre i tabellen og skriver de numre ind som er gemt
jeg har en tabel (users) som indeholder alle brugerne den er i og for sig irellevant, da det kun er "name" og "phone" som jeg skal bruge fra den tabel
derudover har jeg en tabel pr. bruger som har navnet user_XXXXXXXX (altså user_$phone) - i den er der en række der hedder "vin_nummer" - og det er i denne række jeg gerne vil have alle de vinnumre gemt som bliver valgt på siden
- altså nummeret på vinen, samt brugerID som er telefonnummeret - der er nememre end en tabel for hver bruger
jeg har også lavet en query som ser sådan ud: $user_wine = mysql_query("SELECT * FROM wine_priv WHERE user_id = '{$_GET[ID]}'") or die(mysql_error());
det er jo fint - men hvordan skal min funktion se ud, som sørger for at checkboksene er checked eller unchecked? (jeg skal have en funktion der tjekker om nummeret eksisterer på vin-listen og på privilegie-listen - og hvis den findes begge steder skal den checkes, samt en funktion som gemmer nye tilføjelser til brugeren)
Nu får jeg følgende fejl når jeg smider det ind (jeg har lige rettet det til, så tabellerne passer på navn:
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 41
$nummer = mysql_real_escape_string($_GET[id]);
$result2 = mysql_query(" SELECT * FROM vine LEFT JOIN wine_priv ON vine.vin_number = wine_priv.vin_id AND wine_priv.user_id = '$nummer' ");
Argh, hader når man må til at teste sin pseudo-kode. :D Men det fungerer altså her. Du må have en fejl, enten tastefejl, eller forkert navn i: ON vine.vin_number = wine_priv.vin_id AND wine_priv.user_id = '$nummer'
$nummer = mysql_real_escape_string($_GET[id]); $result2 = mysql_query("SELECT * FROM vine LEFT JOIN wine_priv ON vine.vin_number = wine_priv.vin_id AND wine_priv.user_id = '$nummer'");
Det lyder farligt. Vi har jo netop brugt LEFT JOIN for at undgå at lave et utal af query's. Nå men jeg hører nok mere fra dig, så må vi se på det... :P
men lidt underligt, for der kommer 5 nye oven over de 5 der skal være der :S - men hvis jeg skifter mellem de to while-starts, så kan jeg hente hhv. teksten og checkboxene ind
så kan jeg med den første hente teksten ud - og med den anden om checkboxene er checked eller ej - men hvordan får jeg BÅDE teksten OG checkboxene til at virke på samme tid?
Har prøvet at gøre det lidt mere overskueligt for dig. Som du kan se har jeg ændret alle dine $vin[] til $row[] da data jo ligger der når vi bruger while($row = Nå men her er det endelige: ---------------------------------------------------------------------------
Du bør forresten aldrig bruge $_GET / $_POST direkte i din query uden på en eller anden måde at checke dataen. Det var derfor jeg tidligere skrev: $nummer = mysql_real_escape_string($_GET[nummer]);
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.