2015-08-08 7 views
0

Я создал форму с несколькими пользовательскими входами, но у вас есть утомительная задача проверить, не является ли каждый отдельный вход не пустым перед отправкой. Есть ли более быстрый способ (например, использование массивов) перечисления всех аргументов в оператор if?Каков наилучший способ подачи многих аргументов в оператор if?

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

<form action="sign-up.php" method="post" autocomplete="off" > 
Name:<input type="text" name="name" /> 
Username:<<input type="text" name="username" /><br /> 
Password:<input type="password" name="password1" /><br /> 
Re-type Password:<input type="password" name="password2" /><br /> 
Email:<input type="text" name="email" /> 
Address:<input type="text" name="address" /> 
Post Code:<input type="text" name="postcode" /> 
City:<input type="text" name="city" /> 
<input class="submit" type="submit" value="sign up" /> 
</form> 

<?php 
if (!empty($_POST['name']) 
&& !empty($_POST['username']) 
&& !empty($_POST['password1']) 
&& !empty($_POST['password2']) 
&& !empty($_POST['email']) 
&& !empty($_POST['address']) 
&& !empty($_POST['postcode']) 
&& !empty($_POST['city'])) 
{ 
echo "information has been submitted"; 
} 
else { 
echo "please fill in all fields!" 
} 

?> 

Если у вас есть предложения, прокомментируйте.

+0

Как насчет в цикле? – Script47

+0

Как бы использовать цикл? @ Script47 – Dezmondeo

ответ

1

Итак, что это будет делать, это цикл через значения $ _POST и проверить, пусты ли они. Если окажется, что он пуст, он установит значение $hasErrorOccurred в значение true. Ниже приведено значение if statement, если проверка входа прошла успешно или нет.

$hasErrorOccurred = false; 

    foreach ($_POST as $key => $value) { 
     if (empty($_POST[$key])) { 
      $hasErrorOccurred = true; 

      break; 
     } 
    } 

    if ($hasErrorOccurred) { 
     // Your error code here. 
    } else { 
     // Your successful code here. 
    } 

Чтение материал:

break;

+0

Это гений. Я не знал, что вы можете использовать переменную $ _POST таким образом. Большое спасибо. @ Script47 – Dezmondeo

+0

Возможно сохранение массива необходимых имен полей и проверка того, существуют ли все эти имена в карте массива $ _POST. Если запрос приходит где-то, кроме данной формы, эти ключи могут не находиться в $ _POST. – slhsen

+0

@slhsen OP заявила, что хочет от них '$ _POST'. – Script47

0

Если вы хотите назначить переменные для каждого входа поля, это то, как я это сделал.

foreach ($_POST as $key => $value) { 

$$key = $_POST[$key]; //assigns input name to variable with the same name. 

    } 

if(!empty($$key)) { 

//code if all fields are not empty 

} 
else { 

    echo "Please fill in all fields"; 

} 
+0

Я использовал это, чтобы назначить переменную в поле ввода с тем же именем, что и ключ (например, $ name = $ _POST ['name'] или $ username = $ _POST ['username']) - @ Script47 – Dezmondeo

0

Вот как я попытался описать в комментариях к ответу Script47 так что я могу пояснить свою точку немного лучше:

$requiredFields = ['name','username','password1','password2']; 
foreach ($requiredFields as $field) { 
    if (!array_key_exists($field, $_POST) || empty($_POST[$field])) { 
     displayMissingFieldAlert($field); 
    } 
} 
// do the submit etc. 
... 

Таким образом, вы можете поймать, если поле как-то забыли, с ошибками или без комментариев.

+0

I также, как этот путь, и я вижу, что вы имеете в виду о проверках здравомыслия. Что делает функция [email protected] – Dezmondeo

+0

Я написал его как заполнитель для операций, когда поле отсутствует или пусто. Вы должны реализовать эту функцию, чтобы делать то, что требуется в этом случае. Подобно отображению ошибки о недостающем поле и т. Д. Приятная вещь в том, что вы можете отображать имя отсутствующего параметра пользователю или выделять его в форме html, чтобы пользователь знал, где он/она совершил ошибку. – slhsen

+0

Ahh right Я вижу, это больше похоже на то, что я хочу получить. Большое вам спасибо @slhsen – Dezmondeo