2017-07-18 52 views
0

我試圖通過使用Ajax和PHP插入數據到數據庫。但是,我不知道爲什麼它不起作用。我已經測試了html文件,所有的itemName,category,price都是有效的,php文件只是返回給我「成功」,只是插入數據庫的數據是空的。AJAX請求工作,但沒有數據插入到數據庫

$(document).ready(function(){ 
    var url = "http://domain/addProduct.php?callback=?"; 

    $("#addProduct").click(function() { 
    var itemName = $("#itemName").val(); 
    var category = $("#select_category").val(); 
    var price = $("#price").val(); 
    var dataString = "$itemName=" + itemName + "&category=" + category + "&price=" + price + "&addProduct="; 

    if ($.trim(itemName).length > 0 & $.trim(category).length > 0 & $.trim(price).length > 0) { 
     $.ajax({ 
     type: "POST", 
     url: url, 
     data: dataString, 
     crossDomain: true, 
     cache: false, 
     beforeSend: function() { 
      $("#addProduct").val('Connecting...'); 
     }, 
     success: function(data) { 
      console.log(data); 
      if (data == "success") { 
      alert("Successfully add item"); 
      } else if(data="failed") { 
      alert("Something Went wrong"); 
      } 
     } 
     }); 
    } 
    return false; 
    }); 
}); 
<?php 
    header("Access-Control-Allow-Origin: *"); 

    require("config.inc.php"); 

    $name = mysql_real_escape_string(htmlspecialchars(trim($_POST['itemName']))); 
    $category = mysql_real_escape_string(htmlspecialchars(trim($_POST['category']))); 
    $price = mysql_real_escape_string(htmlspecialchars(trim($_POST['price']))); 
    $date = date("d-m-y h:i:s"); 

    $statement = $pdo->prepare("INSERT INTO product(name, category, price, date) VALUES(:name, :category, :price, :date)"); 
    $statement->execute(array(
    "name" => $name, 
    "category" => $category, 
    "price" => $price, 
    "date"=>$date 
)); 

    if($statement) 
    { 
    echo "success"; 
    } 
    else 
    { 
    echo "failed"; 
    } 
?> 
+0

是你得到任何錯誤? –

+0

如果您使用準備好的語句,則不需要轉義變量。當你使用PDO時你不能使用'mysql_XXX'函數。 – Barmar

+0

插入數據庫時​​,也沒有理由使用'htmlspecialchars()'。這應該只在網頁上顯示時使用,以防止XSS。 – Barmar

回答

0

替換此代碼:

dataString="$itemName="+itemName+"&category="+category+"&price="+price+"&addProduct="; 

到:

dataString="itemName="+itemName+"&category="+category+"&price="+price+"&addProduct="; 

,太替換此代碼:

if($.trim(itemName).length>0 & $.trim(category).length>0 & $.trim(price).length>0) 

到:

if($.trim(itemName).length>0 && $.trim(category).length>0 && $.trim(price).length>0) 

因爲&是位運算符,但& &是邏輯運算符,所以在這種情況下,我們總是用邏輯運算符。

0

不能使用date爲您的表列。 date是預定義/保留關鍵字。將日期列的名稱更改爲數據庫並修改您的sql query,然後重試。

+0

其實我的日期格式爲字符串目前,所以現在正在努力,解決的辦法是更換「$ ITEMNAME =」數據串「ITEMNAME =」但我不知道爲什麼 –

+0

因爲你得到你的'itemname'在你的php文件中使用'$ _POST ['itemname'];'並在你的ajax請求中聲明'$ itemname'。 –

+0

好的,謝謝,但是對於數據字符串中的「&addProduct =」,是否也有必要?我不熟悉這個 –

相關問題