2017-03-06 69 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