2015-11-04 55 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

谢谢你这样清楚的解释 –