PHP Почему! Пустой не работает?

0

! empty работает в этом коде:

if (!empty($p1_firstname))
mysql_query ("INSERT INTO cases VALUES ('','$case','$date_booked','$p1_firstname','$p1_lastname','$city')");

if (!empty($p2_firstname)) 
$register_case = mysql_query ("INSERT INTO cases VALUES ('','$case','$date_booked','$p2_firstname','$p2_lastname','$city')");

но не этот код:

if (!empty($p1_firstname))
$passenger1 = 1;
mysql_query ("INSERT INTO cases VALUES ('','$case','$passenger1','$date_booked','$p1_firstname','$p1_lastname','$city')");

if (!empty($p2_firstname)) 
$passenger2 = 2;
$register_case = mysql_query ("INSERT INTO cases VALUES ('','$case','$passenger2','$date_booked','$p2_firstname','$p2_lastname','$city')");

Он по-прежнему выполняет запрос, даже если поле пусто. Что можно сделать, чтобы исправить это?

  • 1
    PS. Вам следует использовать PDO ( net.tutsplus.com/tutorials/php/… ), потому что если вы не избежите запросов, ваш сайт будет уязвим для SQL-инъекций! ЗОП подготовило заявления, которые защитят вас от этого!
Теги:

1 ответ

8

Потому что вам не хватает фигурных скобок

if (!empty($p1_firstname)) {
    $passenger1 = 1;
    mysql_query ("INSERT INTO cases VALUES ('','$case','$passenger1','$date_booked','$p1_firstname','$p1_lastname','$city')");
}

if (!empty($p2_firstname)) {
    $passenger2 = 2;
    $register_case = mysql_query ("INSERT INTO cases VALUES ('','$case','$passenger2','$date_booked','$p2_firstname','$p2_lastname','$city')");
}

Отсутствующие фигурные скобки означают, что только оператор, следующий за if, выполняется, если их условия выполнены. Вызов mysql_query() вообще не является частью блоков if и будет выполняться независимо от того, являются ли ваши переменные empty() или нет.

Отключив фигурные скобки и, не отступая от правильного кода, такая ошибка становится еще труднее обнаружить. Не то чтобы вы этого не сделали, но это намного безопаснее и приводит к меньшему времени, потраченному на упущение, чтобы привыкнуть к хорошему отступу и использовать фигурные скобки, чтобы четко указывать блоки потока управления.

  • 0
    спасибо, решил проблему

Ещё вопросы

Сообщество Overcoder
Наверх
Меню