Ankündigung

Einklappen
Keine Ankündigung bisher.

NULL-Wert ueber PHP in MySQL-DB eintragen

Einklappen

Neue Werbung 2019

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

  • NULL-Wert ueber PHP in MySQL-DB eintragen

    Hallo,
    seit kurzem beschaeftige ich mich mit PHP und MySQL und komme beim meinem Selbststudium grad nicht weiter und freue mich auf ein paar Tips von Euch.

    Mein Problem ist folgendes:
    Ich habe eine kleine Testtabelle kreiert mit drei Parametern:
    ID, NAME, DATUM
    ID ist definiert als INTEGER und AUTO_INCREMENT (NOT NULL)
    NAME als VARCHAR (NOT NULL)
    DATUM als DATE (NULL)

    In dem kleinen Script unten (das soweit funktioniert) möchte ich nun den Parameter $datum auf NULL setzen und den auch so in die Datenbank eintragen.

    (Spaeter einmal sollen die Werte der Parameter aus einem Formular kommen... in dem das DATUM optional ist)

    Wenn ich nun, um das zu simulieren, den Parameter $datum="" setze, bekomme ich folgende Fehlermeldung:
    Error: INSERT INTO 3_spalten (name, datum) VALUES ('Bodo99','')
    Incorrect date value: '' for column 'datum' at row 1

    Ich weiss nun nicht, wie ich in dem PHP-Code (der in HTML eingebettet ist) NULL definiere und uebergeben kann.

    Danke fuer ein paar Tips.

    Bodo

    Code:
    <html>
    <head>
      <title></title>
    </head>
    <body>
    <?php
    $name = "Bodo99";
    $datum = "1999.12.31";
        // verbindung aufbauen
        $verbindung = mysql_connect("localhost", "root", "xxxx")
        or die ("keine Verbindung möglich. Benutzername oder Passwort sind falsch");
        mysql_select_db("kleiner_test")
        or die ("Die Datenbank existiert nicht.");
        //datensatz eintragen
        $eintrag = "INSERT INTO 3_spalten (name, datum) VALUES ('$name','$datum')";
        $eintragen = mysql_query($eintrag)
        OR die("Error: $eintrag <br>".mysql_error());
     
        if($eintragen == true)
        {
            echo "Eintrag war erfolgreich<br>";
        }
        else
        {
           echo "Fehler beim Speichern!<br>";
        }
        //tabelle ausgeben
        $abfrage = "SELECT id, name, datum FROM 3_spalten";
        $ergebnis = mysql_query($abfrage);
        while($row = mysql_fetch_object($ergebnis))
        {
            echo "$row->id, $row->name, $row->datum <br>";
        }
     
        //verbindung beenden
        mysql_close($verbindung);
    ?>
    </body>
    </html>

  • #2
    Hallo, willkommen hier bei uns im Forum

    Na wenn $datum leer ist schreibst du statt '$datum' einfach ein NULL ins SQL-Statement. Dafuer musst du einfach nur eine Bedingung vorher abtesten.

    Wahlweise kannst du natuerlich das SQL-Statement auch so umformen, dass die NULL-Spalte erst garnicht aufgefuehrt wird.
    INSERT INTO (name) VALUES('$name')

    Mach dich auch mal mit SQL-Injection vertraut, siehe dazu:
    PHP: SQL Injection - Manual
    PHP: mysql_real_escape_string - Manual
    PHP: Runtime Configuration - Manual
    "[URL="http://www.youtube.com/watch?v=yMAa_t9k2VA&feature=youtu.be&t=25s"]Mein Name ist Lohse, ich kaufe hier ein.[/URL]"

    Kommentar


    • #3
      Hey Chriz,

      danke Dir, hmm, ist ja einfacher als ich dachte (muss mich erstmal wieder an diese Programmierdenkweise gewoehnen

      Habe nun meinen COde entsprechend angepasst und er funktioniert, prima.
      PHP-Code:
          //datensatz eintragen
          
      if ($datum == "")
          {
              echo 
      "datum ist leer<br>";
              
      $eintrag "INSERT INTO 3_spalten (name, datum) VALUES ('$name', NULL)";
          }
          else
          {
              echo 
      "datum ist NICHT leer<br>";
              
      $eintrag "INSERT INTO 3_spalten (name, datum) VALUES ('$name','$datum')";
          } 
      Wie das eben so ist, war das Beispiel nur ein kleiner Teil, der mich zwar etwas weiter bringt, aber schon liegt das naechste Steinchen im Weg...

      Mein reales "Projekt" besteht naemlich aus einer deutlich groesseren Datenbank-Tabelle mit etwa 10 Parameter, wovon mehrere NULL sind. (Ich taste mich also langsam an die Endloesung ran und pruefe auch jedes kleine Wachstum, damit ich ja alles verstehe)

      zum Beispiel:
      ID, INTEGER, NOT_NULL, AUTP_INCREMENET
      NAME, VARCHAR, NOT_NULL
      VORNAME, VARCHAR, NULL
      DATUM, DATE, NULL
      RACENAME, VARCHAR, NOT_NULL
      RACEDISCIPLINE, VARCHAR, NULL
      ...

      Alle Parameter (bis auf ID) kommen spaeter einmal aus einem Formular.

      Nun muesste ich ja, um Chriz Vorschlag anzuwenden (siehe Code oben), jeden einzelnen Parameter daraufhin ueberpruefen, ob er LEER ist oder nicht, um dann den INSERT-Befehl zusammenzubauen.

      Hmm, genau hier stehe ich etwas auf dem Schlauch...

      Ich nehme z.B. mal an, dass DATUM und RACEDISCIPLINE als NULL-Werte aus dem Formular kommen. In diesem Beispiel muss die INSERT-Kommandozeile wohl so aussehen:

      PHP-Code:
      $eintrag "INSERT INTO tabellenname (name, vorname, datum, racename, racediscipline) VALUES ('$name', 'vorname', NULL, 'racename', NULL)"
      Wie kann ich nun, je nachdem ob die Parameter NULL sind oder gefuellt, das Kommando zusammenbauen?

      Ich weiss, mir fehlen hier wahrscheinlich ein paar wichtige Grundlagen... was ich brauche von Euch, ist eher ein sanfter aber sichtbarer Wink mit dem Zaunpfahl , d.h. welchen Befehl/welche Syntax kann ich dafuer nutzen...

      Vielen Dank

      Bodo

      Kommentar


      • #4
        mal als idee:
        PHP-Code:
        if(empty($_GET['para1'])) $para1="NULL";
        else 
        $para1=$_GEt['para1'];

        $sql="INSERT INTO table(spalte1, spalte2,spalte3...) VALUES($para1$para2$para3)... 
        Under Construktion

        Kommentar


        • #5
          Warum schreibst du den gesamten Query pro Bedingung neu, wenn sich nur die Spaltenzuweisung unterscheidet?
          "[URL="http://www.youtube.com/watch?v=yMAa_t9k2VA&feature=youtu.be&t=25s"]Mein Name ist Lohse, ich kaufe hier ein.[/URL]"

          Kommentar


          • #6
            @Hu5el, danke, das sieht kurz und hilfreich aus... werde ich ausprobieren...

            @Chriz: ganz einfach, weil ich's nicht besser weiss
            ..oder meintest du gar nicht mich ?!

            Danke erstmal...
            ... wahrscheinlich melde ich mich wieder mit irgendeinem schlecht programmierten Code... (der vielleicht funktioniert aber nicht besonders effizient ist)

            Gruss, Bodo

            Kommentar


            • #7
              Hallo,
              schreib dir doch eine Funktion, der du z.B. die Formulareingabe uebergibst.
              Diese prueft mit empty() ob strlen(trim(..)) > 0 ob die Variable einen Wert enthaelt. Wenn ja verpackt sie die Variable fuer MySQL (magic_quotes_gpc/mysql_real_escape_string) oder gibt NULL (als String) zurueck.

              PHP-Code:
              <?php
              function getMySqlValue($value) {
                if (empty(
              $value)) {
                  return 
              "NULL";
                }
                if (
              get_magic_quotes_gpc()) {
                  
              $value stripslashes($value);
                }
                return 
              "'" mysql_real_escape_string($value) . "'"// " ' "
              }
              ?>
              Du kannst die Funktion etwa so anwenden:
              PHP-Code:
              <?php
              $sql 
              sprintf("INSERT INTO table (col1, col2) VALUES (%s, %s)"getMySqlValue($_POST["col1"]), getMySqlValue($_POST["col2"]));
              ?>
              (ungetestet)

              Natuerlich ist das immer noch nicht optimal, aber ein Schritt in die richtige Richtung.
              "[URL="http://www.youtube.com/watch?v=yMAa_t9k2VA&feature=youtu.be&t=25s"]Mein Name ist Lohse, ich kaufe hier ein.[/URL]"

              Kommentar

              Lädt...
              X