Убедитесь, что несколько строк пусты

Возможный дубликат:
Более сжатый способ проверить, содержит ли массив только числа (целые числа)
Проверка PHP, если пустые поля

У меня есть форма, которая представляет 10 полей, и 7 из них должны быть заполнены, вот как я сейчас ее читаю в PHP:

if (!$name || !$phone || !$email || !$mobile || !$email || !$state || !$street || ! $city) { echo '<div class="empty_p">You have empty fields!!!</div>';} else{ //process order or do something } 

Мой вопрос: есть ли более простой способ сделать это? Потому что иногда у меня есть еще больше строк для проверки (12-15)

Solutions Collecting From Web of "Убедитесь, что несколько строк пусты"

 <input type="text" name="required[first_name]" /> <input type="text" name="required[last_name]" /> ... $required = $_POST['required']; foreach ($required as $req) { $req = trim($req); if (empty($req)) echo 'gotcha!'; } 

/* Обновить */

ОК! ребята, легко …

Вы можете сделать его более безопасным, просто с типом кастинга, как и все, что мы программисты делаем для получения следующих данных, например $id = (int) $_GET['id'] , например $username = (string) addslashes($_POST['username']) и т. д. …;

$required = (array) $_POST['required'];

И тогда, что происходит из почтовых полей, пусть они приходят, этот код просто ищет то, что ему нужно. Вот и все! Гм …

Другая возможность:

 $array = ($name, $email, $mobile); $valid = true; foreach($array as $element) { if(empty($element)){ $valid = false; } } if ($valid){ // complete } else { // alert! some element is empty } 

Что-то вроде этого?

 foreach($_POST as $key => $value) { if (empty($_POST[$key])) { echo '<div class="empty_p">'.$_POST[$key].' is empty.</div>'; } } 

Хорошо знать, где эти данные следует ожидать, например $_POST :

 if (!isset($_POST['name'], $_POST['phone'], $_POST['email'], $_POST['mobile'], $_POST['state'], $_POST['street'], $_POST['city'])) { // something is up } 

Вы можете немного сократить этот код, создав массив с необходимыми именами полей:

 $required_fields = array('name', 'phone', 'email', 'mobile', 'state', 'street', 'city'); 

Код «check-for-exist» может быть упрощен до:

 foreach ($required_fields as $f) { if (!isset($_POST[$f])) { // something is up } } 

Лучший способ ™

Тем не менее, вы должны серьезно рассмотреть возможность сочетания как проверки наличия, так и проверки / санитарии. PHP предоставляет семейство функций функций фильтрации , которые можно использовать для проверки и / или дезинфекции входных переменных. Например, чтобы получить эквивалентное поведение, как указано выше:

 $required_fields = filter_input_array(INPUT_POST, array( 'name' => FILTER_UNSAFE_RAW, 'email' => FILTER_VALIDATE_EMAIL, )); if (is_null($required_fields) || in_array(null, $required_fields, true)) { // some fields are missing } 

Поля, которые существуют, но не проверяются, будут установлены в false , так что вы обнаруживаете такое событие:

 foreach ($required_fields as $name => $value) { if (false === $value) { // field $name failed validation (eg bad email format) } elseif (!strlen(trim($value))) { // field is empty } } 

Лучшим способом было бы создание своего рода валидатора формы. Однако вы можете использовать эту функцию:

 <?php function isAnyEmpty() { $total = 0; $args = func_get_args(); foreach($args as $arg) { if(empty($arg)) { return true; } } return false; } $var1 = 1; $var2 = 'test'; $var3 = ''; if(isAnyEmpty($var1, $var2, $var3)) { echo 'empty fields!'; } ?> 

Вы можете попробовать создать общий класс проверки, который можно было бы повторно использовать и быть более точным.

Некоторые псевдокоды:

 <? class validateFields { $validators = array( "name" => array( "empty" => array( "rule" => "some regex", "errorMessage" => "name may not be empty" ), "noNumbers" => array( "rule" => "some regex", "errorMessage" => "No numbers are allowed in the name field" ) ), "otherVariable" => array( "atLeast50chars" => array( "rule" => "some regex", "errorMessage" => "This field must be at least 50 chars" ) ) ); public function Validate($post){ $errors = array(); foreach($_POST as $key => $value){ if(!array_key_exists($key, $validators)) { continue; } foreach($validators[$key] as $validator) { if(!preg_match($validator["rule"], $value) { $errors[$key] = $validator["errorMessage"]; break; } } } return $errors; } } ?> 

Затем в вашем коде вы можете сделать что-то вроде:

 $errors = Validate($_POST); foreach($error as $errorMessage) { echo $errorMessage . "</br>"; } 

Конечно, вы могли бы это представить, добавив divs с классами ниже / рядом с полем ввода и загрузите там $ errorMessage. Я уверен, что есть масса примеров 🙂

Вы можете написать цикл Foreach

  foreach($_POST as $key => $value) { if (!isset($_POST[$key]) || empty($_POST[$key]) { echo '<div class="something">You have empty fields!!!</div>'; } }