Возможно, вы захотите проверить 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 == '')
Обратите внимание, что я не тестировал ни один из примеров кода.