0

如您所见,我有一个简单的注册表单和一个用于验证某些字段的 PHP 脚本。这里的想法是,如果您有 20 多个字段,并且您至少需要用户填写 .. username、lastname 和 age,那么您可以将其存储在一个数组中,就像我在下面所做的那样。

$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;
4

2 回答 2

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';
}
于 2013-05-02T17:00:09.737 回答
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>';
于 2013-05-02T17:00:28.087 回答