Like Tree3Danke
  • 1 Beitrag von timestamp
  • 1 Beitrag von jannicars
  • 1 Beitrag von grillfleisch
ERLEDIGT
NEIN
ANTWORTEN
13
ZUGRIFFE
1099
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
  1. #1
    syntax ist offline Mitglied Silber
    Registriert seit
    Apr 2010
    Beiträge
    57
    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-Code:
    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() );
          }
        } 
     

  2. #2
    Avatar von timestamp
    timestamp ist offline Mitglied Käsekuchen
    Registriert seit
    May 2010
    Ort
    Marburg
    Beiträge
    1.952
    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']?
    syntax bedankt sich. 
    Tutorials.de Blog: Stacks und Queues

    Wie wird Dir schneller geholfen?
    *Bitte nur den Codeausschnitt posten. Keiner mag sich durch hunderte Zeilen Code wühlen.
    *Code in Tags setzen, dadurch aktiviert man Syntaxhighlighting. [php][/php] [java][/java]...
    *Code formatieren! Einrücken und Absätze machen erhöhen die Lesbarkeit ungemein, nicht nur für uns, auch für Dich
    *Den Fehler klar beschreiben. Mit "funktioniert nicht" weiß keiner was anzufangen.

  3. #3
    jannicars ist offline Mitglied Gold
    Registriert seit
    Jun 2011
    Beiträge
    218
    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 :
    1
    2
    3
    4
    5
    
    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.
    syntax bedankt sich. 

  4. #4
    syntax ist offline Mitglied Silber
    Registriert seit
    Apr 2010
    Beiträge
    57
    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-Code:
    <?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.
    Geändert von syntax (16.04.12 um 15:41 Uhr)
     

  5. #5
    grillfleisch ist offline Mitglied Silber
    Registriert seit
    Nov 2006
    Beiträge
    97
    Bist du dir sicher, dass das Script bei dir einwandfrei läuft?

    versuche mal das:
    PHP-Code:
    <?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();
          }
        }
    ?>
    Geändert von grillfleisch (16.04.12 um 15:18 Uhr)
    syntax bedankt sich. 

  6. #6
    syntax ist offline Mitglied Silber
    Registriert seit
    Apr 2010
    Beiträge
    57
    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. #7
    grillfleisch ist offline Mitglied Silber
    Registriert seit
    Nov 2006
    Beiträge
    97
    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-Code:
    `id`='".$_POST['id']."' 
    auf
    PHP-Code:
    `id`='".$a."' 
    , sonst benutzt er doch immer nur eine ID.
     

  8. #8
    Avatar von timestamp
    timestamp ist offline Mitglied Käsekuchen
    Registriert seit
    May 2010
    Ort
    Marburg
    Beiträge
    1.952
    Zitat Zitat von grillfleisch Beitrag anzeigen
    sonst benutzt er doch immer nur eine ID.
    Das ist das was ich anfangs schon sagte.
     
    Tutorials.de Blog: Stacks und Queues

    Wie wird Dir schneller geholfen?
    *Bitte nur den Codeausschnitt posten. Keiner mag sich durch hunderte Zeilen Code wühlen.
    *Code in Tags setzen, dadurch aktiviert man Syntaxhighlighting. [php][/php] [java][/java]...
    *Code formatieren! Einrücken und Absätze machen erhöhen die Lesbarkeit ungemein, nicht nur für uns, auch für Dich
    *Den Fehler klar beschreiben. Mit "funktioniert nicht" weiß keiner was anzufangen.

  9. #9
    grillfleisch ist offline Mitglied Silber
    Registriert seit
    Nov 2006
    Beiträge
    97
    Zitat Zitat von timestamp Beitrag anzeigen
    Das ist das was ich anfangs schon sagte.
    jetzt sehe ich es auch, sorry
     

  10. #10
    syntax ist offline Mitglied Silber
    Registriert seit
    Apr 2010
    Beiträge
    57
    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-Code:
    <?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]'");
              }
              }
          
    ?>
     

  11. #11
    jannicars ist offline Mitglied Gold
    Registriert seit
    Jun 2011
    Beiträge
    218
    Erst Updaten dann Auslesen?
     

  12. #12
    syntax ist offline Mitglied Silber
    Registriert seit
    Apr 2010
    Beiträge
    57
    Wie gesagt das hab ich schon probiert, dann schreibt er aber keine Daten in die DB.
    Wahrscheinlich weil ich bei

    PHP-Code:
    auto='$auto[$i]' 
    Kein Post habe, aber wie schreib ich das POST?

    Diese Variante ist Falsch.
    PHP-Code:
    auto='$_POST[$auto[$i]]' 
     

  13. #13
    grillfleisch ist offline Mitglied Silber
    Registriert seit
    Nov 2006
    Beiträge
    97
    1. Updaten wenn update gesetzt wurde.

    Das kommt an den Anfang

    PHP-Code:
    <?php
    include("connect.php");

      if(isset(
    $_POST['update'])){
        for(
    $i=0;$i<$count;$i++){
          
    mysql_query("UPDATE fahrzeuge SET auto='$auto[$i]' WHERE id='$id[$i]'");
        }
      }
    ?>
    <table>
    ...
    dann würde ich dir empfehlen, wie vor mir schon einer, deine Datensätze zu entschärfen!
    PHP-Code:
    mysql_real_escape_string() 

    Mit $_POST bekommst du deine Daten.

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

    PHP-Code:
    name="auto" 
    ohne []
     

  14. #14
    grillfleisch ist offline Mitglied Silber
    Registriert seit
    Nov 2006
    Beiträge
    97
    Hier nochmal eine zusammenfassung.

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

    PHP-Code:
    <?php
    include("connect.php");

      
    $result mysql_query ("SELECT id, auto FROM fahrzeuge" );
      
    $count mysql_num_rows($result);
      
          
       if(isset(
    $_POST['update'])){
        for(
    $i=0$i<$count$i++){
          
    mysql_query("UPDATE `fahrzeuge` SET `auto`='".mysql_real_escape_string($_POST['auto'])."' WHERE `id`='".$i."' ");
       }
      }
    ?>
      <form action="<? $_SERVER['SCRIPT_NAME'?>" method="post">
        <table>
        
        <?
        
    while ( $data mysql_fetch_array$result ) ){
        
    ?>
          <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>
     

Thema nicht erledigt

Ähnliche Themen

  1. mehrere Zeilen/(rows) updaten
    Von Nobody33 im Forum PHP
    Antworten: 2
    Letzter Beitrag: 23.09.09, 16:47
  2. Antworten: 0
    Letzter Beitrag: 15.01.08, 11:48
  3. PHP und Datensätze updaten
    Von matzseesi im Forum PHP
    Antworten: 1
    Letzter Beitrag: 09.12.03, 21:42
  4. Mehrere Tables updaten
    Von manjunja im Forum Relationale Datenbanksysteme
    Antworten: 6
    Letzter Beitrag: 17.09.03, 15:24
  5. mehrere input felder updaten
    Von nautiLus` im Forum PHP
    Antworten: 8
    Letzter Beitrag: 24.08.03, 17:16

Stichworte