2017-08-10 30 views
1

我很抱歉提前看到似乎是重複的問題,但我真的被卡住了。我將登錄信息發送到驗證用戶名和密碼的php頁面。它工作正常,它說成功或失敗取決於用戶信息是否存在,如圖所示。 Post ResponseJQuery發佈和接收PHP登錄數據

我想要做的是發送$用戶值返回到我的JavaScript頁面,然後將它們重定向到用戶頁面,如果它返回「OK」。我不能爲了我的生活找出如何去做。

這裏是我的javascript:

function Userlogin() { 
    $.post("login.php", 
    {    
     username: $("#login_username").val(),   
     pass: $("#login_password").val() 
     success: function(user){ 
      alert("Done!"); 
     } 
    } 
}, 

這是我的PHP:

$username = mysqli_real_escape_string($conn, $_POST['username']); 
$password = mysqli_real_escape_string($conn, $_POST['pass']); 

echo $username; 

$login = mysqli_query($conn, "SELECT * FROM users where username = '$username' and password = '$password'"); 
$num_rows = mysqli_num_rows($login); 

printf("Result set has %d rows.\n", $num_rows); 

mysqli_free_result($login); 

if ($num_rows == 1) { 
    echo "Success"; 
    $user = "ok"; 
} else { 

} 

echo json_encode($user); 
mysqli_close($conn); 

任何幫助將不勝感激。提前致謝!

+2

你只是問如何在JavaScript中執行重定向?如果你谷歌的確切短語,你會得到這個:https://stackoverflow.com/questions/503093/how-to-redirect-to-another-webpage-in-javascript-jquery – David

+0

呃,奇怪的是,我不沒有我的成功戒備。即使我收到回覆後也是如此。我認爲最簡單的做法是返回我的用戶變量,然後在用戶存在時重定向。我對這一切都很陌生,但我確信我錯過了一些東西。 –

+0

我想你已經收到了足夠的指導來編寫重定向。請考慮這些:1.不要在數據庫中存儲普通密碼,而應使用鹽味散列。 2.使用'prepared statement',因爲這是防止SQL注入的最終防範措施,而不是使用'mysqli_real_escape_string'。 –

回答

2
function Userlogin() { 
    $.post("login.php", 
    {    
     username: $("#login_username").val(),   
     pass: $("#login_password").val() 
    },function(user){ 
      console.log(user)//You'll see what your PHP sent you. 
      if(user == "ok"){ 
       //Redirect 
      }else{ 
       alert("You shall not pass!"); 
      } 
     } 
    ); 
} 

現在的技巧是確保PHP返回只有ok。你也可以發送JSON,就像你試圖做的一樣。但看看console.log結果,你會發現主要問題是你的回聲和打印。你不應該輸出無用的信息,因爲你需要相應地處理答案。

爲了回答您的評論:看你的請求響應的屏幕截圖,您收到3回聲/打印的內容:

+0

你的屏幕截圖顯示你正在接收兩個... – Salketer

+0

我將它修剪成只是迴應我的'$ user'變量。當用戶存在時,它的值爲「ok」。我想發送這個值回到我的JavaScript。我試着'JSON.parse'這個變量,然後'console.log'它的值,但是它沒有到​​達那個部分。有任何想法嗎? –

+0

對不起,我錯誤地寫了.post()調用,就好像它是.ajax()一樣。我已經更正了調用以使該函數處於正確的參數。 – Salketer

-1

如果你想從你所作的請求的響應,創造一個數組或變量在PHP中並附加如下響應:

$responseData['data']['User'] = $User; 

其中$ responseData是一個數組。

內,您的JS:

if($User) { 
echo'<script>window.location="your landing page";</script>'; 
end(); 
} 
+0

Userlogin()函數在JavaScript中調用sir –

+0

$ responseData數組在PHP中 –

0

可以用PHP呼應,使在JavaScript中使用。

更改密碼在Javascript中:

$.post("login.php", 
    {    
    username: $("#login_username").val(),   
    pass: $("#login_password").val() 
    success: function(user){ 
     if(user == "ok"){ 
       //redirect 
      } 
    } 
    }, 

更改代碼在PHP:

$username = mysqli_real_escape_string($conn, $_POST['username']); 
$password = mysqli_real_escape_string($conn, $_POST['pass']); 
$login = mysqli_query($conn, "SELECT * FROM users where username = '$username' and password = '$password'"); 
$num_rows = mysqli_num_rows($login); 
printf("Result set has %d rows.\n", $num_rows); 
mysqli_free_result($login); 
if($num_rows == 1) { 
    echo "ok" 
} else { 

} 
mysqli_close($conn); 

在PHP只是呼應成功確定,使用相同的JavaScript來驗證它。

1

編輯您在上面的PHP代碼的一部分這樣發送的登錄狀態和用戶的詳細信息JSON響應

if($num_rows == 1) { 
     $user = $login->fetch_assoc()[0]['username']; 
     $data=array("status"=>"1","user"=>$user); 

    } else { 
     $user = ""; 
     $data=array("status"=>"0","user"=>$user); 
    } 
    echo json_encode($data); 
在你前端JavaScript代碼解析JSON響應,並利用這些信息來重定向到

用戶頁面

function Userlogin() { 
$.post("login.php", 
    {  

    username: $("#login_username").val(),   
    pass: $("#login_password").val() 

    success: function(response){ 
     var data = JSON.parse(response); 
     if(data.status==="1") 
      window.location = "http://example.com/page.php?user="+data.user; 
     else alert("Wrong Username or password"); 
    } 
}, 

PS:不要在您的服務器端代碼中打印或迴應其他任何內容,否則您會在前端得到JSON錯誤。

1

您正在通過success回調作爲請求參數。試試這個:

function Userlogin() { 
    $.post("login.php", { 
     username: $("#login_username").val(),   
     pass: $("#login_password").val() 
    }, function(user){ 
     alert("Done!"); 
    }); 
}