Возможно ли использовать значение HTML SELECT / OPTION как NULL с использованием PHP? - PullRequest
31 голосов
/ 10 января 2012

Ниже приведен фрагмент из моей HTML-формы, который соответственно извлекает параметры из строк таблицы.

Я хочу, чтобы первым значением параметра было NULL, поэтому, когда выбор не сделан, NULLвводится при отправке формы в базу данных.

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

Возможно ли это?Или кто-то может предложить более простой / лучший способ сделать это?

Спасибо

Обновление: спасибо за ответ, я использую метод, описанный ниже, чтобы преобразовать его в NULL.

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

Однако при попытке использовать это значение NULL со следующим запросом оно не работает.

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

Я знаю, что вместо этого должно быть location_id=NULL, но не знаю, как это сделать.это ...

Обновление 2: так работают мои запросы:

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());

Ответы [ 5 ]

31 голосов
/ 10 января 2012

Нет, значения POST / GET никогда не равны null.Лучшее, что они могут быть, это пустая строка, которую вы можете преобразовать в null / 'NULL'.

if ($_POST['value'] === '') {
    $_POST['value'] = null; // or 'NULL' for SQL
}
3 голосов
/ 10 января 2012

Все, что вам нужно, это проверка на почтовой стороне вещей.

<?php 
if(empty($_REQUEST['type_id']) && $_REQUEST['type_id']!=0) $_REQUEST['type_id'] = null;
0 голосов
/ 28 января 2019

В php 7 вы можете сделать:

$_POST['value'] ?? null;

Если значение равно '', как сказано в других ответах, оно также отправит вам ноль.

0 голосов
/ 10 января 2012

, поэтому мне вообще не нравятся значения NULL в базе данных.
Я надеюсь, что у вас это есть по причине.

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
0 голосов
/ 10 января 2012

Да, это возможно.Вы должны сделать что-то вроде этого:

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

Он проверяет, имеет ли переменная $_POST['type_id'] пустое значение.Если да, он присваивает ей NULL как строку.Если нет, ему присваивается значение с пометкой SQL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...