Возможный дубликат:
Более сжатый способ проверить, содержит ли массив только числа (целые числа)
Проверка 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)
<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>'; } }