Это правильный способ проверить в PHP, что флажок установлен? - PullRequest
1 голос
/ 06 марта 2011

У меня есть этот код, чтобы проверить, установлен ли мой флажок ToS:

if (!isset($_POST['tosagree'])) {//if the user did not agree to ToS
    $errors[] = '<span>Please agree to the Terms of Service.<span>';
}

По какой-то причине это позволяет мне регистрироваться даже с этим кодом. Странно то, что если любое другое поле не является полем, и это поле не проверено, оно напечатает ошибку, но если это единственная проблема, это позволяет пользователю зарегистрироваться.

Обновление: похоже, проблема с чем-то странным в моем коде. Если вы хотите просмотреть 217 строк кода, вот весь код: http://pastebin.com/YkERYpeF

1 Ответ

6 голосов
/ 06 марта 2011

Будет ли достаточно !isset($_POST['tosagree']), зависит от браузера.

Для безопасности всегда устанавливайте атрибут value для флажка.Затем вы просто проверяете, присутствует ли это значение:

<input type='checkbox' value='agreed'/>

Затем выполните это:

if (!isset($_POST['tosagree']) || $_POST['tosagree'] != "agreed" ) {
    $errors[] = '<span>Please agree to the Terms of Service.<span>';
}

Кроме того, когда атрибут value явно не указан, браузеры обычно устанавливаютvalue до On, когда это проверено.

Редактировать

Хорошо, я знаю, что происходит.В вашем PHP-коде у вас есть этот блок:

if (!isset($_POST['tosagree']) || $_POST['tosagree'] != "agreed") {//if the user did not agree to ToS
    $errors[] = '<span>Please agree to the Terms of Service.<span>';
}

Тогда позже у вас есть эта строка:

if ($un && $e && $p && $ic) { //if there are no errors

Проблема в том, что у вас нет флага для того, когда TOSфлажок не установленОшибка не может быть напечатана, потому что в операторе if вы вызываете exit().

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