1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Mehrere Datensätze updaten

Dieses Thema im Forum "PHP" wurde erstellt von syntax, 15. April 2012.

  1. syntax

    syntax Grünschnabel

    Hallo Leute,
    ich will mit einem Submit-Button mehrere Datensätze updaten.

    Das Update an sicht klappt auch,allerdings nur beim ersten Datensatz, die anderen werden nicht mit geupdatet. Ich denke das Schleife nicht durchläuft.

    Habe auch nach viel suchen im Netz keine alternativen zu meiner Schleife gefunden, da der Aufbau einer Schleife im Grund ja immer gleich ist.

    Hier mein Code, entweder ich hab einen Denkfehler oder es ist nur ein Schusselfehler.

    Vielen Dank.

    PHP:
    1.  
    2. echo <<<HTML
    3.    <input type="submit" name="update" value="update" >
    4. HTML;
    5.  
    6.     // Anzahl Datensätze
    7.     $anzahl = mysql_num_rows( $abz_result );
    8.  
    9.     // Datensatz Ändern
    10.     if(isset($_POST['update'])){
    11.      
    12.        for ($a = 0; $a < $anzahl; $a++) {
    13.          
    14.            $id[$a] = $_POST['id'];
    15.              
    16.                $query = "UPDATE fahrzeuge SET
    17.               ersteller='".$_SESSION['user']."',
    18.               auto ='".$_POST['auto']."',
    19.               WHERE id='".$id[$a]."'";
    20.  
    21.                $result = mysql_query( $query) OR die( mysql_error() );
    22.       }
    23.     }
    24.  
  2. timestamp

    timestamp Mitglied Käsekuchen

    1.) Formulareingaben immer mit mysql_real_escape_string() bearbeiten, sonst kann man schwere Schäden anrichten.


    Deine Schleife führt jetzt $anzahl mal exakt dieselbe Aktion durch.
    $id[$a] = $_POST['id'] ist ein wenig Sinnfrei, weil du so ein Array mit $anzahl Einträgen erstellst, wobei jedes Feld denselben Eintrag hat (nämlich $_POST['id']).

    Was steht denn in $_POST['id']?
  3. jannicars

    jannicars Erfahrenes Mitglied

    Ich kann dir bei sowas nur von einer Schleife abraten.
    Lahmt bei mehreren 1.000 Updates in einer Schleife extremst, so läuft es bei mir perfekt in einem einzigen Query:

    Code (Text):
    1.  
    2. INSERT INTO fahrzeuge (id, ertsteller, auto) VALUES
    3. (1, 'a', 'b'),
    4. (2, 'c', 'd'),
    5. (3, 'e', 'f')
    6. ON DUPLICATE KEY UPDATE ersteller=VALUES(ersteller), auto=VALUES(auto)
    7.  
    Aber aufpassen, wenn die ID nicht vorhanden ist, macht er ein INSERT.
    Nur bei einer vorhandenen ID macht er ein UPDATE.
  4. syntax

    syntax Grünschnabel

    Hallo Leute,
    erstmal Danke für eure Hilfe.
    Habe nochmal meinen Quelltext überarbeitet.

    In $_POST['id'] steht die ID des Datensatzes.

    Das mit dem Insert ändere ich wenn das Script geht, sonst bau ich mir vielleicht zu viele Fehler ein.

    PHP:
    1.  
    2. <?php
    3.  error_reporting(E_ALL);
    4.  
    5.  while ($data = mysql_fetch_array( $result ) )
    6.     {
    7.  echo <<<HTML
    8.     <form action={$_SERVER['SCRIPT_NAME']} method="post">
    9.     <tr>
    10.     <td>{$abz_data['id']}</td>
    11.     <td>{$abz_data['user']}</td>
    12.     <td>{$abz_data['auto']}</td>
    13.     <tr>
    14.     </form>
    15. HTML;
    16.     }
    17. echo <<<HTML
    18.     <input type="submit" name="update" value="update" >
    19. HTML;
    20.  
    21.     // Anzahl Datensätze
    22.     $anzahl = mysql_num_rows( $abz_result );
    23.  
    24.     // Datensatz Ändern
    25.     if(isset($_POST['update'])){
    26.  
    27.        for ($a = 0; $a < $anzahl; $a++) {
    28.  
    29.                $query = "UPDATE fahrzeuge SET
    30.               ersteller='".mysql_real_escape_string($_SESSION['user'])."',
    31.               auto ='".mysql_real_escape_string($_POST['auto'])."',
    32.               WHERE id='".mysql_real_escape_string($_POST['id'])."'";
    33.  
    34.                $result = mysql_query( $query) OR die( mysql_error() );
    35.       }
    36.     }
    37. ?>
    38.  
    Es scheint ja auch zu gehen da der erste Datensatz immer aktualisiert wird.
    Zuletzt bearbeitet: 16. April 2012
  5. grillfleisch

    grillfleisch Grünschnabel

    Bist du dir sicher, dass das Script bei dir einwandfrei läuft?

    versuche mal das:
    Code (PHP):
    1. <?php
    2.  
    3.      echo "<form action={$_SERVER['SCRIPT_NAME']} method=\"post\">";
    4.    
    5.  while ($data = mysql_fetch_array($result)) {
    6.    echo "
    7.        <tr>
    8.          <td>{$data['id']}</td>
    9.          <td>{$data['user']}</td>
    10.          <td>{$data['auto']}</td>
    11.        <tr>";
    12.   }
    13.  
    14.   echo "<input type=\"submit\" name=\"update\" value=\"update\" >";
    15.  
    16.     // Anzahl Datensätze
    17.     $anzahl = mysql_num_rows( $result );
    18.  
    19.     // Datensatz Ändern
    20.     if(isset($_POST['update'])){
    21.  
    22.        for ($a = 1; $a < $anzahl; $a++) {
    23.  
    24.                $query = "UPDATE `fahrzeuge` SET
    25.               `ersteller`='".mysql_real_escape_string($_SESSION['user'])."',
    26.               `auto` ='".mysql_real_escape_string($_POST['auto'])."',
    27.               WHERE `id`='".$_POST['id']."'";
    28.  
    29.                $result = mysql_query($query);
    30.                mysql_error();
    31.       }
    32.     }
    33. ?>
    Zuletzt bearbeitet: 16. April 2012
  6. syntax

    syntax Grünschnabel

    Hab es oben nochmal geändert.
    Wie gesagt er updatet den ersten Datensatz die anderen werden ignoriert und ich bekomme auch keine Fehler ausgegeben.

    Habe es auch mir $a = 1 probiert.
  7. grillfleisch

    grillfleisch Grünschnabel

    Sind die IDs zufällig 1,2,3,4,5.... bis Anzahl der Datensätze, oder sind da Lücken dazwischen? Wenn keine Lücken dazwischen sind, dann ändere mal
    Code (PHP):
    1. `id`='".$_POST['id']."'
    auf
    Code (PHP):
    1. `id`='".$a."'
    , sonst benutzt er doch immer nur eine ID.
  8. timestamp

    timestamp Mitglied Käsekuchen

    Das ist das was ich anfangs schon sagte.
  9. grillfleisch

    grillfleisch Grünschnabel

    jetzt sehe ich es auch, sorry :D
  10. syntax

    syntax Grünschnabel

    Hallo Leute,
    habs jetzt hinbekommen. Mein letztes Problem ist das wenn ich die Datensätze update, ich die Seite aktualisieren muss damit ich den aktuellen eintrag sehe.

    Wie kann ich nach dem Update die Datensätze neu auslesen?
    Muss ich dazu eine Schleife bauen?

    Ich habe gelesen das ich meine Update-Anweisung über mein SQL-Select setzen soll, das hat allerdings nicht geklappt.

    PHP:
    1.  
    2. <?php
    3. include("connect.php");
    4. ?>
    5.  
    6.     <table>
    7.  
    8.     <?
    9.  
    10.     $result = mysql_query ("SELECT id, auto FROM fahrzeuge" );
    11.  
    12.     $count=mysql_num_rows($result);
    13.  
    14.     while ( $data = mysql_fetch_array( $result ) ){
    15.     ?>
    16.     <form action="<? $_SERVER['SCRIPT_NAME'] ?>" method="post">
    17.     <tr>
    18.     <td><? $id[]=$data['id']; ?><? echo $data['id']; ?></td>
    19.     <td><input type="text" name="auto[]" id="auto" value="<? echo $data['auto']; ?>"></td>
    20.     </tr>
    21.       <?php
    22.       }
    23.       ?>
    24.       <tr>
    25.       <td><input type="submit" name="update" value="update"></td>
    26.       </tr>
    27.       </table>
    28.       </form>
    29.       <?
    30.           if(isset($_POST['update'])){
    31.           for($i=0;$i<$count;$i++){
    32.           mysql_query("UPDATE fahrzeuge SET
    33.          auto='$auto[$i]' WHERE id='$id[$i]'");
    34.           }
    35.           }
    36.       ?>
    37.  
  11. jannicars

    jannicars Erfahrenes Mitglied

    Erst Updaten dann Auslesen?
  12. syntax

    syntax Grünschnabel

    Wie gesagt das hab ich schon probiert, dann schreibt er aber keine Daten in die DB.
    Wahrscheinlich weil ich bei

    PHP:
    1.  
    2. auto='$auto[$i]'
    3.  
    Kein Post habe, aber wie schreib ich das POST?

    Diese Variante ist Falsch.
    PHP:
    1.  
    2. auto='$_POST[$auto[$i]]'
    3.  
  13. grillfleisch

    grillfleisch Grünschnabel

    1. Updaten wenn update gesetzt wurde.

    Das kommt an den Anfang

    PHP:
    1. <?php
    2. include("connect.php");
    3.  
    4.   if(isset($_POST['update'])){
    5.     for($i=0;$i<$count;$i++){
    6.       mysql_query("UPDATE fahrzeuge SET auto='$auto[$i]' WHERE id='$id[$i]'");
    7.     }
    8.   }
    9. ?>
    10. <table>
    11. ...
    dann würde ich dir empfehlen, wie vor mir schon einer, deine Datensätze zu entschärfen!

    Mit $_POST bekommst du deine Daten.

    Code (PHP):
    1.  
    2.  if(isset($_POST['update'])){
    3.     for($i=0;$i<$count;$i++){
    4.       mysql_query("UPDATE fahrzeuge SET auto='mysql_real_escape_string($_POST['auto'])' WHERE id='$i'");
    5.    }
    6.   }
    7.  
    8.  
    du wirst aber keine Daten bekommen. Da in deinem Formular auch was nicht stimmt.
    Änder bitte den input namen auf "auto"

    PHP:
    1. name="auto"
    ohne []
  14. grillfleisch

    grillfleisch Grünschnabel

    Hier nochmal eine zusammenfassung.

    Bring mal bitte ein wenig Ordung in deinen Code. Der ist ziemlich fehlerhaft. Schon allein deine Tabellen und Formular Syntax.

    Code (PHP):
    1.  
    2. <?php
    3. include("connect.php");
    4.  
    5.   $result = mysql_query ("SELECT id, auto FROM fahrzeuge" );
    6.   $count = mysql_num_rows($result);
    7.  
    8.      
    9.    if(isset($_POST['update'])){
    10.     for($i=0; $i<$count; $i++){
    11.       mysql_query("UPDATE `fahrzeuge` SET `auto`='".mysql_real_escape_string($_POST['auto'])."' WHERE `id`='".$i."' ");
    12.    }
    13.   }
    14. ?>
    15.   <form action="<? $_SERVER['SCRIPT_NAME'] ?>" method="post">
    16.     <table>
    17.    
    18.     <?
    19.     while ( $data = mysql_fetch_array( $result ) ){
    20.     ?>
    21.       <tr>
    22.         <td><? $id[]=$data['id']; ?><? echo $data['id']; ?></td>
    23.         <td><input type="text" name="auto" id="auto" value="<? echo $data['auto']; ?>"></td>
    24.       </tr>
    25.       <?php
    26.       }
    27.       ?>
    28.       <tr>
    29.         <td><input type="submit" name="update" value="update"></td>
    30.       </tr>
    31.     </table>
    32.   </form>
    33.  

Diese Seite empfehlen