PHP和Ajax中的If/else语句输入验证


If/else statements in PHP and Ajax input validation

我通过Ajax将一些数据发送到一个PHP脚本,该脚本处理注册。我正在尝试从服务器获得输入是否有效的响应(实时验证)。我希望每个输入都有自己的响应,这意味着如果第一个输入仍然无效,并且有人在第二个输入字段中放入了无效的内容,那么第一个响应将保留,它也会发送第二个响应。

现在发生的情况是:第一个输入无效,我看到了响应,但当我进入下一个输入字段并在字段中放入无效内容时,第一个响应就停留在那里。(我已经在Chrome中用console.log测试过了)

更新:举个例子,我看到的是:not a valid username!,然后我在下一个字段中放了一些无效的电子邮件地址,我仍然看到not a valid username!

这是我的PHP代码:

if(isset($_POST['username'])  && isset($_POST['email']) && isset($_POST['email2']) && isset($_POST['password']) 
&& isset($_POST['firstname']) && isset($_POST['surname']) && isset($_POST['gender']) && isset($_POST['day'])
&& isset($_POST['month'])  && isset($_POST['year']) ) {
    $username = $_POST['username'];
    $email = $_POST['email'];
    $email2 = $_POST['email2'];
    $password = $_POST['password'];
    $firstname = $_POST['firstname'];
    $surname = $_POST['surname'];
    $gender = $_POST['gender'];
    $day = $_POST['day'];
    $month = $_POST['month'];
    $year = $_POST['year'];

    if(!preg_match("/^[a-z](?=['w.]{3,19}$)'w*'.?'w*$/i",$username)){
        echo "not a valid username.";
    }
    else if(filter_var($email,FILTER_VALIDATE_EMAIL)){
        echo "OK!";
    }
    else if(!filter_var($email,FILTER_VALIDATE_EMAIL)){
        echo "not a valid email address";
    }
    else if(strcmp($email,$email2) != 0){
        echo "emails are different.";
    }
    else if(strcmp($email,$email2) == 0){
        echo "OK!";
    }
    else if(!preg_match("[a-zA-Z]*",$firstname)){
        echo "Not a valid firstname.";
    }
    else if(preg_match("[a-zA-Z]*",$firstname)){
        echo "OK!";
    }
    else if(!preg_match("[a-zA-Z]*",$surname)){
        echo "not a valid surname.";
    }
    else if(preg_match("[a-zA-Z]*",$surname)){
        echo "OK!";
    }
}

这是JQueryAjax代码:

function handlePost() {  
 var username = $('#username').val();  
 var email = $('#email').val();  
 var email2 = $('#email2').val(); 
 var password = $('#password').val();   
 var firstname = $('#firstname').val();
 var surname = $('#surname').val();
 var gender = $('#gender').val();
 var day = $('#day').val();
 var month = convertMonth($('#month').val())
 var year = $('#year').val();
 $.ajax({  
   type: "POST",  
   url: "handleRegister.php",  
   data: "username="+username+"&email="+email+"&email2="+email2+"&password="+password+"&firstname="
   +firstname+"&surname="+surname+"&gender="+gender+"&day="+day+"&month="+month+"&year="+year,  
   success: function(resp){  
     // we have the response  
     //alert("Server said:'n '" + resp + "'");  
     console.log("Server said:'n '" + resp + "'")
   },  
   error: function(e){  
     //alert('Error: ' + e);  
     console.log("Server said:'n '" + e + "'")
   }  
 });  
} 

我想这就是我在这里使用if/else的方式。此外,我有点困惑在这种情况下如何/何时使用isset($_POST[‘submit’])?

提前谢谢。

将部分else if更改为if。仅使用else if,只要条件匹配,就会跳过其余条件。因此,当你的用户名无效时,你的代码永远不会检查电子邮件是否有效。

仅当您想要其中一个输出时,才使用else if

$errors = array();
if (!preg_match("/^[a-z](?=['w.]{3,19}$)'w*'.?'w*$/i", $username))
{
    $errors[] = "not a valid username.";
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL))
{
    $errors[] = "not a valid email address";
}
if ($email !== $email2)
{
    $errors[] = "emails are different";
}
if (!preg_match("[a-zA-Z]*", $firstname))
{
    $errors[] = "Not a valid firstname.";
}
if (!preg_match("[a-zA-Z]*", $surname))
{
    $errors[] = "not a valid surname.";
}
if ($errors)
{
    echo implode("'n", $errors);
}
else
{
    echo 'OK!';
}

您想要做的是,而不是elses,只是ifs,比如:

 if(!preg_match("/^[a-z](?=['w.]{3,19}$)'w*'.?'w*$/i",$username)){
        echo "not a valid username.";
    }
 if(filter_var($email,FILTER_VALIDATE_EMAIL)){
        echo "OK!";
 }
 if(!filter_var($email,FILTER_VALIDATE_EMAIL)){
    echo "not a valid email address";
 }
 if(strcmp($email,$email2) != 0){
     echo "emails are different.";
 }
 etc....