Anja: NULL als value einer <option>?

Hallo!

Kann ich einem <option>-Eintrag einer <select>-Liste den value NULL geben - dass also beim Speichern des values in eine Datenbank tatsächlich NULL gespeicht wird und nicht der String "null"?

Grüße,
Anja

  1. Kann ich einem <option>-Eintrag einer <select>-Liste den value NULL geben - dass also beim Speichern des values in eine Datenbank tatsächlich NULL gespeicht wird und nicht der String "null"?

    Ja, das ist ohne weiteres möglich - du kannst auch jeden anderen Wert nehmen, anhand dessen das verarbeitenden Programm erkennt, dass es sich um einen NULL-Wert handelt. Allerdings sieht es fast so aus, als ob du Formulardaten ungeprüft in ein SQL-Statement übernimmst, und das wäre fatal (SQL Injection). Ob du überhaupt NULL-Werte brauchst und du ggf. Felder, die du mittels einer Einfügeoperation nicht ansprichst, automatisch mit NULL vorbelegen kannst, lässt sich nur anhand deiner konkreten Vorgaben und des verwendeten DB-Systems beantworten.

    Siechfred

    1. Ja, das ist ohne weiteres möglich - du kannst auch jeden anderen Wert nehmen, anhand dessen das verarbeitenden Programm erkennt, dass es sich um einen NULL-Wert handelt.

      Wie denn? Bei <option value="null"> wird der String "null" übertragen ... :-(

      »»Allerdings sieht es fast so aus, als ob du Formulardaten ungeprüft in ein SQL-Statement übernimmst, und das wäre fatal.
      Nein, nein, die Eingaben werden geprüft um dies zu verhindern, allerdings kann ich diese Prüf-Funktion nicht entsprechend bearbeiten (wird in mehreren Projekten eingesetzt).
      Und jeden Wert, der aus einem <select> kommt, einzeln zu überprüfen (if wert = "x" then wert = NULL ... oder so ähnlich ...) ist mir irgendwie zu nervig.

      »»Ob du überhaupt NULL-Werte brauchst und du ggf. Felder, die du mittels einer Einfügeoperation nicht ansprichst, automatisch mit NULL vorbelegen kannst, lässt sich nur anhand deiner konkreten Vorgaben und des verwendeten DB-Systems beantworten.

      1. Tach auch.

        Ja, das ist ohne weiteres möglich - du kannst auch jeden anderen Wert nehmen, anhand dessen das verarbeitenden Programm erkennt, dass es sich um einen NULL-Wert handelt.
        Wie denn? Bei <option value="null"> wird der String "null" übertragen ... :-(

        Dafür hat man Quoting erfunden. Dein Datenbankkonnektor bietet dir sicherlich eine Möglichkeit dazu an. Quoting (kurz und einfach ausgedrückt) escapet alle Sonderzeichen und setzte ' um den Wert (wenn es als String gequotet werden soll, bei Zahlwerten macht es wiederum was anderes usw.).

        Wenn du in dem Falle den String 'null' (den dir der Browser übergibt) quotest, wird tatsächlich 'null' eingetragen. Also machst du etwas wie:

        if ($value == 'null')
          $quoted_value = 'NULL';
        else
          $quoted_value = $dbi->quote($value);

        Oder so ähnlich halt^^

        Bis die Tage,
        Matti

      2. Ja, das ist ohne weiteres möglich - du kannst auch jeden anderen Wert nehmen, anhand dessen das verarbeitenden Programm erkennt, dass es sich um einen NULL-Wert handelt.
        Wie denn? Bei <option value="null"> wird der String "null" übertragen ... :-(

        Ja, und? Ein SQL-Statement ist aus Sicht des Programmes auch nur ein String. Mal angenommen, du hast ein Formularelement namens "Foo", dessen Wert "NULL" sei. In deinem Programm kannst du Folgendes machen (MySQL und Perl-Syntax):

        my $sql_statement = 'INSERT INTO tabelle SET spalte = ' . $CGI::param('Foo');

        Dann sähe dein Statement so aus:

        INSERT INTO tabelle SET spalte = NULL

        Sowas meintest du doch, oder? Wenn du vorher die Eingaben prüfst, ist es völlig egal, ob Foo nun den Wert NULL oder Hosenmatz hat, weil du sowieso auf die verschiedenen Möglichkeiten reagieren musst.

        Siechfred

        1. Tauch auch.

          my $sql_statement = 'INSERT INTO tabelle SET spalte = ' . $CGI::param('Foo');

          Dann sähe dein Statement so aus:

          INSERT INTO tabelle SET spalte = NULL

          Und hier nochmal der wiederholte Hinweis, dass man es so _nicht_ machen sollte. Nutze Quoting und lasse nur speziell geprüfte Werte ungequotet in deinen SQL-Code.

          Was an der Richtigkeit von Siechfrieds Aussage natürlich nichts ändert.

          Bis die Tage,
          Matti

  2. Hi,

    Kann ich einem <option>-Eintrag einer <select>-Liste den value NULL geben - dass also beim Speichern des values in eine Datenbank tatsächlich NULL gespeicht wird und nicht der String "null"?

    per HTTP werden *alle* Werte als String übergeben - immer und garantiert. Die serverseitige Logik muss ergo auf jeden Fall eine Fallunterscheidung vornehmen; HTML alleine kann Dir keinesfalls helfen.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. per HTTP werden *alle* Werte als String übergeben - immer und garantiert. Die serverseitige Logik muss ergo auf jeden Fall eine Fallunterscheidung vornehmen; HTML alleine kann Dir keinesfalls helfen.

      Ah, ok, danke ....