正如您所看到的,我有一个简单的注册表单和一个PHP脚本只是为了验证某些字段。这里的想法是,如果你有20多个字段,并且你至少要求用户填写.. 用户名,姓氏和年龄,那么你将它存储在一个像我已经完成的数组中下面。
$needed = array("username", "lastname", "age");
因此,正如您在代码中看到的那样,我执行for
循环来检查其中一个是否已填充,
现在代码大部分都有效。例如:如果你没有填写三个字段,它会说
您必须填写用户名才能继续
您必须填写姓氏才能继续
您必须填写年龄才能继续
但是,如果您填写字段并离开其他两个,或填充两个然后留下一个,它将只回显'<p>Required fileds are filled</p>';
所以,这里的问题是,在脚本可以说echo '<p>Required fileds are filled</p>';
之前应该填写所有字段
<pre>
<form action='' method='POST'>
<input type='text' name='username' />
<input type='text' name='lastname' />
<input type='text' name='age' />
<input type='text' name='gender' />
<input type='text' name='country' />
<input type='submit' name='reqirester' />
</form>
<?php
$needed = array("username", "lastname", "age");
if($_POST):
$check = NULL;
for($i=0; $i < count($needed); $i++){
if($_POST[$needed[$i]] == ''){
echo '<p>You must fill '.$needed[$i].' to continue<p/>';
break;
}else {
echo '<p>Required fileds are filled</p>';
}
}
endif;
答案 0 :(得分:1)
$needed = array("username", "lastname", "age");
$error = false;
$msg = '';
foreach ($needed as $value) {
if(empty($_POST[$value]) {
$msg =. 'please fill in ' . htmlspecialchars($_POST[$value]) .'<br/>';
$error = true;
}
}
if($error === true) {
echo $msg;
} else {
echo 'Great! finished';
}
答案 1 :(得分:1)
为什么不:
$required = array("username", "lastname", "age");
$missing = array_keys(array_diff_key(array_flip($required), array_filter($_POST)));
if($missing)
printf('You missed: %s', implode(', ', $missing));
或使用您的输出:
foreach($missing as $key)
printf('<p>You must fill %s to continue</p>', $key);
if(!$missing)
print '<p>Required fileds are filled</p>';