У меня есть выбор:
<label for="gender">Gender:</label> <select id="gender" name="gender"> <option value="Male">Male</option> <option value="Female">Female</option> </select>
Как проверить, принадлежат ли представленные данные для выбора ввода?
Я пытался:
<?php if ($_POST['gender'] !== 'Male' || $_POST['gender'] !== 'Female') { // perform redirect }
Более чистый способ сделать это будет
$options = array( 'Male', 'Female' ); if( !in_array( $_POST['gender'], $options ) ) // if Male or Female are not in $_POST // redirect
if ($_POST['gender'] != 'Male' && $_POST['gender'] != 'Female') { // perform redirect }
Вышеуказанное будет перенаправлено, если ни одна из этих опций не будет проверена. Но лично я предпочитаю использовать вариант «Выбор» и просто проверять его.
<label for="gender">Gender:</label><select id="gender" name="gender"> <option value="0" selected=selected>--Choose--</option> <option value="Male">Male</option> <option value="Female">Female</option> </select> if ($_POST['gender'] != '0') { // perform redirect }
Кроме того, ваш оригинал будет работать с:
if ($_POST['gender'] == 'Male' || $_POST['gender'] == 'Female') { // perform redirect }
Вы также можете использовать этот метод.
<?php if ( isset($_POST['submit']) ) { $_POST = array_map( 'stripslashes', $_POST ); extract( $_POST ); if ( !isset($Male) && !isset($Female) ) { // redirect } } ?>
Вы должны избегать передачи буквальных значений вообще, когда они находятся в известном диапазоне / домене.
Форма может быть сгенерирована с использованием индексированного значения, например
<?php $options = []; $options['gender'] = [1 => 'Male', 2 => 'Female']; ?> <label for="gender">Gender:</label> <select id="gender" name="gender"> <?php foreach ($options['gender'] as $i => $name):?> <option value="<?=$i?>"><?=$name?></option> <?php endforeach;?> </select>
Тогда логика проверки ввода просто проверит наличие значения в массиве $options
, например
<?php if (isset($options['gender'][$_POST['gender']])) { // }
Кроме того, рассмотрите возможность использования существующих инструментов создания форм (например, https://github.com/gajus/dora ) и входных библиотек проверки ( https://github.com/gajus/vlad ). Я являюсь автором обеих библиотек, и каждая библиотека будет ссылаться на существующие альтернативы. Цель использования существующей библиотеки для создания формы и обработки входных данных заключается в том, чтобы избежать повторного изобретательства колеса и защиты от глупых ошибок безопасности, которые часто игнорируются при обработке форм, например, XSS.