我正在尝试使用Ajax将JSON数据插入MySQL。 但我没有得到任何东西,查询无效。
我尝试了一切,我不知道问题是在Ajax,PHP还是在JSON中。
我应该从哪里开始寻找?
JS CODE
$("#btnprueba").click(function () {
var array1 = [];
$("#tabla .DataRow").each(function () {
var firstTableData = {};
var Aidi = $(this).find('td').eq(0).text().trim();
firstTableData.ID_Articulo = $(this).find('td').eq(0).text().trim();
firstTableData.Descripcion = $(this).find('td').eq(1).text().trim();
firstTableData.Valor_Venta = $(this).find('td').eq(2).text().trim();
firstTableData.Cantidad = $(this).find('td').eq(3).text().trim();
firstTableData.Subtotal = $(this).find('td').eq(4).text().trim();
array1.push(firstTableData);
});
var JsonValues = JSON.stringify(array1);
alert(JsonValues);
$.ajax({
type: "POST",
url: "GuardarDatosFactura2.php",
data: "J="+JsonValues,
success: function(response){
alert(response);
},
error: function(e){
console.log(e.message);
},
});
});
变量JsonValues中的Json
[{"ID_Articulo":"001","Descripcion":"Caramelos","Valor_Venta":"6500","Cantidad":"2","Subtotal":"13000"}]
PHP代码
<?php
header("Content-Type: application/json; charset=UTF-8");
$CON = mysqli_connect("localhost","root","","BDfactura") or die ("error");
$data = json_decode($_POST['J'],false);
$ID=$data->ID_Articulo;
$Canti=$data->Cantidad;
$Vlr=$data->Valor_Venta;
$cadena2 = "INSERT INTO ItemXVenta (IdArticulo, Cantidad, ValorVenta) VALUES ('$ID','$Canti','$Vlr')";
$create2 = mysqli_query($CON,$cadena2);
if($cadena2){
$MSG= "Se guardaron los datos";
}
else{
$MSG= "No se guardaron los datos";
}
echo($MSG);
?>
答案 0 :(得分:1)
这会对你有所帮助,检查我在post请求中循环你收到的json并使用for循环生成insert查询来创建一个insert语句
<?php
header("Content-Type: application/json; charset=UTF-8");
$CON = mysqli_connect("localhost","root","","BDfactura") or die ("error");
$data = json_decode($_POST['J'],false);
$comma = "";
$query = "INSERT INTO ItemXVenta (IdArticulo, Cantidad, ValorVenta) VALUES ";
foreach ($data as $key => $value) {
$ID = mysqli_real_escape_string($CON, $value->ID_Articulo);
$Canti = mysqli_real_escape_string($CON, $value->Cantidad);
$Vlr = mysqli_real_escape_string($CON, $value->Valor_Venta);
$query .= $comma . "('$ID','$Canti','$Vlr')";
$comma = ",";
}
$create2 = mysqli_query($CON, $query);
if($cadena2){
$MSG= "Se guardaron los datos";
}
else{
$MSG= "No se guardaron los datos";
}
echo($MSG);
?>
答案 1 :(得分:1)
操作,不要自己对数据进行json编码。让jQuery处理它。或者至少在对象中传递JSON编码数据。
您需要做的是将数据作为javascript对象传递给jQuery。这样你就可以让jQuery和PHP完成所有繁重的任务。
$.ajax({
type: "POST",
url: "GuardarDatosFactura2.php",
data: {J: array1},
// ^^ Javascript object, passing the array as raw info.
// This way it will be passed as an object to your php.
success: function(response){
alert(response);
},
error: function(e){
console.log(e.message);
},
});
然后在PHP中你可以做到
$data = $_POST['J'];
PHP应该已经将它转换为本机php对象/数组。
只需执行var_dump($data); die();
即可了解其内容。
如果您的对象非常嵌套,则php可能无法对其进行自动编码。然后对其进行编码并传递编码的var。
data: {J: JSON.stringify(array1)},
并在php中
$data = json_decode($_POST['J'], false);
注意,没有问,但需要知道!
您在sql中使用无准备变量。
"INSERT INTO ItemXVenta (IdArticulo, Cantidad, ValorVenta) VALUES ('$ID','$Canti','$Vlr')";
这是糟糕。如果您的网站将成为前台,那么任何人都可以转储您的数据库,读出您的数据库并对您的数据库造成严重破坏,因为您可以直接访问您的内部。
请使用prepared statements,永远不要使用没有预备语句的查询。此外,您不会指望重复键。如果产品已经存在,则应更新,而不是重新插入。
if ($stmt = $mysqli->prepare("INSERT INTO ItemXVenta (IdArticulo, Cantidad, ValorVenta) VALUES (?,?,?) ON DUPLICATE KEY UPDATE Cantidad=?, ValorVenta=?")) {
$stmt->bind_param("i", $ID);
$stmt->bind_param("s", $Canti);
$stmt->bind_param("s", $Vlr);
$stmt->bind_param("s", $Canti);
$stmt->bind_param("s", $Vlr);
mysqli_stmt_execute($stmt);
}
答案 2 :(得分:0)
您必须从json解码数据中获取数组值,如下所示:
<?php
header("Content-Type: application/json; charset=UTF-8");
$CON = mysqli_connect("localhost","root","","BDfactura") or die ("error");
$data = json_decode($_POST['J'],false);
$ID=$data[0]->ID_Articulo;
$Canti=$data[0]->Cantidad;
$Vlr=$data[0]->Valor_Venta;
$cadena2 = "INSERT INTO ItemXVenta (IdArticulo, Cantidad, ValorVenta) VALUES ('$ID','$Canti','$Vlr')";
$create2 = mysqli_query($CON,$cadena2);
if($cadena2){
$MSG= "Se guardaron los datos";
}
else{
$MSG= "No se guardaron los datos";
}
echo($MSG);
?>