2017-03-06 67 views
0

我不明白为什么我的代码不工作。我只是从表单中取值,我想用JSON和AJAX将它们插入到数据库中。有什么我做错了吗?发送JSON到位于服务器上的PHP文件

 $(document).ready(function() { 
      $("#insert").click(function() { 
       var email = $("#email").val(); 
       var password = $("#password").val(); 
       var name = $("#name").val(); 
       var bio = $("#bio").val(); 

       var postData = {"email":email,"password":password,"name":name,"bio":bio}; 
        $.ajax({ 
         type: "POST", 
         dataType: "json", 
         url: "http://**************/php-code/insert.php", 
         data: {myData:postData}, 
         crossDomain: true, 
         cache: false, 
         beforeSend: function() { 
          $("#insert").val('Connecting...'); 
         }, 
         success: function(data) { 
          if (data == "success") { 
           alert("inserted"); 
           $("#insert").val('submit'); 
          } else if (data == "error") { 
           alert("error"); 
          } 
         } 
        }); 
       return false; 
      }); 
     }); 

和PHP文件,该文件在服务器上坐:

include "db.php"; 
if(isset($_POST['myData'])) { 
$email=$_POST['email']; 
$password=$_POST['password']; 
$name=$_POST['name']; 
$bio=$_POST['bio']; 
$q=mysqli_query($con,"INSERT INTO 'user' ('email','password','name', 'bio') VALUES ('$email','$password','$name','$bio')"); 
if($q) 
    echo "success"; 
else 
    echo "error"; 
} 
+0

你有包括jquery吗? –

+1

[Little Bobby](http://bobby-tables.com/)说*** [你的脚本存在SQL注入攻击风险。](http://stackoverflow.com/questions/60174/how-can- ***)了解[MySQLi](http://php.net/manual)[准备](http://en.wikipedia.org/wiki/Prepared_statement)声明/en/mysqli.quickstart.prepared-statements.php)。即使[转义字符串](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)是不安全的! [不要相信它?](http://stackoverflow.com/q/38297105/1011527) –

+1

**不要存储纯文本密码!**请使用PHP的[内置函数](http:// jayblanchard。 net/proper_password_hashing_with_PHP.html)来处理密码安全性。如果您使用的PHP版本低于5.5,则可以使用'password_hash()'[兼容包](https://github.com/ircmaxell/password_compat)。确保你*** [不要越狱密码](http://stackoverflow.com/q/36628418/1011527)***或在哈希之前使用其他任何清理机制。这样做*更改密码并导致不必要的附加编码。 –

回答

1

您的数据并不需要与被发送 'myData的:......'。

它已经处于关键值对格式并准备发送。

只是data: postData,

而且在你的PHP代码中删除检查myData,只有选中要拿到领域取代data: {myData:postData},。 (电子邮件,密码等)

if(isset($_POST['myData'])) { 

如评论所述,您的代码非常易受攻击,应该使用预准备语句!

+1

尽管这是正确的,但您错过了SQL查询的问题。 –

+0

该死的,你是对的。我没有看到这一点。 – cb0

+0

嗨,谢谢你的回复。它现在可以工作,但是我没有得到'成功'提醒。该按钮卡在“连接” –

1

您插入查询应该如下:

$q=mysqli_query($con,"INSERT INTO `user` (`email`,`password`,`name`, `bio`) VALUES ('$email','$password','$name','$bio')"); 

注意使用(`),而不是(')

并且建议使用prepared statement而不是过去的语句来防止sql抛出

$q=mysqli_prepare($con,"INSERT INTO `user` (`email`,`password`,`name`,`bio`) VALUES (:email,:password,:name,:bio)"); 
mysqli_stmt_bind_param($q, "ssss", $email, $password, $name, $bio); 
mysqli_stmt_execute($q); 

,并在你的Ajax你指定你要么需要改变或需要再次更新您的PHP代码,

如果你需要保持你的AJAX技术,所以PHP的应该是如下

$email=$_POST['myData']['email']; 
$password=$_POST['myData']['password']; 
$name=$_POST['myData']['name']; 
$bio=$_POST['myData']['bio']; 

,如果你想让你的PHP的,所以你的Ajax应该是如下:

var postData = {"myData":postData,"email":email,"password":password,"name":name,"bio":bio}; 

然后这条线 data: {myData:postData},

应该如下:

data: postData, 
+0

你是绝对正确的,只是一个错误,我已经更新了它 – hassan

+1

你错过了通过AJAX发送值的部分并且您的占位符应该只是'?'您正在使用占位符PDO样式。 –

+0

我已更新我的回答 – hassan