【问题标题】:Send JSON data to PHP and use it to operate on MySQL将 JSON 数据发送到 PHP 并使用它对 MySQL 进行操作
【发布时间】:2015-02-11 11:59:03
【问题描述】:

我想要做的:从 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!");
        },
});

【问题讨论】:

标签: php jquery mysql ajax json


【解决方案1】:

您可以使用json_decode() 函数。它返回 php 数组,您可以使用它在 mysql 中插入数据。要了解有关json_decode() 的更多信息,请访问此链接。 http://php.net/manual/en/function.json-decode.php

【讨论】:

  • 但是如果我在 isset 之前输入$data = $_POST["data"] 会出错: 注意:未定义索引:第 4 行 D:\xampp\htdocs\picturesoflight\akcept\request.php 中的数据
  • 使用 print_r($_POST) 调试您发布的数据并将其粘贴到 cmets 中。
  • Array ( ) 只有这个。
  • 什么是data_to_send?你序列化你的帖子请求吗?
  • 一切看起来都很好,序列化是什么意思?
【解决方案2】:

在 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']."')");
}    

它会按照你的意愿工作。

【讨论】:

    【解决方案3】:

    $_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 又将其转换为数组。

    【讨论】:

    • 不工作 $event = $_POST["event"]) 并且还更改为 data: { "data": data_to_send, }, dsnt 工作 ;/
    • 你能在你的JS里试试这个吗? data: $.param(data_to_send)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    • 1970-01-01
    • 2015-10-10
    相关资源
    最近更新 更多