Avatar billede jarner Nybegynder
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
Avatar billede jakobdo Ekspert
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.
Avatar billede jarner Nybegynder
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>";
}
Avatar billede jarner Nybegynder
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
Avatar billede jarner Nybegynder
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);
        }
Avatar billede jakobdo Ekspert
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>
Avatar billede jarner Nybegynder
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;
    }
?>
Avatar billede jakobdo Ekspert
24. november 2008 - 20:11 #7
Svar!
Avatar billede jakobdo Ekspert
24. november 2008 - 20:30 #8
Takker for point.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester