Ajax-在PHP中使用Json时出错

时间:2018-04-30 06:22:50

标签: javascript php mysql json ajax

我正在尝试使用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);



?>

3 个答案:

答案 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);



?>