0

我有这段代码:

if(isset($_POST['register_form'])) {
    if(isset($_POST['username']) &&
       isset($_POST['password']) &&
       isset($_POST['lastname']) &&
       isset($_POST['email'])) {
         Register();
       }
    else {
      echo 'It seems like some information is missing. Please fill in the whole form.';
    }
  }

这适用于以下形式:

  <form action="" method="post">
    <fieldset>
      <legend>Register Form</legend>
      <input type="text" name="username" maxlenght="32" placeholder="Username"/> <br />
      <input type="password" name="password" placeholder="Password" /> <br />
      <input type="lastname" name="lastname" placeholder="Last name" /> <br />
      <input type="email" name="email" placeholder="Email" maxlenght="1024" /> <br />
      <input type="submit" value="Register" name="register_form" />
    </fieldset>
  </form>

我知道这是错误的。由于 if 语句只检查是否真的存在“用户名”、“密码”等表单,但它不检查它是否为空。但是我不知道如何检查它是否没有正确填写。如果有人可以帮助我,那就太好了。

提前致谢。

4

5 回答 5

1

isset()在这种情况下将始终返回 true。如果要检查这些表单值是否为空,请empty()改用。

于 2013-10-31T17:20:47.397 回答
0

你可以试试:

$error = 0;    
(isset($_POST['username']) && $_POST['username'] != "") ? $username = $_POST['username'] : $error++;

if($error > 0) echo "error";

这将检查它的设置并且它不 == ""。否则它将返回一个错误标志,您可以稍后检查。

这显然需要编辑以适应您的情况。

于 2013-10-31T17:20:17.733 回答
0

您可以使用 javascript 进行验证。对于服务器端验证,您可以编写如下内容:

function validate($value){
     if(isset($value) && !empty($value)){
        return true;
     }else{
        return false;
     }
}


if(validate($_POST['username']) &&
       validate($_POST['password']) &&
       validate($_POST['lastname']) &&
       validate($_POST['email'])) {
         Register();
    }
    else {
      echo 'It seems like some information is missing. Please fill in the whole form.';
  }
于 2013-10-31T17:26:10.560 回答
0

我喜欢有这样的检查功能。对于这种特殊情况,我将使用我的函数进行数组键检查:

function check_key($key, $array) {
    if (isset($array[$key]) && (! empty($array[$key])))
        return true;
    return false;
}

你可以这样使用它:

if(check_key('register_form', $_POST)
    if(check_key('username', $_POST) && check_key('password', $_POST) 
    && check_key('lastname', $_POST) && check_key('email', $_POST) )
        Register();
else
  echo 'It seems like some information is missing. Please fill in the whole form.';
于 2013-10-31T17:38:24.893 回答
0

我知道这很麻烦,但更好的做法是不仅要检查它是否已设置,还要确保没有传递空值。您应该根据问题创建一个错误列表,以便用户更好地了解问题所在。

$errors = array( 'error' => true,
                 'username' => false,
                 'password' => false,
                 'lastname' => false,
                 'email' => false);

if(isset($_POST['register_form'])) {
    if(isset($_POST['username']) && $_POST['username'] != ''){
        $errors['username'] = true;
    }else{
        $errors['username'] = 'Please set a username';
    }
    if(isset($_POST['password']) && $_POST['password'] != ''){
        $errors['password'] = true;
    }else{
        $errors['password'] = 'Please set a password';
    }
    if(isset($_POST['lastname']) && $_POST['lastname'] != ''){
        $errors['lastname'] = true;
    }else{
        $errors['lastname'] = 'Please set a lastname';
    }
    if(isset($_POST['email']) && $_POST['email'] != ''){
        $errors['email'] = true;
    }else{
        $errors['email'] = 'Please set an email';
    }
}

if($errors === true){
    return $errors;
}else{
    $errors['error'] = false;
    return $errors;
}

return false;

这样,在返回时,您可以使用 JS 根据 php 响应打印错误,并使用 $errors['error'] 点作为 JS 测试,看看它是否甚至必须打印任何内容,如果它是错误的,请不要'不要这样做。

于 2013-10-31T17:30:24.937 回答