Массив как обязательное поле в форме PHP не распознан - PullRequest
1 голос
/ 11 августа 2011

У меня есть форма электронной почты PHP, к которой я только что добавил массив флажков.Данные поступают нормально.Однако я хочу сделать так, чтобы пользователям приходилось ставить хотя бы один из флажков, но текущий код, который я использую для заполнения полей, не работает для флажков.Массив флажков называется «formOptions».Это код, который я использую:

$allowedFields = array(
'name',
'company',
'email',
'phone',
'comments',
'output',
'formOptions',
 );

// Specify the field names that you want to require...
$requiredFields = array(
'name',
'email',
'phone',
'formOptions',  
);


// Loop through the $_POST array, which comes from the form...
$errors = array();
foreach($_POST AS $key => $value)
{
// first need to make sure this is an allowed field
if(in_array($key, $allowedFields))
{
    $$key = $value;

    // is this a required field?
    if(in_array($key, $requiredFields) && $value == '')
    {
        $errors[] = "$key, ";
    }
}
}

Ответы [ 2 ]

1 голос
/ 11 августа 2011

Возможно, вы захотите проверить empty() вместо $value == ''.

Но реальная проблема заключается в том, что вы не тестируете никакие $_POST переменные, которые не установлены.Таким образом, хотя вы убедитесь, что обязательное поле не пустое, оно не будет проверять поле, которое даже не было передано в сценарий.Вот что происходит, когда флажки не отмечены, дело не в том, что $_POST['formOptions'] пусто, а в том, что нет $_POST['formOptions'].

Вместо циклического перебора $_POSTмассив, вам нужно было бы перебрать массив $requiredFields.

foreach($requiredFields as $field){
  if(empty($_POST[$field])){
    //$field is missing
  }
}

Если вы не хотите изменять текущую структуру, вы можете просто сбросить каждый $requiredFields, когда он будет найден, тогда, если *У 1018 * остались какие-либо члены, это пропущенные поля.

Используя ваш пример кода:

foreach($_POST AS $key => $value)
{
  // is this a required field?
  if(in_array($key, $requiredFields))
  {
    if(empty($value)){
      //$key is missing
    }

    unset($requiredFields[array_search($key)];
  }      
}
//$requiredFields contains any missing fields

Или вы также можете просто установить некоторые значения по умолчанию (null будет работать),и сохраните свой существующий код:

$requiredFields = array(
  'name' => null,
  'email' => null,
  'phone' => null,
  'formOptions' => null,  
);

$_POST = array_merge($requiredFields, $_POST); 
//any missing required field is now null

Тогда вам просто нужно изменить проверку 'Требуется' на:

if(array_key_exists($key, $requiredFields) && $value == '')

Обратите внимание, что я не тестировал ни один из примеров кода.

0 голосов
/ 11 августа 2011

Вы можете использовать:

   if(in_array($key, $requiredFields) && !$value)

и должно работать

Edit:

это не должно работать. вам нужно поместить цикл, который проверяет наличие обязательных полей вне цикла для $ _post. чтобы убедиться, что вы можете проверить, не существует ли почтовый ключ. смотрите комментарии ниже. см. комментарий Тима.

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