2017-05-15 41 views
-4

我正在使用ajax函數來返回不同類型的登錄值。 而我試圖避免3種問題:用if-else返回ajax

1 - 如果用戶的登錄是錯誤的

2 - 如果用戶的SN是錯誤的

3 - 如果用戶的密碼是錯誤的

在我的PHP文件,我搜索是否存在的數據,如果沒有,我會送一個類型的錯誤這是沒有找到一個:

$connect = new database();  
    $info = mysql_query("SELECT * FROM myinfo WHERE myinfo.user_login = '$login_user'"); 
    if (mysql_num_rows($info) == 0) { 

     echo 'error_login'; 

    } 

    $info2 = mysql_query("SELECT * FROM myinfo WHERE myinfo.user_sn = '$sn_user'"); 

    if (mysql_num_rows($info2) == 0) { 

     echo 'error_sn'; 
    } 

    $info3 = mysql_query("SELECT * FROM myinfo WHERE myinfo.user_pw = '$user_pw'"); 

    if (mysql_num_rows($info3) == 0) { 

     echo 'error_pw'; 
    } 

我的AJAX可以接收三個不同的迴應:

 $.ajax({ 
       url: "includes/enter.php", 
       data: { 
        login_user: $("#login").val(), 
        sn_user: $("#sn").val(), 
        user_pw: $("#pw").val() 
        }, 

        success:function(response) 
        { 
         if(response == "error_login") 
         { 
          alert("Invalid login!"); 
         } 
         else if(response == "error_sn") 
         { 
          alert("Invalid SN!"); 
         } 
         else if(response == "error_pw") 
         { 
          alert("Invalid password!"); 
         } 
         else 
         { 
          alert("Success!"); 
         } 

        } 
      }); 

由於Cpt.Kangar00說,我用「==」(並已編輯)。我的主要問題是,我使用echo而不是echo json_encode("error")

+6

'='是賦值運算符。 '=='是比較運算符。檢查您的條件是否 – abhishekkannojia

+1

如果我向您發送我的用戶名和密碼,您的代碼將檢查是否存在a)具有我的用戶名的某些用戶和b)具有我的密碼的一些(不同的)用戶,而不是「具有我的用戶名的用戶也有我發送的密碼「。 – James

+0

可能不是你的問題,但爲什麼將數據存儲在單獨的表中? – chris85

回答

1

您需要使用POST或GET發送數據,例如:

$(document).ready(function() { 
    $.ajax({ 
     type: 'POST', 
     url: "data.php", 
     data: { 
      user_login: $("#user_login").val(), 
      user_sn: $("#user_sn").val(), 
      user_pw: $("#user_pw").val(), 
     }, 
     success:function(response) 
     { 
      if(response == "error_login") 
      { 
       alert("Invalid login!"); 
      } 
      else if(response == "error_sn") 
      { 
       alert("Invalid SN!"); 
      } 
      else if(response == "error_pw") 
      { 
       alert("Invalid password!"); 
      } 
      else 
      { 
       alert("Success!"); 
      } 
     } 
    }); 
}); 

,然後訪問該數據在PHP中像這樣:

$user_login = $_POST['user_login']; 
$user_sn = $_POST['user_sn']; 
$user_pw = $_POST['user_pw']; 

$dbh = new PDO('mysql:host=localhost;dbname=stackoverflow', 'root', ''); 

$query = $dbh->prepare("SELECT * FROM myinfo WHERE user_login = :user_login"); 
$query->bindParam(':user_login', $user_login); 
$query->execute(); 
$result = $query->fetchAll(PDO::FETCH_ASSOC); 

if(!$result) { 
    echo json_encode('error_login'); 
    return; 
} 

$query = $dbh->prepare("SELECT * FROM myinfo WHERE user_sn = :user_sn"); 
$query->bindParam(':user_sn', $user_sn); 
$query->execute(); 
$result = $query->fetchAll(PDO::FETCH_ASSOC); 

if(!$result) { 
    echo json_encode('error_sn'); 
    return; 
} 

$query = $dbh->prepare("SELECT * FROM myinfo WHERE user_pw = :user_pw"); 
$query->bindParam(':user_pw', $user_pw); 
$query->execute(); 
$result = $query->fetchAll(PDO::FETCH_ASSOC); 

if(!$result) { 
    echo json_encode('error_sn'); 
    return; 
} 

預處理語句是更安全和更有效的運行數據庫查詢的方式。這是一個示例腳本,需要清理,但應該作爲一個很好的起點。您可以閱讀更多關於PDO的信息,並在此準備報表http://php.net/manual/en/pdo.prepare.php

+0

是的,我在運行它們之前使用連接 – MattDAVM

+0

@MattDAVM我編輯了我的答案,現在它是一個工作示例。 –

0

您使用「=」,你應該使用「==」。

 $.ajax({ 
      url: "includes/enter.php", 
      data: { 
       login_user: $("#login").val(), 
       sn_user: $("#sn").val(), 
       user_pw: $("#pw").val() 
       }, 

       success:function(response) 
       { 
        if(response == "error_login") 
        { 
         alert("Invalid login!"); 
        } 
        else if(response == "error_sn") 
        { 
         alert("Invalid SN!"); 
        } 
        else if(response == "error_pw") 
        { 
         alert("Invalid password!"); 
        } 
        else 
        { 
         alert("Success!"); 
        } 

       } 
     }); 
+0

我使用「==」,它仍然不工作 – MattDAVM

+0

我不確定你的返回工作是否有AJAX默認值,但如果它是默認值,只需刪除json_encodes PHP,所以:echo json_encode('error_login');將成爲回聲'error_login'; –

+0

現在它的工作,仍然相當可疑,因爲我刪除了它幾次,仍然沒有得到它。那麼,我會保持沒有json_encode()。 – MattDAVM