Martin: Mehrere Spalten aufeinmal aktualisieren

Morgen zusammen

Eigentlich möchte ich folgende Tabelle aktualisieren:
---------------------------------
|id name                wert    |
---------------------------------
|1  body                #FFFFFF |
|2  tabellenhintergrund #FFFFFF |
|3  anzahl_ein          2       |
---------------------------------

Aber nur die Spalte wert.

Mein update Script sieht so aus:
$aendern = ("UPDATE gbmauchcss SET wert='$body', wert='$tabelle', wert='$anzahl_ein' ");
$update = mysql_query($aendern);
$updaten = mysql_query($update) or die(mysql_error());

echo "<center><br><strong><font color="#CCCCCC" size="2" face="Verdana, Arial, Helvetica, sans-serif">\n";
echo "Änderung wurde erfolgreich gespeichert</font></strong><br>\n";

Leider funktioniert es nicht.
Hat mir jemand einen kleinen Tipp, was ich ändern muss?

Danke und Gruss
Michi

  1. echo $begrueszung;

    $aendern = ("UPDATE gbmauchcss SET wert='$body', wert='$tabelle', wert='$anzahl_ein' ");

    Die vom INSERT bekannte Syntax, um mehrerer Datensätze mit unterschiedlichen Werten einzufügen, gibt es beim UPDATE nicht.
    Die Ordnung der Datensätze in der Tabelle ist nicht bestimmt. Du kannst dich nicht darauf verlassen, dass sie in der Reihenfolge, wie du sie dir heute zu Gesicht bekommst, auch noch morgen stehen. Deswegen ist so ein UPDATE mit in einer bestimmter Reihenfolge angeordneten Daten einfach nicht anwendbar.

    Wenn du (eine) bestimmte Zeile(n) ansprechen willst, musst du eine entsprechende WHERE-Klausel definieren. In diesen Zeilen wird jeweils die Anweisung in der SET-Klausel angewendet.

    Wenn unterschiedliche SET-Anweisungen in den Zeilen, auf die die WHERE-Klausel zutrifft, auszuführen sind, dann geht das nicht mit einem einzigen UPDATE-Befehl.

    echo "$verabschiedung $name";

    1. Wenn unterschiedliche SET-Anweisungen in den Zeilen, auf die die WHERE-Klausel zutrifft, auszuführen sind, dann geht das nicht mit einem einzigen UPDATE-Befehl.
      Habe jetzt mal versucht nur einen Wert zu übergeben. Aber trotzdem eine WHERE Klausel eingebaut...nicht mal das geht:-(
      $aendern = ("UPDATE gbmauchcss SET wert='$anzahl_ein' WHERE name='anzahl_ein' ");
      $update = mysql_query($aendern);
      $updaten = mysql_query($update) or die(mysql_error());

      Und kann ich einen zweiten Update Query einfach hintenanstellen?

      Danke und Gruss
      Martin

      1. echo $begrueszung;

        Habe jetzt mal versucht nur einen Wert zu übergeben. Aber trotzdem eine WHERE Klausel eingebaut...nicht mal das geht:-(

        "Geht nicht" ist keine Fehlerbeschreibung :-) Besser ist, wenn du schreibst, was du erwartest und was passiert.

        $aendern = ("UPDATE gbmauchcss SET wert='$anzahl_ein' WHERE name='anzahl_ein' ");

        Das sieht doch gar nicht schlecht aus so. Was kommt denn raus, wenn du dir $aendern ausgeben lässt?
        Und ergibt eine SELECT-Abfrage mit dieser WHERE-Klausel den gewünschten Datensatz?

        Übrigens: Die Klammern kannst du weglassen.

        $update = mysql_query($aendern);
        $updaten = mysql_query($update) or die(mysql_error());

        Ahh.. was ist das? Das hab ich ja im Ursprungsposting ganz übersehen. Zwei mal query hintereinander und das zweite fütterst du mit dem Ressource identifier des ersten? Das kann nicht richtig sein.

        Und kann ich einen zweiten Update Query einfach hintenanstellen?

        Wenn man es richtig macht, dann schon.

        echo "$verabschiedung $name";

        P.S. Bitte lass die Zitatzeichen beim Antworten stehen.

        1. "Geht nicht" ist keine Fehlerbeschreibung :-) Besser ist, wenn du schreibst, was du erwartest und was passiert.

          Ist mir aufgefallen, als ich auf Senden geklickt habe.

          $aendern = ("UPDATE gbmauchcss SET wert='$anzahl_ein' WHERE name='anzahl_ein' ");

          Das sieht doch gar nicht schlecht aus so. Was kommt denn raus, wenn du dir $aendern ausgeben lässt?

          Hattest recht, stimmte eigentlich alles.

          Übrigens: Die Klammern kannst du weglassen.

          Habe ich auch noch gemacht.

          $update = mysql_query($aendern);
          $updaten = mysql_query($update) or die(mysql_error());

          Die untere Zeile habe ich weggelassen und dann....super dann gings.

          Ahh.. was ist das? Das hab ich ja im Ursprungsposting ganz übersehen. Zwei mal query hintereinander und das zweite fütterst du mit dem Ressource identifier des ersten? Das kann nicht richtig sein.

          Wenn man es richtig macht, dann schon.

          Ist das so in etwa richtig? Laufen tut es, nur macht man es auch so?

          $aendern = "UPDATE gbmauchcss SET wert='$anzahl_ein' WHERE name='anzahl_ein'";
          $update = mysql_query($aendern);
          $aendern = "UPDATE gbmauchcss SET wert='$body' WHERE name='body'";
          $update = mysql_query($aendern);

          Vielen Dank für deine Hilfe!
          Gruss
          Martin

          1. echo $begrueszung;

            Wenn man es richtig macht, dann schon.
            Ist das so in etwa richtig? Laufen tut es, nur macht man es auch so?

            $aendern = "UPDATE gbmauchcss SET wert='$anzahl_ein' WHERE name='anzahl_ein'";
            $update = mysql_query($aendern);
            $aendern = "UPDATE gbmauchcss SET wert='$body' WHERE name='body'";
            $update = mysql_query($aendern);

            Ja, das passt soweit vom Funktionalen her gesehen.

            Anzumerken wäre noch:

            • Das Zuweisen des mysql_query-Ergebnisses an $update ist nicht erforderlich, wenn du es nicht später auswerten willst.
            • Wenn ein Fehler auftritt (Datenbank-Verbindung ausgefallen, unerwartete Werte im den Variablen, ...) ignorierst du den momentan einfach. Soll das so sein?
            • Ist die Quelle der Variablen-Inhalte von $anzahl_ein, $body, ... vertrauenswürdig? Ist sichergestellt, dass da kein ' drin vorkommen kann? Wenn nicht, dann verwende mysql_real_escape_string().

            echo "$verabschiedung $name";