Операторы if / else в PHP и проверка входных данных Ajax - PullRequest
0 голосов
/ 01 марта 2012

Я отправляю некоторые данные Ajax в PHP-скрипт, который обрабатывает регистрацию. Я пытаюсь получить ответ от сервера, является ли вход действительным или нет (проверка в реальном времени). Я хочу, чтобы каждый вход имел свой собственный ответ, это означает, что если первый вход по-прежнему недействителен и кто-то помещает что-то недопустимое во второе поле ввода, первый ответ остается, и он также отправляет второй ответ.

То, что сейчас происходит, таково: первый ввод недействителен, я вижу ответ, но когда я перехожу к следующему полю ввода и помещаю что-то недопустимое в поле, первый ответ просто остается там (я проверил это с помощью консоли. войти в Chrome)

ОБНОВЛЕНИЕ: , чтобы привести пример, я вижу это: 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!";
    }
}

и это код JQuery Ajax:

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 + "'")
   }  
 });  
} 

Я бы подумал, что я так и использую, если / еще здесь. Также я немного озадачен тем, как / когда использовать isset ($ _ POST ['submit']) в этом случае?

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 01 марта 2012

Измените некоторые из ваших else if с на if с. Использование только else if, как только условие соответствует, остальные пропускаются. Поэтому, когда у вас неверное имя пользователя, ваш код никогда не проверяет, является ли электронная почта действительной или нет.

Используйте else if только в том случае, если вам нужен ТОЛЬКО ОДИН из выходов.

1 голос
/ 01 марта 2012
$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!';
}
1 голос
/ 01 марта 2012

То, что вы хотели бы сделать, вместо других, просто если как:

 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....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...