2015-06-21 180 views
1

我新的PHP和MySQL,我期待與下面的幫助工作。的Ajax/PHP/MySQL的:將數據插入到數據庫不使用Ajax和PHP

我想存儲一個用戶的電子郵件和選定的語言在數據庫上按鈕點擊
我的想法是,我可以使用Ajax這個,所以我把下面的Ajax調用在我的JS文件的功能將數據傳遞到一個單獨的Ajax文件(ajax.php),然後將其插入到數據庫(「Users」)。

當我提醒在JS的價值觀,他們顯示正確的,所以我的輸入變量都OK,也是Ajax調用返回「success」傳遞數據,但我不能得到這個在我的分貝將任何物品後。
當我在數據庫中手動運行相同的INSERT它工作正常。

誰能告訴我什麼,我做錯了什麼?

我的Ajax調用(在我的函數文件):

$('#btnID').on('click', function(){ 
    var email = $.trim($('#email').val()).toLowerCase(); 
    var lang = $.trim($('#lang').val()); 

    $.ajax({ 
     url: "ajax.php", 
     type: "post", 
     cache: "false", 
     data: { 
      email: email, 
      lang: lang 
     }, 
     success: function(data) { 
      console.log(data); 
      alert("success"); 
     }, 
     error: function(){ 
      alert("failure"); 
     } 
    }); 
}); 

我的PHP(在我的ajax.php文件):

$conn = new mysqli($servername, $username, $password, $dbname); 
$conn->set_charset("utf8"); 
if($conn->connect_error){ 
    die("Connection failed: " . $conn->connect_error); 
} 
$email = $_POST["email"]; 
$lang = $_POST["lang"]; 
$sql = "INSERT INTO Users (email, lang) VALUES ('" . $email . "', '" . $lang . "')"; 
$conn->close(); 

提前許多感謝, 麥克

回答

1

你只是準備查詢並不會觸發它

$conn->query($sql) 

所以,你應該有類似

$conn = new mysqli($servername, $username, $password, $dbname); 
$conn->set_charset("utf8"); 
if($conn->connect_error){ 
    die("Connection failed: " . $conn->connect_error); 
} 
$email = $_POST["email"]; 
$lang = $_POST["lang"]; 
$sql = "INSERT INTO Users (email, lang) VALUES ('" . $email . "', '" . $lang . "')"; 
if ($conn->query($sql)) 
{ 
echo 'success'; 
} 
else 
{ 
echo 'failure'; 
} 
$conn->close(); 

警告:

  1. 你不是sanitize您的輸入(永遠不要相信你的輸入)

  2. 您應該喜歡Prepared statements PDO,使其更好地

更新:

由於OP需要知道更多有關清理輸入

有幾個步驟或方法可用

  1. 如果你所得到的整數作爲輸入,然後讓它爲整數。
$id = $_GET['id']; 
settype($id, 'integer'); 
  • 使用mysql_real_escape_string()用於查詢變量脫出功能

  • 使用strip_tags()以除去不想要的不想要的HTML

  • 如果你有嵌入字符串,然後做htmlspecialchars

  • 輸入可能shellcommand爆一切escapeshellcmd

  • +0

    非常感謝。這很好用!你能解釋清楚你的意思嗎? – keewee279

    +1

    不客氣,意味着消毒。你可以通過[轉義](http://de1.php.net/manual/en/mysqli.real-escape-string.php),[過濾](http://php.net/manual/en/ function.filter-var.php)等, –

    +0

    謝謝 - 我以爲$ .trim就夠了?我剛開始編程,你能給我舉一些例子或典型的方法嗎?我在提交時單獨驗證電子郵件輸入(只是沒有在這裏添加)。 – keewee279

    1

    你實際上並沒有插入任何內容。爲此,您需要在構建SQL之後調用$conn->query($sql)

    $conn = new mysqli($servername, $username, $password, $dbname); 
    $conn->set_charset("utf8"); 
    if($conn->connect_error){ 
        die("Connection failed: " . $conn->connect_error); 
    } 
    $email = $_POST["email"]; 
    $lang = $_POST["lang"]; 
    $sql = "INSERT INTO Users (email, lang) VALUES ('" . $email . "', '" .  $lang . "')"; 
    $conn->query($sql); //check the return value here and do what you want 
    $conn->close(); 
    
    +0

    感謝這個的! – keewee279

    相關問題