24. november 2008 - 03:00
Der er
7 kommentarer og 1 løsning
Opdatere form med flere rækker fra mysql database
Hej eksperter Jeg har en tabel i en mysql-database, med 4 kolonner. Mit mål er at jeg kan se alle rækker med indhold i form-felter og gemme ændringer i allesammen med én submitknap. Koden er således: <?php $action = (isset($HTTP_GET_VARS['action']) ? $HTTP_GET_VARS['action'] : ''); if (!isset($_POST["submit"])) { $id = $_GET["id"]; $sql = "SELECT * FROM headertags"; $result = mysql_query($sql) or die(mysql_error()); ?> <form action=?action=edit method="POST"> <table border="0"> <? while($r=mysql_fetch_array($result)) { ?> <tr> <td><input type="text" name="page_name" value="<?php echo $r["page_name"] ?>" /></td> <td><input type="text" name="page_title" value="<?php echo $r["page_title"] ?>" /></td> <td><input type="text" name="page_des" value="<?php echo $r["page_description"] ?>" /></td> <td><input type="text" name="page_key" value="<?php echo $r["page_keywords"] ?>" /></td> <td></td> </tr> <? } ?> <tr><td><input type="submit" /></td></tr> </table> </form> <? //} } if($action == 'edit'){ $page_name = $_POST['page_name']; $page_title = $_POST['page_title']; $page_des = $_POST['page_des']; $page_key = $_POST['page_key']; //tænker på at lave en løkke her $sql = "UPDATE headertags SET page_title='$page_title', page_description='$page_des', page_keywords='$page_key' WHERE page_name='$page_name'"; $result = mysql_query($sql) or die(mysql_error()); echo "indhold opdateret.<br>"; } } ?> Som det er nu, ændrer kun den sidste række sig. Er der nogen der har et bud på hvordan jeg får den til at anderkende hver række og opdatere dem? Jeg tænker selv at det er noget med at de variable der bliver gemt via $_POST overskrives, samt at der bør være en løkke omkring den sidste query, men jeg kan ikke helt gennemskue hvordan jeg bør gøre det. PFT
Annonceindlæg fra Infor
24. november 2008 - 12:54
#1
Du skal ændre: name="page_name" til f.eks.: name="page_name[]" eller name="page_name['.$r['id'].']" Så får du et array med data og kan opdatere flere felter/rækker samtidig.
24. november 2008 - 15:21
#2
Jeg har ændret det lidt, men kan stadig ikke så det til at virke helt. Jeg har tilføjet et række-id i tabellen og prøvet at bygge de variable op over arrays: <?php $action = (isset($HTTP_GET_VARS['action']) ? $HTTP_GET_VARS['action'] : ''); if (!isset($_POST["submit"])) { $id = $_GET["id"]; $sql = "SELECT * FROM headertags"; $result = mysql_query($sql) or die(mysql_error()); $count=mysql_num_rows($result); ?> <form action=?action=edit method="POST"> <table border="0"> <? while($r=mysql_fetch_array($result)) { $id[]=$r['id']; $page_name[]=$r['page_name']; $page_title[]=$r['page_title']; $page_description[]=$r['page_description']; $page_keywords[]=$r['page_keywords']; ?> <tr> <td><?php echo $r["id"]; ?></td> <td><input type="text" name="page_name[]" id="page_name" value="<?php echo $r["page_name"] ?>" /></td> <td><input type="text" name="page_title[]" id="page_title" value="<?php echo $r["page_title"] ?>" /></td> <td><input type="text" name="page_description[]" id="page_description" value="<?php echo $r["page_description"] ?>" /></td> <td><input type="text" name="page_keywords[]" id="page_keywords" value="<?php echo $r["page_keywords"] ?>" /></td> <td></td> </tr> <? } ?> <tr><td><input type="submit" /><br /><? echo $count; ?></td></tr> </table> </form> <? //} } if($action == 'edit'){ for($i=0;$i<$count;$i++){ $sql1="UPDATE headertags SET page_title='$page_title[$i]', page_description='$page_description[$i]', page_keywords='$page_keywords[$i]' WHERE id='$id[$i]'"; $result1=mysql_query($sql1); } echo "indhold opdateret.<br><br><br>"; }
24. november 2008 - 15:24
#3
hvis jeg i $sql1 fx sætter page_title='page_title[$i]' (uden $), indsætter den page_title[0], page_title[1], page_title[2] osv. ind. Så den kan godt kommunikere som den skal, men kan åbenbart ikke få de variable helt ind som den skal. Nogen der har et bud? PFT
24. november 2008 - 15:33
#4
Det ser ud til at virke hvis jeg indsætter dette i nederste sætning: if($action == 'edit'){ $size = count($_POST['page_name']); for($i=0;$i<$size;$i++){ $page_title = $_POST['page_title'][$i]; $page_description = $_POST['page_description'][$i]; $page_keywords = $_POST['page_keywords'][$i]; $sql1="UPDATE headertags SET page_title='$page_title', page_description='$page_description', page_keywords='$page_keywords' WHERE id='$id[$i]'"; $result1=mysql_query($sql1); }
24. november 2008 - 15:45
#5
Det skal ligne dette: <td><?php echo $r["id"]; ?></td> <td><input type="text" name="page_name[<?=$r["id"];?>]" id="page_name" value="<?php echo $r["page_name"] ?>" /></td> <td><input type="text" name="page_title[<?=$r["id"];?>]" id="page_title" value="<?php echo $r["page_title"] ?>" /></td> <td><input type="text" name="page_description[<?=$r["id"];?>]" id="page_description" value="<?php echo $r["page_description"] ?>" /></td>
24. november 2008 - 18:01
#6
Hej Jakob. Tak for dine svar - tror jeg forstår princippet i det nu. Læg gerne et svar. Jeg fik det til at virke med følgende kode, hvis andre skulle være interesseret. Det er lavet for at styre headertags i form af titel, description og keywords: <?php $action = (isset($HTTP_GET_VARS['action']) ? $HTTP_GET_VARS['action'] : ''); if (!isset($_POST["submit"])) { $id = $_GET["id"]; $sql = "SELECT * FROM headertags"; $result = mysql_query($sql) or die(mysql_error()); $count=mysql_num_rows($result); ?> <form action=?action=edit method="POST"> <table border="0"> <tr class="dataTableContent"><td><b>Filnavn</b></td><td></td><td><b>Sidens titel</b></td><td><b>Description</b></td><td><b>Keywords</b></td></tr> <? while($r=mysql_fetch_array($result)) { $id[]=$r['id']; ?> <tr> <td class="dataTableContent"><?php echo $r["page_name"]; //echo $r["id"]; ?></td> <td><input type="hidden" name="page_name[]" id="page_name" value="<?php echo $r["page_name"] ?>" /></td> <td><input type="text" name="page_title[]" id="page_title" value="<?php echo $r["page_title"] ?>" /></td> <td><input type="text" name="page_description[]" id="page_description" value="<?php echo $r["page_description"] ?>" /></td> <td><input type="text" name="page_keywords[]" id="page_keywords" value="<?php echo $r["page_keywords"] ?>" /></td> </tr> <? } ?> <tr><td><input type="submit" /><br /></td></tr> </table> </form> <? //} } if($action == 'edit'){ $size = count($_POST['page_name']); for($i=0;$i<$size;$i++){ $page_title = $_POST['page_title'][$i]; $page_description = $_POST['page_description'][$i]; $page_keywords = $_POST['page_keywords'][$i]; $sql1="UPDATE headertags SET page_title='$page_title', page_description='$page_description', page_keywords='$page_keywords' WHERE id='$id[$i]'"; $result1=mysql_query($sql1); } echo "indhold opdateret.<br><br><br>"; echo '<META HTTP-EQUIV="Refresh" Content="1; URL=test_admin_side.php">'; exit; //exit; } ?> </td> </tr> </table> <div style="font-family:Arial, Helvetica, sans-serif">Indsæt værdier for ny fil:</div> <table border="0"> <form action=?action=new_site method="POST"> <tr class="dataTableContent"><td><b>Filnavn</b></td><td><b>Sidens titel</b></td><td><b>Description</b></td><td><b>Keywords</b></td></tr> <tr> <td><input type="text" name="page_name" id="page_name" value="" /></td> <td><input type="text" name="page_title" id="page_title" value="" /></td> <td><input type="text" name="page_description" id="page_description" value="" /></td> <td><input type="text" name="page_keywords" id="page_keywords" value="" /></td> </tr> <tr><td><input type="submit" /><br /></td></tr> </table> </form> <? if($action == 'new_site'){ $page_name = $_POST['page_name']; $page_title = $_POST['page_title']; $page_description = $_POST['page_description']; $page_keywords = $_POST['page_keywords']; $sql = "INSERT INTO headertags (page_name,page_title,page_description,page_keywords) VALUES ('$page_name','$page_title','$page_description','$page_keywords')"; $result3 = mysql_query($sql) or die(mysql_error()); echo 'Værdi indsat. Vent...'; echo '<META HTTP-EQUIV="Refresh" Content="1; URL=test_admin_side.php">'; exit; } ?>
24. november 2008 - 20:11
#7
Svar!
24. november 2008 - 20:30
#8
Takker for point.
Vi tilbyder markedets bedste kurser inden for webudvikling