07. februar 2007 - 09:40Der er
33 kommentarer og 1 løsning
while() og checkbox
Jeg har en form hvor 'opslag' hives ud af DB og listes uder hinnanden. Hvert 'opslag' har en checkbox tilknyttet som kan være sat til ja el. nej (skal vises eller ikke vises på HP)
Men ved tryk på submit husker formen den sidst anvendte ID og retter i det sidste 'opslag' selv om det var en anden checkbox der var checked/unchecked.
Det forstår jeg jo egt. godt logikken i.. men hvordan laver jeg så noget lignende uden det problem?
Har kopieret din kode ind, og det virker stadig ikke.... Jeg forstår den vist heller ikke helt. - Du henter $vis som er et array - Sætter $test_var=0, så du kan lægge en til hver gang - Kører igennem indholdet af $vis array'et ...$value, kommer den fra checkboxen? - Sender indholdet.. men jeg forstår ikke 'in ($id_ja)'. Hvad betyder in? Og hvor sættes $id_nej?
Og jeg skal vist også have hjælp til udtrækket --> $hent_opslag = "SELECT * FROM forside WHERE navn = 'opslag'";
mht $id_nej så er det hvad jeg skriver i kommentarerne jeg satte ind..
mht in ($id_ja)-> det er en mulighed i sql at du kan tjekke på en kommasepareret liste af værdier.. eks. SELECT * FROM tabel WHERE id in (1,2,3,4,5) <- den finder de poster i tabel som har id 1, 2, 3, 4 og 5
Jeg skal nok lave nogle kommentarer på et tidspunkt men det bliver nok først i aften jeg får kigget nærmere på tingene
// HENT vis FRA DB $sql = "SELECT vis FROM forside WHERE vis = 'ja'"; $result = mysql_query($sql) or die(mysql_error()); // LÆG RESULTATET I ET ARRAY while ($data = mysql_fetch_array($result)) { $db_vis[] = $data['vis']; } // LAV EN ARRAY_DIFF PÅ $vis OG RESULTAT ARRAYET echo "<pre>"; print_r($vis); echo "</pre>"; echo "<pre>"; print_r($db_vis); echo "</pre>"; $diff = array_diff($db_vis, $vis); echo "<pre>"; print_r($diff); echo "</pre>"; $id_nej = implode(", ", $diff); //DER SKAL EVT. OGSÅ LAVES ET TJEK PÅ OM $id_ja OG $id_nej ER TOMME, HVIS DE ER SKAL RELEVANTE QUERY IKKE KØRES aabn_forbindelse_og_vaelgdb(); if(is_array($id_ja)) { //INDSÆT TEST VÆRDIEN I DB IFH $_POST-VARIABLEN $send_vis = "UPDATE forside SET vis='ja' WHERE id in ($id_ja)"; mysql_query($send_vis); } /* if(is_array($id_ja)) { //INDSÆT TEST VÆRDIEN I DB IFH $_POST-VARIABLEN $send_vis = "UPDATE forside SET vis='nej' WHERE id in ($id_nej)"; mysql_query($send_vis); } */ luk_forbindelse(); }
kan du ikke sætte det her ind: if(isset($_POST['gem_vis'])) { $vis = $_POST['vis']; $test_var=0; foreach($vis as $key => $value) if($test_var >= 1) { $id_ja .= ", $value"; } else { $id_ja = $value; } $test_var++;
aabn_forbindelse_og_vaelgdb(); // HENT vis FRA DB $sql = "SELECT id, vis FROM forside WHERE vis = 'ja'"; $result = mysql_query($sql) or die(mysql_error()); // LÆG RESULTATET I ET ARRAY while ($data = mysql_fetch_array($result)) { $db_vis[$data[vis]] = $data['vis']; } // LAV EN ARRAY_DIFF PÅ $vis OG RESULTAT ARRAYET echo "\$vis<pre>"; print_r($vis); echo "</pre>"; echo "\$db_vis<pre>"; print_r($db_vis); echo "</pre>"; $diff = array_diff($db_vis, $vis); echo "\$diff<pre>"; print_r($diff); echo "</pre>"; $diff_keys = array_keys($diff); echo "\$diff_keys<pre>"; print_r($diff); echo "</pre>"; $id_nej = implode(", ", $diff_keys); //DER SKAL EVT. OGSÅ LAVES ET TJEK PÅ OM $id_ja OG $id_nej ER TOMME, HVIS DE ER SKAL RELEVANTE QUERY IKKE KØRES
if(is_array($id_ja)) { //INDSÆT TEST VÆRDIEN I DB IFH $_POST-VARIABLEN $send_vis = "UPDATE forside SET vis='ja' WHERE id in ($id_ja)"; mysql_query($send_vis); } /* if(is_array($id_ja)) { //INDSÆT TEST VÆRDIEN I DB IFH $_POST-VARIABLEN $send_vis = "UPDATE forside SET vis='nej' WHERE id in ($id_nej)"; mysql_query($send_vis); } */ luk_forbindelse(); }
arhh vi prøver lige med den rigtige nøgle i det array.. if(isset($_POST['gem_vis'])) { $vis = $_POST['vis']; $test_var=0; foreach($vis as $key => $value) if($test_var >= 1) { $id_ja .= ", $value"; } else { $id_ja = $value; } $test_var++;
aabn_forbindelse_og_vaelgdb(); // HENT vis FRA DB $sql = "SELECT id, vis FROM forside WHERE vis = 'ja'"; $result = mysql_query($sql) or die(mysql_error()); // LÆG RESULTATET I ET ARRAY while ($data = mysql_fetch_array($result)) { $db_vis[$data[id]] = $data['vis']; } // LAV EN ARRAY_DIFF PÅ $vis OG RESULTAT ARRAYET echo "\$vis<pre>"; print_r($vis); echo "</pre>"; echo "\$db_vis<pre>"; print_r($db_vis); echo "</pre>"; $diff = array_diff($db_vis, $vis); echo "\$diff<pre>"; print_r($diff); echo "</pre>"; $diff_keys = array_keys($diff); echo "\$diff_keys<pre>"; print_r($diff); echo "</pre>"; $id_nej = implode(", ", $diff_keys); //DER SKAL EVT. OGSÅ LAVES ET TJEK PÅ OM $id_ja OG $id_nej ER TOMME, HVIS DE ER SKAL RELEVANTE QUERY IKKE KØRES
if(is_array($id_ja)) { //INDSÆT TEST VÆRDIEN I DB IFH $_POST-VARIABLEN $send_vis = "UPDATE forside SET vis='ja' WHERE id in ($id_ja)"; mysql_query($send_vis); } /* if(is_array($id_ja)) { //INDSÆT TEST VÆRDIEN I DB IFH $_POST-VARIABLEN $send_vis = "UPDATE forside SET vis='nej' WHERE id in ($id_nej)"; mysql_query($send_vis); } */ luk_forbindelse(); }
kan du ikke lige prøve det her: if(isset($_POST['gem_vis'])) { $vis = $_POST['vis']; $test_var=0; foreach($vis as $key => $value) if($test_var >= 1) { $id_ja .= ", $value"; } else { $id_ja = $value; } $test_var++;
aabn_forbindelse_og_vaelgdb(); // HENT vis FRA DB $sql = "SELECT id, vis FROM forside WHERE vis = 'ja'"; $result = mysql_query($sql) or die(mysql_error()); // LÆG RESULTATET I ET ARRAY while ($data = mysql_fetch_array($result)) { $db_vis[$data[id]] = $data['vis']; } // LAV EN ARRAY_DIFF PÅ $vis OG RESULTAT ARRAYET echo "\$vis<pre>"; print_r($vis); echo "</pre>"; echo "\$db_vis<pre>"; print_r($db_vis); echo "</pre>"; $diff = array_diff($db_vis, $vis); echo "\$diff<pre>"; print_r($diff); echo "</pre>"; $diff_keys = array_keys($diff); echo "\$diff_keys<pre>"; print_r($diff_keys); echo "</pre>"; $id_nej = implode(", ", $diff_keys); //DER SKAL EVT. OGSÅ LAVES ET TJEK PÅ OM $id_ja OG $id_nej ER TOMME, HVIS DE ER SKAL RELEVANTE QUERY IKKE KØRES
if(is_array($id_ja)) { //INDSÆT TEST VÆRDIEN I DB IFH $_POST-VARIABLEN $send_vis = "UPDATE forside SET vis='ja' WHERE id in ($id_ja)"; echo $send_vis."<br>"; mysql_query($send_vis); } /* if(is_array($id_ja)) { //INDSÆT TEST VÆRDIEN I DB IFH $_POST-VARIABLEN $send_vis = "UPDATE forside SET vis='nej' WHERE id in ($id_nej)"; mysql_query($send_vis); } */ luk_forbindelse(); }
Jeg ved at det ikke virker helt endnu, jeg vil helst tjekke at data er korrekt inden der ændres i databasen..
jeg skal vidst have tjekket tingene ordentligt igennem her.. jeg tror ikke jeg tænkte det rigtigt igennem fra starten, prøv det her: if(isset($_POST['gem_vis'])) { $vis = $_POST['vis']; $test_var=0; foreach($vis as $key => $value) if($test_var >= 1) { $id_ja .= ", $value"; } else { $id_ja = $value; } $test_var++;
aabn_forbindelse_og_vaelgdb(); // HENT vis FRA DB $sql = "SELECT id FROM forside WHERE vis = 'nej'"; $result = mysql_query($sql) or die(mysql_error()); // LÆG RESULTATET I ET ARRAY while ($data = mysql_fetch_array($result)) { $db_vis[] = $data[id]; } // LAV EN ARRAY_DIFF PÅ $vis OG RESULTAT ARRAYET echo "\$vis<pre>"; print_r($vis); echo "</pre>"; echo "\$db_vis<pre>"; print_r($db_vis); echo "</pre>"; $diff = array_diff($db_vis, $vis); echo "\$diff<pre>"; print_r($diff); echo "</pre>"; $diff_keys = array_keys($diff); echo "\$diff_keys<pre>"; print_r($diff_keys); echo "</pre>"; $id_nej = implode(", ", $diff_keys); //DER SKAL EVT. OGSÅ LAVES ET TJEK PÅ OM $id_ja OG $id_nej ER TOMME, HVIS DE ER SKAL RELEVANTE QUERY IKKE KØRES
if(is_array($id_ja)) { //INDSÆT TEST VÆRDIEN I DB IFH $_POST-VARIABLEN $send_vis = "UPDATE forside SET vis='ja' WHERE id in ($id_ja)"; echo $send_vis."<br>"; mysql_query($send_vis); } /* if(is_array($id_ja)) { //INDSÆT TEST VÆRDIEN I DB IFH $_POST-VARIABLEN $send_vis = "UPDATE forside SET vis='nej' WHERE id in ($id_nej)"; mysql_query($send_vis); } */ luk_forbindelse(); }
Det her skulle virke.. Forresten har du så en define() et sted i din kode?
if(isset($_POST['gem_vis'])) { $vis = $_POST['vis']; $id_ja = implode(", ", $vis); aabn_forbindelse_og_vaelgdb(); // HENT vis FRA DB $sql = "SELECT `id` FROM forside WHERE vis = 'ja'"; $result = mysql_query($sql) or die(mysql_error()); // LÆG RESULTATET I ET ARRAY while ($data = mysql_fetch_array($result)) { $db_vis[] = $data['id']; } // LAV EN ARRAY_DIFF PÅ $vis OG RESULTAT ARRAYET // echo "\$vis<pre>"; print_r($vis); echo "</pre>"; // echo "\$db_vis<pre>"; print_r($db_vis); echo "</pre>"; $diff = array_diff($db_vis, $vis); // echo "\$diff<pre>"; print_r($diff); echo "</pre>"; $diff_keys = array_keys($diff); // echo "\$diff_keys<pre>"; print_r($diff_keys); echo "</pre>"; $id_nej = implode(", ", $diff_keys); //DER SKAL EVT. OGSÅ LAVES ET TJEK PÅ OM $id_ja OG $id_nej ER TOMME, HVIS DE ER SKAL RELEVANTE QUERY IKKE KØRES
if(is_array($id_ja)) { //INDSÆT TEST VÆRDIEN I DB IFH $_POST-VARIABLEN $send_vis = "UPDATE forside SET vis='ja' WHERE `id` in ($id_ja)"; echo $send_vis."<br>"; mysql_query($send_vis); }
if(is_array($id_nej)) { //INDSÆT TEST VÆRDIEN I DB IFH $_POST-VARIABLEN $send_vis = "UPDATE forside SET vis='nej' WHERE `id` in ($id_nej)"; echo $send_vis."<br>"; mysql_query($send_vis); }
heh.. det bliver mere og mere pinligt det her... prøv det her, nu skulle det meget gerne virke og gøre det rigtige..
if(isset($_POST['gem_vis'])) { $vis = $_POST['vis']; $id_ja = implode(", ", $vis); aabn_forbindelse_og_vaelgdb(); // HENT vis FRA DB $sql = "SELECT `id` FROM forside WHERE vis = 'ja'"; $result = mysql_query($sql) or die(mysql_error()); // LÆG RESULTATET I ET ARRAY while ($data = mysql_fetch_array($result)) { $db_vis[] = $data['id']; } // LAV EN ARRAY_DIFF PÅ $vis OG RESULTAT ARRAYET // echo "\$vis<pre>"; print_r($vis); echo "</pre>"; // echo "\$db_vis<pre>"; print_r($db_vis); echo "</pre>"; $diff = array_diff($db_vis, $vis); // echo "\$diff<pre>"; print_r($diff); echo "</pre>"; $id_nej = implode(", ", $diff); //DER SKAL EVT. OGSÅ LAVES ET TJEK PÅ OM $id_ja OG $id_nej ER TOMME, HVIS DE ER SKAL RELEVANTE QUERY IKKE KØRES
if(!empty($id_ja)) { //INDSÆT TEST VÆRDIEN I DB IFH $_POST-VARIABLEN $send_vis = "UPDATE forside SET vis='ja' WHERE `id` in ($id_ja)"; echo $send_vis."<br>"; mysql_query($send_vis); }
if(!empty($id_nej)) { //INDSÆT TEST VÆRDIEN I DB IFH $_POST-VARIABLEN $send_vis = "UPDATE forside SET vis='nej' WHERE `id` in ($id_nej)"; echo $send_vis."<br>"; mysql_query($send_vis); }
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.