Подтвердить, являются ли данные формы текущей выборкой ввода

У меня есть выбор:

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

Related of "Подтвердить, являются ли данные формы текущей выборкой ввода"

Более чистый способ сделать это будет

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