2014-11-17 3 views
0

Im строит простую систему входа с использованием Ajax XMLhttpRequest. PHP-файл и Javascript работают нормально ... но когда я использую тест ответа в IF Else Condition, он не работает, как я ожидаю.Если Else Condition с Ajax responseText от PHP

Вот мой HTML

<div class="login-form"> 

     <input type="username" name="username" id="username" class="text-input--underbar" placeholder="Username" value=""> 
     <input type="password" name="password" id="password" class="text-input--underbar" placeholder="Password" value=""> 
     <br><br> 
     <ons-button modifier="large" onClick="javascript:ajax_post();" class="login-button">Log In</ons-button> 
     <br><br> 
     <ons-button modifier="quiet" class="forgot-password">Forgot password?</ons-button> 
     </div> 
<div id="status"></div> 

Вот мой код Javascript.

function ajax_post(){ 
    // Create our XMLHttpRequest object 
    var hr = new XMLHttpRequest(); 
    // Create some variables we need to send to our PHP file 
    var url = "http://boost.meximas.com/mobile/login.php"; 
    var fn = document.getElementById("username").value; 
    var ln = document.getElementById("password").value; 
    var vars = "username="+fn+"&password="+ln; 
    hr.open("POST", url, true); 

    // Set content type header information for sending url encoded variables in the request 
    hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    // Access the onreadystatechange event for the XMLHttpRequest object 

    hr.onreadystatechange = function() { 
     if(hr.readyState == 4 && hr.status == 200) { 
     var return_data = hr.responseText; 
     document.getElementById("status").innerHTML = return_data; 

     if(return_data=="true"){ 
     alert("Yes Login True"); 
     }else{ 
     alert("No Login False"); 
     } 

     } 
    } 
    // Send the data to PHP now... and wait for response to update the status div 
    hr.send(vars); // Actually execute the request 
    document.getElementById("status").innerHTML = "processing..."; 
} 

Вот мой PHP код

if(isset($_POST['username']) && isset($_POST['password'])){ 
    $username = $_POST['username']; 
    $password = $_POST['password']; 
} 

$sql = "SELECT * FROM member WHERE username = '$username' AND password = '$password'"; 
$result = mysqli_query($con,$sql); 


if(!$result){ 
    echo "failed"; 
}else{ 
    echo "true"; 
} 

Для неправильного ввода также им получать Yes Login True и статус внутреннего HTML True значит PHP файл всегда возвращает истину. но когда я проверяю только файл php, он отлично работает. ошибок нет.

Я имел в виду, используя это.

while($row = mysqli_fetch_array($result)) { 

    echo "Hello" .$row['email']. "Thanks"; 
} 

он дает правильный выход.

Im извините, если это непонятно .. сообщите.

+0

Боюсь, что ваш 'mysqli_query' будет возвращать только' FALSE', если запрос вызывает ошибку в базе данных. Но ваш запрос выглядит нормально даже с неправильными учетными данными. Поэтому вам придется сделать другую проверку, например. если запрос возвращает нулевые строки. – DontVoteMeDown

+0

@DontVoteMeDown Да, я проверил код без условия IF else в файле Javascript и файле PHP. используя массив mysqli fetch (я упомянул об этом ниже), используя для правильного имени пользователя и пароля im, получая правильный ответ. проблема в том, что если условие else я думаю – Rayan

+0

Конечно, но 'while' не является appopriate для выполнения проверок. Я имел в виду нечто вроде ['mysqli_num_rows()'] (http://php.net/manual/en/mysqli-result.num-rows.php). – DontVoteMeDown

ответ

0

Функция mysqli_query() возвращает только FALSE, если ваш запрос вызывает ошибку в базе данных. В противном случае он всегда будет возвращать TRUE. Давая это, вы должны проверить свои результаты по-другому, например, используя mysqli_num_rows().

Кроме того, очень желательно, чтобы вы дезинфицировали входы пользователя перед запуском запросов с ними. Всегда помните Booby Tableshow to prevent it in PHP).