Daniel#: Keine "0" in MySQL schreiben

Moin zusammen!

Mit einem Formular mache ich so mit PHP

$sql_eintrag = "UPDATE Daten SET
Wert1='".$_POST['Wert1']."',
...
...
WHERE ...

ein Update meiner MySQL-DB.

Problem: Wenn ein Formular-Feld leer bleibt, wird in die DB eine "0" geschrieben :-( soll aber einfach leer bleiben.
Ich habe in MySQL als Standard für Wert1 "NULL" vergeben, aber ohne Erfolg.
Muß ich mit PHP alles abfragen (wäre ziemlich lästig, weil die Formulare sich über etliche Seiten mit >100 Feldern) erstrecken, wobei viele viele vom Nutzer einfach nicht ausgefüllt werden brauchen.

Daniel

  1. $sql_eintrag = "UPDATE Daten SET
    Wert1='".$_POST['Wert1']."',

    Von außen kommende Werte gehören grundsätzlich mit mysql_real_escape_string() maskiert und (normale) Spaltennamen müssen nicht in Akzente oder Anführungszeichen gesetzt werden.

    Problem: Wenn ein Formular-Feld leer bleibt, wird in die DB eine "0" geschrieben :-( soll aber einfach leer bleiben.

    Du meinst, es soll der Wert NULL rein.

    Muß ich mit PHP alles abfragen (wäre ziemlich lästig, weil die Formulare sich über etliche Seiten mit >100 Feldern)

    PHP bietet die Möglichkeit, Aufgaben in Funktionen zusammenzufassen. Was also hindert dich an in etwa folgendem:

    function sqlwert($a) {
        if (strlen($a)) == 0) {
            return 'NULL';
        }
        else {
            return '"' . mysql_real_escape_string($a) . '"';
        }
    }

    mysql_query("update tabelle set spalte1=" . sqlwert($_POST["feld1"]) . " where a=b");

    1. function sqlwert($a) {
          if (strlen($a)) == 0) {
              return 'NULL';
          }
          else {
              return '"' . mysql_real_escape_string($a) . '"';
          }
      }

      mysql_query("update tabelle set spalte1=" . sqlwert($_POST["feld1"]) . " where a=b");

      Ok, mit etwas veränderter Klammersetzung ;-) bringt mich das erstmal weiter. Mein SQL-Query bringt bei leerem Feld dann

      SQL-QUERY: UPDATE Daten SET Wert1='NULL', ...

      Leider wird in die DB immer noch eine 0 geschrieben :-(

      1. Hello,

        SQL-QUERY: UPDATE Daten SET Wert1='NULL', ...
        Leider wird in die DB immer noch eine 0 geschrieben :-(

        weil 'NULL' etwas anderes ist als NULL.
        Du willst
        SET Wert=NULL
        schreiben

        MfG
        Rouven

        --
        -------------------
        Death is nature's way of telling you to slow down.
        1. Danke! War gar nicht so einfach, sich im Gänsefüßchensalat zürechtzufinden. :o)

          Macht es denn einen Unterschied, ob

          UPDATE Daten SET Wert1='99'

          oder

          UPDATE Daten SET Wert1=99 in die DB geschrieben wird? Wenn ich mit PHPMyAdmin in die Tabelle gucke, ist das Ergebnis das gleiche...

          1. Hello,

            UPDATE Daten SET Wert1='99'
            UPDATE Daten SET Wert1=99 in die DB geschrieben wird?

            Ja, ABER. Das kommt sehr darauf an, wie zickig die Datenbank ist. Im Prinzip sagst du in Fall 1 "ich möchte in Wert1 den Text 99 reinschreiben", in Fall 2 "ich möchte die Zahl 99 reinschreiben" - MySQL, und vmtl. viele andere auch, sagt in Fall 1 "ups, aber das ist doch ne Zahlenspalte, da kann man keinen Text reinschreiben, ich versuch das mal automatisch in eine Zahl umzuwandeln".
            DB2 (zumindest in 5-7er Version, bei den neueren habe ich ich es nicht mehr nachgeschaut), beispielsweise wirft dir das Ding vor die Füße und sagt was in Richtung type mismatch.

            MfG
            Rouven

            --
            -------------------
            Eine Bilanz ist wie der Bikini einer Frau. Sie zeigt fast alles, aber verdeckt das Wesentliche  --  Günter Stotz, Regierungsdirektor des baden-württembergischen Wirtschaftsministeriums
      2. function sqlwert($a) {
            if (strlen($a) == 0) {
                return 'NULL';
            }
            else {
                return '"' . mysql_real_escape_string($a) . '"';
            }
        }

        mysql_query("update tabelle set spalte1=" . sqlwert($_POST["feld1"]) . " where a=b");

        SQL-QUERY: UPDATE Daten SET Wert1='NULL', ...

        Leider wird in die DB immer noch eine 0 geschrieben :-(

        Einfache Anführungszeichen um den Wert habe ich -nicht- benutzt, die musst du da reingeschmuggelt haben. Und die Zeichenkette 'NULL' ist etwas anderes als der Wert NULL, wie Rouven schon schrieb.

  2. echo $begrüßung;

    $sql_eintrag = "UPDATE Daten SET Wert1='".$_POST['Wert1']."',
    Ich habe in MySQL als Standard für Wert1 "NULL" vergeben, aber ohne Erfolg.

    Der Standard-Wert wird nur dann verwendet, wenn du bei einem INSERT (du nimmst ja UPDATE) für ein Feld gar nichts notierst, dieses also in der Auflistung "SET feld=wert" oder "(feld) VALUES (wert)" nicht auftaucht.

    echo "$verabschiedung $name";