2017-07-18 56 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 =”,是否也有必要?我不熟悉这个 –

相关问题