Null Wert in DB schreiben geht nicht

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • 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.
    Zuletzt geändert von h3ll; 23.06.2010, 12:17.

    Kommentar


    • #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';

      Kommentar


      • #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]')"

        Kommentar


        • #5
          Zitat von onemorenerd Beitrag anzeigen
          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
          ); 
          Zitat von Dario_PHP Beitrag anzeigen
          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.
          Zuletzt geändert von h3ll; 23.06.2010, 12:24.

          Kommentar


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

            Kommentar


            • #7
              Zitat von h3ll Beitrag anzeigen
              Nein, dann wird nämlich der String 'NULL' geschrieben …
              Darum geht es doch!

              Kommentar


              • #8
                Zitat von onemorenerd Beitrag anzeigen
                Darum geht es doch!
                Nein, er möchte einen Null-Wert und nicht 'NULL'.

                Kommentar


                • #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]

                  Kommentar


                  • #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

                    Kommentar


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

                      Kommentar


                      • #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]

                        Kommentar


                        • #13
                          Zitat von Dario_PHP Beitrag anzeigen
                          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?

                          Kommentar


                          • #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...

                            Kommentar


                            • #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]

                              Kommentar

                              Lädt...
                              X