Ist es möglich, mit PHP einen HTML SELECT/OPTION-Wert als NULL zu haben?

Lesezeit: 3 Minuten

Benutzer-Avatar
Bernhard

Das Folgende ist ein Ausschnitt aus meinem HTML-Formular, das die Optionen entsprechend aus den Tabellenzeilen zieht.

Was ich tun möchte, ist, dass der erste Optionswert NULL ist. Wenn also keine Auswahl getroffen wird, wird NULL eingegeben, wenn das Formular an die Datenbank gesendet wird.

    <td>Type</td>
    <td>:</td>
    <td><select name="type_id" id="type_id" class="form">
    <option value=""></option>
        <?php 
            $sql = mysql_query("SELECT type_id, type FROM $tbl_add_type") or die(mysql_error());
            while ($row = mysql_fetch_array($sql))
                {
                    echo "<option value=".$row['type_id'].">" . $row['type'] . "</option>";
                }
        ?>
    </select>*</td>

Ist das möglich? Oder könnte jemand einen einfacheren/besseren Weg vorschlagen, dies zu tun?

Vielen Dank

Update: Danke für die Antwort, ich verwende die unten beschriebene Methode, um sie in NULL zu konvertieren.

if ($_POST['location_id'] === '')
                    {
                        $_POST['location_id'] = 'NULL';
                    }

Wenn Sie jedoch versuchen, diesen NULL-Wert mit der folgenden Abfrage zu verwenden, funktioniert dies nicht.

UPDATE addresses SET location_id='NULL' WHERE ipid = '4791'

Ich weiß, dass es sein muss location_id=NULL stattdessen weiß aber nicht wie das geht…

Update 2: So funktionieren meine Abfragen:

if ($_POST['location_id'] === '')
{
$_POST['location_id'] = 'NULL'; // or 'NULL' for SQL
}

$notes=isset($_POST['notes']) ? mysql_real_escape_string($_POST['notes']) : '';
//$location_id=isset($_POST['location_id']) ? mysql_real_escape_string($_POST['location_id']) : '';
$ipid=isset($_POST['ipid']) ? mysql_real_escape_string($_POST['ipid']) : '';


$sql="UPDATE addresses 
    SET notes="$notes", location_id='$location_id'
    WHERE ipid = '$ipid'";


mysql_query($sql) or die(mysql_error());

Nein, POST/GET-Werte sind es nie null. Das Beste, was sie sein können, ist eine leere Zeichenfolge, in die Sie konvertieren können null/'NULL'.

if ($_POST['value'] === '') {
    $_POST['value'] = null; // or 'NULL' for SQL
}

  • Danke, Deceze – ich habe Ihre Antwort verwendet, habe aber immer noch Probleme, sie auf die richtige NULL zu bringen – wenn Sie mich aktualisieren sehen. Irgendwelche Ideen?

    – Bernhard

    10. Januar 2012 um 1:17 Uhr

  • @Alien Das ist kein POST/GET-Wert, das ist ein nicht existent Wert.

    – verzeihen

    10. Januar 2012 um 1:24 Uhr


  • @Bernard Nun, wie bauen Sie Ihre Abfragen auf?

    – verzeihen

    10. Januar 2012 um 1:28 Uhr

  • Ich weise nur darauf hin: if ($_POST['missingKey'] === null) { /* this could get executed */ }

    – AlienWebguy

    10. Januar 2012 um 1:30 Uhr

  • Egal, sortiert. Das ‘ um $location_id in meiner SQL-Abfrage entfernt und es funktioniert. Ich kann nicht glauben, dass es so einfach war, doh!

    – Bernhard

    10. Januar 2012 um 2:32 Uhr

Benutzer-Avatar
Jason

Alles, was Sie brauchen, ist ein Check auf der Post-Seite der Dinge.

if(empty($_REQUEST['type_id']) && $_REQUEST['type_id'] != 0)
    $_REQUEST['type_id'] = null;

  • Der ist gefährlich. Was wäre wenn type_id=0 ist ein gültiger Ausweis?

    – AlienWebguy

    9. Januar 2012 um 23:41 Uhr

  • Das ist richtig. In Wirklichkeit würde ich einen anderen Ansatz vorschlagen, aber realistisch gesehen wird es höchstwahrscheinlich zu mühsam für den Fragesteller sein.

    – Jason

    9. Januar 2012 um 23:46 Uhr

Benutzer-Avatar
Michael Walther

Ja, es ist möglich. Sie müssen so etwas tun:

if(isset($_POST['submit']))
{
  $type_id = ($_POST['type_id'] == '' ? "null" : "'".$_POST['type_id']."'");
  $sql = "INSERT INTO `table` (`type_id`) VALUES (".$type_id.")";
}

Es prüft, ob die $_POST['type_id'] Variable hat einen leeren Wert. Wenn ja, zuweisen NULL als Schnur dazu. Wenn nicht, weisen Sie ihm den Wert mit ‘zu SQL Notation

  • PHP-Syntaxfehler: unerwartetes ‘]’ Zeile 3

    – Jason

    9. Januar 2012 um 23:47 Uhr

In PHP 7 können Sie Folgendes tun:

$_POST['value'] ?? null;

Wenn der Wert gleich ” ist, wie in anderen Antworten gesagt, wird Ihnen auch null gesendet.

Benutzer-Avatar
Ihr gesunder Menschenverstand

deshalb mag ich überhaupt keine NULL-Werte in der Datenbank.
Ich hoffe, Sie haben es für ein Grund.

if ($_POST['location_id'] === '') {
  $location_id = 'NULL';
} else {
  $location_id = "'".$_POST['location_id']."'";
}
$notes = mysql_real_escape_string($_POST['notes']);
$ipid  = mysql_real_escape_string($_POST['ipid']);

$sql="UPDATE addresses 
    SET notes="$notes", location_id=$location_id
    WHERE ipid = '$ipid'";

echo $sql; //to see different queries this code produces
// and difference between NULL and 'NULL' in the query

1245010cookie-checkIst es möglich, mit PHP einen HTML SELECT/OPTION-Wert als NULL zu haben?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy