2015-11-04 83 views
1

我想檢查用戶名是否存在於我的mysql數據庫中,如果存在,php端會檢查並回顯「重複」,然後應該由ajax接收。然而,它並沒有收到,當我嘗試在我的開發人員工具上進行輸出時,我得到的未定義前端值。無法從php中使用jquery接收數據ajax

這裏是我的jQuery AJAX部分: -

$("#create").click(function(e){ 


    e.preventDefault(); 
    $.ajax({ 
     type:'post', 
     url:'usernameTest.php', 
     data: {usr: $("#usr").val(), 
      pwd: CryptoJS.MD5($("#pwd").val()).toString() 
     }, 
     success: function(data){ 
      //console.log(data); 
      if(data == "duplicate"){ 
       $("#userErrorDiv").html("User already exists. Please enter another one").css("color","red"); 
       console.log("duplicate data"); 
      } 
      else{ 
       console.log("data not duplicate:"+data); 
      } 
     }, 
     error(err){ 
     console.log("error "+err); 
     } 
    }); 

這裏是PHP的一部分: -

<?php 

    function recieveFormData() 
    { 
    if (isset($_POST['usr'], $_POST['pwd'])) { 
     global $connection; 
     global $username; 
     global $password; 
     $username = $_POST['usr']; 
     $password = $_POST['pwd']; 

    } 
    } 

    /*do insertion if username not found */ 
    function insertIntoTable($username, $password){ 
     global $connection; 
     $query="INSERT INTO users(username, password) VALUES('$username','$password')"; 
     $result=mysqli_query($connection,$query); 

     if(!$result){ 
      die("Sorry. Query failed to execute ".mysqli_error()); 
     } 

    } 

    function connectToDatabase(){ 
     global $connection,$username; 
     $connection=mysqli_connect("localhost","root","","usermanagement"); 
     if(!$connection){ 
      echo "Sorry! Cannot connect to the database"; 
     } 
    } 

    function readFromDatabase(){ 
     global $connection,$username; 
     $query="SELECT * from users where username='$username'"; 

     $result=mysqli_query($connection,$query); 
     if(!$result){ 
      die("query error"); 
     } 
     if(mysqli_num_rows($result)!=0) { 
      echo "duplicate"; 
      //return false; 
     } 
     else{ 
     while($row = mysqli_fetch_assoc($result)) { 
      $usernameFromTable=$row['username']; 
      // print_r($usernameFromTable); 
      echo "<tr><td>".$usernameFromTable."</td><td>User</td><td></td></tr>"; 
     } 
     } 
     //return true; 
    } 

recieveFormData(); 
connectToDatabase(); 
readFromDatabase(); 

?> 

這是使用簡單的HTML IM: -

<label for="usr">Username</label> 
<input type="text" name="usr" id="usr"> 
<label for="pwd">Password</label> 
<input type="password" name="pwd" id="pwd"> 
<button id="create" class="create" type="submit" name="create">Create</button> 
<div id="userErrorDiv"></div> 
+2

[你的腳本是對SQL注入攻擊的風險(HTTP: //sackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)瞭解[編制](http://en.wikipedia.org/wiki/Prepared_statement)陳述[適用於PDO ](http://php.net/manual/en/pdo.prepared-statements.php)和[MySQLi](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)和考慮使用PDO,[這真的不難](http://jayblanchard.net/demystifying_php_pdo.html)。 –

+1

你真的應該使用PHP的[內置函數](http://jayblanchard.net/proper_password_hashing_with_PHP.html)來處理密碼安全性。如果您使用的PHP版本低於5.5,則可以使用'password_hash()'[兼容包](https://github.com/ircmaxell/password_compat)。 –

+0

您是否在瀏覽器的控制檯中觀看了請求/響應? –

回答

1

爲了讓答案更加明顯,我在這裏添加它。

如果接收到來自Ajax請求的響應後,控制檯會記錄您的回饋字符串,並將其與自身比較不起作用,使用$.trim()

...... 
// Ajax execution 
...... 
.success(function(response) { 
    response = $.trim(response); 
    if (response == 'expected response') { 
     // Do stuff.... 
    } 
}); 
+0

謝謝你這樣清楚的解釋 –