Mehrere Datensätze updaten

syntax

Mitglied
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:
echo <<<HTML
   <input type="submit" name="update" value="update" >
HTML;

    // Anzahl Datensätze
    $anzahl = mysql_num_rows( $abz_result );

    // Datensatz Ändern
    if(isset($_POST['update'])){
      
       for ($a = 0; $a < $anzahl; $a++) {
          
           $id[$a] = $_POST['id'];
              
               $query = "UPDATE fahrzeuge SET 
               ersteller='".$_SESSION['user']."',
               auto ='".$_POST['auto']."',
               WHERE id='".$id[$a]."'";

               $result = mysql_query( $query) OR die( mysql_error() );
      }
    }
 
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']?
 
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:
INSERT INTO fahrzeuge (id, ertsteller, auto) VALUES
(1, 'a', 'b'),
(2, 'c', 'd'),
(3, 'e', 'f')
ON DUPLICATE KEY UPDATE ersteller=VALUES(ersteller), auto=VALUES(auto)

Aber aufpassen, wenn die ID nicht vorhanden ist, macht er ein INSERT.
Nur bei einer vorhandenen ID macht er ein UPDATE.
 
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:
<?php
 error_reporting(E_ALL);

 while ($data = mysql_fetch_array( $result ) )
    {
 echo <<<HTML
    <form action={$_SERVER['SCRIPT_NAME']} method="post">
    <tr>
    <td>{$abz_data['id']}</td>
    <td>{$abz_data['user']}</td>
    <td>{$abz_data['auto']}</td>
    <tr>
    </form>
HTML;
    }
echo <<<HTML
    <input type="submit" name="update" value="update" >
HTML;

    // Anzahl Datensätze
    $anzahl = mysql_num_rows( $abz_result );

    // Datensatz Ändern
    if(isset($_POST['update'])){

       for ($a = 0; $a < $anzahl; $a++) {

               $query = "UPDATE fahrzeuge SET
               ersteller='".mysql_real_escape_string($_SESSION['user'])."',
               auto ='".mysql_real_escape_string($_POST['auto'])."',
               WHERE id='".mysql_real_escape_string($_POST['id'])."'";

               $result = mysql_query( $query) OR die( mysql_error() );
      }
    }
?>

Es scheint ja auch zu gehen da der erste Datensatz immer aktualisiert wird.
 
Zuletzt bearbeitet:
Bist du dir sicher, dass das Script bei dir einwandfrei läuft?

versuche mal das:
PHP:
<?php
error_reporting(E_ALL);

     echo "<form action={$_SERVER['SCRIPT_NAME']} method=\"post\">";
    
 while ($data = mysql_fetch_array($result)) {
   echo "
        <tr>
          <td>{$data['id']}</td>
          <td>{$data['user']}</td>
          <td>{$data['auto']}</td>
        <tr>";
  }
  
  echo "<input type=\"submit\" name=\"update\" value=\"update\" >";

    // Anzahl Datensätze
    $anzahl = mysql_num_rows( $result );

    // Datensatz Ändern
    if(isset($_POST['update'])){

       for ($a = 1; $a < $anzahl; $a++) {

               $query = "UPDATE `fahrzeuge` SET
               `ersteller`='".mysql_real_escape_string($_SESSION['user'])."',
               `auto` ='".mysql_real_escape_string($_POST['auto'])."',
               WHERE `id`='".$_POST['id']."'";

               $result = mysql_query($query);
               mysql_error();
      }
    }
?>
 
Zuletzt bearbeitet:
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.
 
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
PHP:
`id`='".$_POST['id']."'
auf
PHP:
`id`='".$a."'
, sonst benutzt er doch immer nur eine ID.
 
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:
<?php
include("connect.php");
?>

    <table>

    <?

    $result = mysql_query ("SELECT id, auto FROM fahrzeuge" );

    $count=mysql_num_rows($result);

    while ( $data = mysql_fetch_array( $result ) ){
    ?>
    <form action="<? $_SERVER['SCRIPT_NAME'] ?>" method="post">
    <tr>
    <td><? $id[]=$data['id']; ?><? echo $data['id']; ?></td>
    <td><input type="text" name="auto[]" id="auto" value="<? echo $data['auto']; ?>"></td>
    </tr>
      <?php
      }
      ?>
      <tr>
      <td><input type="submit" name="update" value="update"></td>
      </tr>
      </table>
      </form>
      <?
          if(isset($_POST['update'])){
          for($i=0;$i<$count;$i++){
          mysql_query("UPDATE fahrzeuge SET
          auto='$auto[$i]' WHERE id='$id[$i]'");
          }
          }
      ?>
 
Zurück