У меня есть форма регистрации с примерно 10 полями, и все они должны быть заполнены перед обработкой, поэтому, пытаясь избежать всех, если чеки я придумал, это хороший метод?
foreach($list as $items) { if(empty($items)) { $error[] = "All fields are required."; break; } }
или я должен сделать if (empty ($ field_1) || empty ($ field_2) и т. д. затем вывести ошибку?
Предполагая, что ваши данные поступают из $_GET
или $_POST
, все поля данных будут строками. Это означает, что вы должны выполнить чек в одном вызове функции :
if (in_array('', $list, TRUE)) { $error[] = "All fields are required."; }
Это ищет строки, которые в точности равны пустой строке. Если вы хотите сделать сравнения свободными (более или менее идентичными проверке, которую выполняет empty()
), просто удалите окончательный TRUE
.
EDIT Думая об этом, вам не нужно строгое сравнение. Я сделал это, чтобы разрешить законное значение поля '0'
(которое empty()
не разрешало), но это также будет разрешено со свободными сравнениями, так как '0' != ''
.
ДРУГОЕ ИЗОБРАЖЕНИЕ Если вы хотите проверить, что длина жало больше двух, вам придется зацикливаться:
foreach ($list as $item) { if (strlen($item) < 2) { $error[] = "All fields are required."; break; } }
Это также «очистит 0
», если предположить, что под этим вы подразумеваете «не разрешать значение 0
». Если вы также хотите запретить '00'
(или любую другую строку, которая приводит к 0
), вы можете изменить предложение if
на это:
if (strlen($item) < 2 || (!(int) $item)) {
все нормально. Если вы просто хотите показать сообщение «Все поля обязательны». без отображения поля в пробеле.
В противном случае это будет более удобным для пользователя, если вы проверите и покажете, какое поле осталось пустым.
Это хорошая идея, чтобы поместить его в цикл, как вы это делали, но обратите внимание, что это не удастся даже тогда, когда пользователь вводит 0
и будет передавать строку, содержащую только пробелы, поэтому вы можете сделать более эффективные проверки, чем empty()
Я бы подошел к этому с помощью проверки in_array.
<?php $fields=array('name','age','yadayada','something_else'); foreach ($_POST as $key=>$value){ if(in_array($key,$fields) && $value!=''){ $$key=$value; }else{ $error[$key]='This field is required.'; } } ?>