Я кодировал сценарий, и я застрял в одной маленькой части. Я проверяю, что форма, которую пользователь представляет, защищена. Но я не уверен, как подойти к выпадающему списку, это код, который у меня есть до сих пор:
if ($_POST['type'] != '1' || $_POST['type'] != '2' || $_POST['type'] != '3') // Checks to see if the submitted type matches, prevents exploiting.
{
$supportErrors[] = "Support type you've chosen was not found, possibly trying to exploit this script?";
}
Я не уверен, что это правильный способ проверить его значение. Это моя сторона HTML для этой части скрипта:
<select name="type" id="type" size="1" style="border: 1px solid #000000; background-color: #FFFFFF;">
<option value="1" selected>Support</option>
<option value="2">Question</option>
<option value="3">Complaint</option>
</select>
Теперь, на мой взгляд, значение - это размещенные данные VIA 'type' - поэтому, на мой взгляд, не следует публиковать это значение (1 или 2 или 3), а затем на стороне PHP, он проверяет, является ли оно isn 't 1, 2 или 3?
in_array() является хорошим решением при проверке, соответствует ли одна вещь одной из нескольких опций
if (!in_array($_POST['type'],array(1,2,3))){..}
вы должны развиваться с включенными ошибками:
error_reporting(E_ALL);
ini_set('display_errors', 1);
Вам нужно изменить логику состояния от OR до AND:
if($_POST['type'] != '1' && $_POST['type'] != '2' && $_POST['type'] != '3')...
// Assumimg type as a numeric value , I might achieve it like this
$type = 0;
if( isset( $_POST['type'] ) ) $type = trim( $_POST['type'] ) * 1;
if( $type < 1 )
{
$supportErrors[] = "Please specify type";
}
elseif( $type > 3 )
{
$supportErrors[] = "Invalid type";
}
Обязательно используйте ISSET, чтобы проверить, была ли форма отправлена
<?php
if ( isset( $_POST['type'] ) and $_POST['type'] != '1' || $_POST['type'] != '2' || $_POST['type'] != '3') // Checks to see if the submitted type matches, prevents exploiting.
{
$supportErrors[] = ("Support type you've chosen was not found, possibly trying to exploit this script?");
}
?>