将JSON数据发送到PHP并使用它来操作MySQL

时间:2015-02-11 11:59:04

标签: php jquery mysql ajax json

我想做什么:从FIRST表中复制所有选定的行并将它们插入到SECOND表中。在json中发送事件类型(插入或删除)和要复制的ID行数组。 我如何在PHP文件中访问此JSON数据?

JS:

 var data_to_send = {
            event : "accept",
            ids : ids_to_accept,
        }
        console.log(ids_to_accept);
        $.ajax({
            type: "POST",
            url: "request.php",             
            contentType: "application/json; charset=utf-8",
            data: data_to_send,
            success: function(response){ 
                console.log("Dodałem rekord!");
            },
        });

PHP:

<?php
//include db configuration file
include_once("connect.php");
if(isset($_POST["data"])){
    $data = $_POST["data"];
    $ids_to_insert = array();
    $ids_to_insert = $data["ids"];

    $row_to_insert = $mysqli->query("SELECT * FROM oczekujace WHERE ID='".$ids_to_insert[0]."'");
    $inser_row = $mysqli->query("INSERT INTO zaakceptowane(nazwa) VALUES('".$row_to_insert['nazwa']."')");
}            
?>

编辑

好的,我解决了这个问题。刚刚删除了contentType ...

$.ajax({
        type: "POST",
        url: "request.php",
        //dataType : "json",
        //contentType: "application/json; charset=utf-8",
        data: {data : data_to_send},
        success: function(response){
            console.log(response);
            console.log("Dodałem rekord!");
        },
});

3 个答案:

答案 0 :(得分:0)

您可以使用json_decode()功能。它返回php数组,你可以使用它在mysql中插入数据。要详细了解json_decode(),请访问此链接。 http://php.net/manual/en/function.json-decode.php

答案 1 :(得分:0)

在AJAX中使用dataType:'json',

var data_to_send = {
                event : "accept",
                ids : ids_to_accept,
            }
            console.log(ids_to_accept);
            $.ajax({
                type: "POST",
                url: "request.php",  
                dataType: 'json',           
                contentType: "application/json; charset=utf-8",
                data: data_to_send,
                success: function(response){ 
                    console.log("Dodałem rekord!");
                },
            });

在PHP文件中使用json_decode()

include_once("connect.php");
if($_POST){
    $data = json_decode($_POST);
    //manipulate $data
    $ids_to_insert = array();
    $ids_to_insert = $data["ids"];

    $row_to_insert = $mysqli->query("SELECT * FROM oczekujace WHERE ID='".$ids_to_insert[0]."'");
    $inser_row = $mysqli->query("INSERT INTO zaakceptowane(nazwa) VALUES('".$row_to_insert['nazwa']."')");
}    

它会按你的意愿工作。

答案 2 :(得分:0)

$_POST['data']未定义,因为它不在data_to_send中。 您必须直接在$_POST

中访问发布的元素
$event = $_POST["event"]);
$ids_to_insert = $_POST["ids"];

或者您可以更改JS部分并提供data元素:

$.ajax({
    type: "POST",
    url: "request.php",
    data: {
        "data": data_to_send,
    },
    success: function(response){ 
        console.log("Dodałem rekord!");
    }
});

不需要json_decodejQuery已将data对象转换为urlencoded参数字符串,而PHP又将其转换为数组。