inspiron: für mehrere DB-Daten gleichzeitig ein "UPDATE"

Hallo,
ich benötige bitte mal wieder eure Hilfe.
Es werden alle Daten einer eingestellten Schicht und einem entsprechenden Datum ausgelesen.
Nun sollen alle Daten die aufgelistet wurden, den Eintrag "JA" in der Spalte "Versendet" bekommen.

ID    | Versendet |....
7301  | JA        |....
7300  | JA        |....

Ich dachte mir die Daten in ein Array "$ergebnis[]" einzulesen und dann wieder mit UPDATE zu speichern.
Die ID's werden schon im Array eingetragen.

array(2) { [0]=> string(4) "7301" [1]=> string(4) "7300" }

  
$ergebnis = array ();  
  
$sql = "SELECT ID FROM `FW_Fehlerbericht` WHERE `SCHICHT` = '" .$_SESSION["schicht"]. "' AND `DATUM` = '" .$_POST["mysql_datum"]. "' ORDER BY `ID` DESC LIMIT 15;";  
  
$abfrageergebnis = mysql_query( $sql, $conID );  
  
//while ($datensatz = mysql_fetch_array( $abfrageergebnis ))  
while ($datensatz = mysql_fetch_assoc($abfrageergebnis))  
{  
$ergebnis[] = $datensatz['ID'];  
}  
echo var_dump ( $ergebnis )."<br>";  

Kann ich "$ergebnis[]" einfach so eintragen oder muß da noch was anderes gemacht werden?

  
$versendet = "JA";  
// Update  
$sql = "UPDATE FW_Fehlerbericht SET VERSENDET = ".$versendet." WHERE ID = ".$ergebnis[]."";  

  1. Hi,

    Kann ich "$ergebnis[]" einfach so eintragen

    $versendet = "JA";
    // Update
    $sql = "UPDATE FW_Fehlerbericht SET VERSENDET = ".$versendet." WHERE ID = ".$ergebnis[]."";

      
    Hast du es ausprobiert, was dabei für ein Statement herauskommt?  
      
    MfG ChrisB  
      
    
    -- 
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    
    1. Hi,

      Kann ich "$ergebnis[]" einfach so eintragen

      $versendet = "JA";
      // Update
      $sql = "UPDATE FW_Fehlerbericht SET VERSENDET = ".$versendet." WHERE ID = ".$ergebnis[]."";

      
      >   
      > Hast du es ausprobiert, was dabei für ein Statement herauskommt?  
      >   
      > MfG ChrisB  
      >   
      >   
      
      Hallo,  
      nein das kann ich nicht da ich noch auf Arbeit bin. Ich wollte erst einmal wissen ob es schon sichtbare Fehler gibt.  
        
      Gruß
      
      1. Hi,

        nein das kann ich nicht da ich noch auf Arbeit bin.

        Wir opfern dir unsere Zeit – und du hast nicht mal die Zeit abzuwarten bis du etwas ausprobieren kannst, so dass sich das Forum nicht mit Trivialfragen herumschlagen muss …?

        Ich wollte erst einmal wissen ob es schon sichtbare Fehler gibt.

        Ja.

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
        1. Hi,

          nein das kann ich nicht da ich noch auf Arbeit bin.

          Wir opfern dir unsere Zeit – und du hast nicht mal die Zeit abzuwarten bis du etwas ausprobieren kannst, so dass sich das Forum nicht mit Trivialfragen herumschlagen muss …?

          Ich wollte erst einmal wissen ob es schon sichtbare Fehler gibt.

          Ja.

          MfG ChrisB

          ...Tschuldigung, konnte ja nicht Wissen das es so schnell geht.
          Bin in 30min zu Hause!

          Gruß

        2. Hallo,
          habe da mal ein versuch gestartet und bekomme diese Meldung:
          Warning: Invalid argument supplied for foreach() in test.php on line 22

          Der Datensatz konnte nicht hinzugefügt werden: Query was empty

            
          // Update  
          if(isset($_POST["submitButton"])) {  
          $versendet = "JA";  
            
          foreach($arrergebnis as $wert)  
          {  
              $sql = "UPDATE FW_Fehlerbericht SET VERSENDET = ".$versendet." WHERE ID = $wert";  
          }  
          $ergebnis = mysql_query( $sql, $conID );  
          if(! $ergebnis )  
          {  
            die('Der Datensatz konnte <strong>nicht</strong> geändert werden: ' . mysql_error());  
          }  
          echo "Der Datensatz wurde geändert!";  
          } // <!-- Ende Update -->  
          
          
          1. Tach!

            habe da mal ein versuch gestartet und bekomme diese Meldung:
            Warning: Invalid argument supplied for foreach() in test.php on line 22

            Wenn PHP das sagt, dann stimmt das üblicherweise. Du übergibst da was, was für das foreach nicht geeignet ist. Was du da übergibst, kannst nur du herausfinden, weil in dem gezeigten Code nicht zu sehen ist, wie du die Variable befüllst. Nimm var_dump() um nachzusehen. (Das solltest du übrigens immer machen, bevor du versucht, die Ursache zu ermitteln (oder ermitteln zu lassen).)

            foreach($arrergebnis as $wert)
            {
                $sql = "UPDATE FW_Fehlerbericht SET VERSENDET = ".$versendet." WHERE ID = $wert";
            }
            $ergebnis = mysql_query( $sql, $conID );

            Das ist nicht sinnvoll: mehrfach ein Statement in eine Variable schreiben und es dann nur einmal ausführen.

            dedlfix.

            1. So,
              ich habe mir mal ein Test gebastelt, dieser funktioniert :)
              Gibt es noch Einwände?

              Was ist jetzt mit dem "Kontextwechsel" gemeint, ich verstehe das nicht?
              Gruß

                
              <?php  
              $arrergebnis = array ();  
                
              $datum = "2013-03-18";  
              $schicht = "PP2.2";  
                
              $sql = "  
              		SELECT  
              			ID  
              		FROM  
              			`FW_Fehlerbericht`  
              		WHERE  
              			`SCHICHT` = '" .$schicht. "'  
              		AND  
              			`DATUM` = '" .$datum. "'  
              		ORDER BY  
              			`ID` DESC LIMIT 15;";  
              			  
              $abfrageergebnis = mysql_query( $sql, $conID );  
              //while ($datensatz = mysql_fetch_array( $abfrageergebnis ))  
              while ($datensatz = mysql_fetch_assoc($abfrageergebnis))  
              {  
              // Ausgabe  
              $arrergebnis[] = $datensatz['ID'];  
              echo $datensatz['ID']."<br>";  
              }  
              echo var_dump ( $arrergebnis )."<br>"; // Kontrollanzeige  
                
              // Update  
              $versendet = "JA";  
              //$arrergebnis = array("7300", "7301", "7302", "7303", "7304", "7305"); // TEST  
                
              if(isset($_POST["submitButton"])) {  
                
                  foreach ($arrergebnis as $ID)  
                  {  
                      $sql = "  
                      		UPDATE  
                      			FW_Fehlerbericht  
                      		SET  
                      			VERSENDET = 'JA'  
                      		WHERE  
                      			ID = $ID";  
                
                      $ergebnis = mysql_query( $sql, $conID ) OR die(mysql_error());  
                  }  
                
              if(! $ergebnis )  
              {  
                die('Der Datensatz konnte <strong>nicht</strong> hinzugefügt werden: ' . mysql_error());  	  
              }  
              echo "Der Datensatz wurde korrigiert!";  
                
              } // <!-- Ende Update -->  
              ?>  
                
              <input type="submit" id="submitButton" name="submitButton" value="&Uuml;bernehmen">  
              
              
              1. Tach!

                ich habe mir mal ein Test gebastelt, dieser funktioniert :)
                Gibt es noch Einwände?

                Statt vieler UPDATEs würde ich nur eins nehmen und die IDs über IN(...) angeben. Dazu kann man das $arrergebnis geeignet implodieren lassen. $arrergebnis ist übrigens ein doofer Name. $ids träfe es besser.

                Was ist jetzt mit dem "Kontextwechsel" gemeint, ich verstehe das nicht?

                Das da: Kontextwechsel

                dedlfix.

              2. Hi,

                foreach ($arrergebnis as $ID)
                    {
                        $sql = "
                         UPDATE
                         FW_Fehlerbericht
                         SET
                         VERSENDET = 'JA'
                         WHERE
                         ID = $ID";

                $ergebnis = mysql_query( $sql, $conID ) OR die(mysql_error());
                    }

                if(! $ergebnis )
                {
                  die('Der Datensatz konnte <strong>nicht</strong> hinzugefügt werden: ' . mysql_error());

                es wäre sinnvoller, if(!ergebnis) in der Schleife auszuführen, denkst du nicht?

                Ansonsten überarbeite nochmal deine Formatierung, sie ist reichlich unübersichtlich.
                Beschäftige dich mit PDO und prepared statements, ist gut für den Kontextwechsel.
                Beschäftige dich grundsätzlich mit Kontextwechsel, z.b. wenn du Daten via POST erhältst, diese auch der Weiterverarbeitung entsprechend zu behandeln.

  2. > $sql = "SELECT ID FROM FW_FehlerberichtWHERESCHICHT= '" .$_SESSION["schicht"]. "' ANDDATUM= '" .$_POST["mysql_datum"]. "' ORDER BYID DESC LIMIT 15;";
    Kontextwechsel nicht beachtet.

    Kann ich "$ergebnis[]" einfach so eintragen oder muß da noch was anderes gemacht werden?

    Nein, da muss noch *was* gemacht werden.

    $versendet = "JA";
    // Update
    $sql = "UPDATE FW_Fehlerbericht SET VERSENDET = ".$versendet." WHERE ID = ".$ergebnis[]."";

    Lass dir doch mal `$sql`{:.language-php} und alle Fehlermeldungen ausgeben.  
      
    MfG  
    bubble
    
    -- 
    If "god" had intended us to drink beer, he would have given us stomachs. - David Daye