Null Wert in DB schreiben geht nicht

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Null Wert in DB schreiben geht nicht

    Hallo zusammen,
    ich hab ein total dämliches Problem und zwar möchte ich eigentlich nur einen Null-Wert in meine MySql-DB schreiben.
    Hierbei handelt es sich um ein date-Feld in der DB.

    Ich sage z.B.

    PHP Code:
    <?php
    if ($_POST[meldung_fertigstellungsdatum] == "")
     {
     
    $_POST[meldung_fertigstellungsdatum] = Null;
     }
    ?>
    Ich bekomme aber immer den Fehler "Incorrect date value". Mir ist schon klar was das bedeutet, aber ich hab schon auch "NULL" geschrieben und trotzdem die selbe Meldung.
    In der DB kann die Spalte den Zustand NULL annehmen und deswegen weiß ich nict mehr weiter. Ich hoffe einer hat einen Tipp.

  • #2
    Das hat mit der Datenbank nichts zu tun. Einen NULL-Wert schreibt man so in die Datenbank:

    Code:
    INSERT INTO tabelle (spalte1, spalte2) VALUES (NULL, NULL)
    bzw.
    Code:
    UPDATE tabelle SET spalte1 = NULL, spalte2 = NULL WHERE id = 123
    Außerdem muss die Spalte natürlich auch nullable sein.
    Last edited by h3ll; 23-06-2010, 11:17.

    Comment


    • #3
      PHP Code:
      $foo NULL;
      $sql 'UPDATE ... SET datecol = "'.$foo.'"';
      echo 
      $sql
      Ausgabe:
      UPDATE ... SET datecol = ""

      Begründung: Wenn man eine Variable in einen String einbaut, konvertiert PHP diese Variable zuvor auch zu einem String. Dabei wird der Wert NULL zu einem leeren String.

      In deinem Fall steht also nicht NULL in der Query sondern gar kein Wert.
      Einfache Lösung: $foo = 'NULL';

      Comment


      • #4
        [COLOR=#000000][COLOR=#0000cc][FONT=Courier New][COLOR=#000000][COLOR=#0000cc][FONT=Courier New][COLOR=#000000][FONT=Courier New][COLOR=#0000cc]Also so funktioniert es auch nicht... [/COLOR][/FONT][/COLOR][/FONT][/COLOR][/COLOR][/FONT][/COLOR][/COLOR]

        PHP Code:
        <?php
        if ($_POST[meldung_fertigstellungsdatum] == "")
        {
        $_POST[meldung_fertigstellungsdatum] = NULL;
        }
        ?>
        [COLOR=#000000][COLOR=#0000cc][FONT=Courier New][COLOR=#000000][FONT=Courier New][COLOR=#0000cc]nicht das wir uns falsch verstehen, weiter unten sieht es so aus[/COLOR][/FONT][/COLOR][/FONT][/COLOR][/COLOR]

        PHP Code:
        $sql="Insert into tb_meldung (MD_Fertigstellungsdatum)
        VALUES ('
        $_POST[meldung_fertigstellungsdatum]')"

        Comment


        • #5
          Originally posted by onemorenerd View Post
          In deinem Fall steht also nicht NULL in der Query sondern gar kein Wert.
          Einfache Lösung: $foo = 'NULL';
          Nein, dann wird nämlich der String 'NULL' geschrieben und nicht ein NULL-Wert.

          PHP Code:
          $wert null;
          $id 123;

          $sql sprintf(
              
          "UPDATE tabelle SET spalte = %s WHERE id = %u",
              
          null === $wert "NULL" "'" mysql_real_escape_string($wert) . "'",
              
          $id
          ); 
          Originally posted by Dario_PHP View Post
          PHP Code:
          $sql="Insert into tb_meldung (MD_Fertigstellungsdatum)
          VALUES ('
          $_POST[meldung_fertigstellungsdatum]')"
          POST- und GET-Werte niemals direkt in einem SQL-Query verwenden. Das ist eine riesige und oft missbrauchte Sicherheitslücke.
          Last edited by h3ll; 23-06-2010, 11:24.

          Comment


          • #6
            Alles klar, jetzt hab ich es acuh verstanden... danke

            Comment


            • #7
              Originally posted by h3ll View Post
              Nein, dann wird nämlich der String 'NULL' geschrieben …
              Darum geht es doch!

              Comment


              • #8
                Originally posted by onemorenerd View Post
                Darum geht es doch!
                Nein, er möchte einen Null-Wert und nicht 'NULL'.

                Comment


                • #9
                  Ihr habt beide Recht, aber ihr redet aneinander vorbei.
                  [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                  Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                  Super, danke!
                  [/COLOR]

                  Comment


                  • #10
                    Ne es geht immer noch nicht... keine Plan woran das liegt. Wenn ich was eingetragen habe, dann übernimmt er es ohne Probleme, aber wenn nicht, dann will er nichts von mein NULL wissen und jammert "Incorrect date value"


                    Mein Code:

                    PHP Code:
                    $Fertigstellungsdatum $_POST['meldung_fertigstellungsdatum'];
                           if (
                    $Fertigstellungsdatum == "")
                            {
                            
                    $Fertigstellungsdatum NULL;
                            } 
                    mein Update

                    PHP Code:
                    $sql "UPDATE tb_meldung SET 
                           MD_Fertigstellungsdatum = '"
                    .$Fertigstellungsdatum."'
                           Where MD_ID = "
                    .$id

                    Comment


                    • #11
                      Warum setzt du nicht h3lls Vorschlag erstmal um?

                      Comment


                      • #12
                        Die Lösung wurde dir bereits genannt. Sieh dir deine Abfrage mit echo an und du siehst, warum es so nicht gehen kann. h3lls Beitrag enthält sogar ein Beispiel. Warum du dich nicht dran hältst, wenn du sogar schon Code bekommst, ist mir schleierhaft.
                        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                        Super, danke!
                        [/COLOR]

                        Comment


                        • #13
                          Originally posted by Dario_PHP View Post
                          Mein Code:

                          PHP Code:
                          $Fertigstellungsdatum $_POST['meldung_fertigstellungsdatum'];
                                 if (
                          $Fertigstellungsdatum == "")
                                  {
                                  
                          $Fertigstellungsdatum NULL;
                                  } 
                          mein Update

                          PHP Code:
                          $sql "UPDATE tb_meldung SET 
                                 MD_Fertigstellungsdatum = '"
                          .$Fertigstellungsdatum."'
                                 Where MD_ID = "
                          .$id
                          Ich hab dir schon einmal gesagt, dass es eine riesige Sicherheitslücke ist, wenn du Werte von POST direkt in ein SQL-Query einfügst. Warum machst du es dann?

                          Comment


                          • #14
                            Ich weiß nicht wie ich das machen kann, dass es sicherer ist und dein Beispiel hab ich nicht wirklich verstanden... bin nicht gerade ein Profi was das PHP angeht...

                            Comment


                            • #15
                              Wenn dir schon konkreter Code nicht weiterhilft, wie soll man dir dann überhaupt noch helfen?
                              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                              Super, danke!
                              [/COLOR]

                              Comment

                              Working...
                              X