首页 > 解决方案 > JSON 到 PHP API 没有发生

问题描述

我正在尝试使用 Javascript 和 PHP 在单击按钮时保存数据。

按钮点击:

            var xhr = new XMLHttpRequest();
            var url = "savedata.php";
            xhr.open("POST", url, true);
            xhr.setRequestHeader("Content-Type", "application/json");
            /*xhr.onreadystatechange = function () {
                if (xhr.readyState === 4 && xhr.status === 200) {
                    var json = JSON.parse(xhr.responseText);
                    console.log(json.rawText + ", " + json.convertedText);
                }
            };*/
            var data = JSON.stringify({"rawText": rt, "convertedText": ct});
            xhr.send(data);

保存数据.php

<?php
header("Content-Type: application/json");

require('db/db.php');
session_start();

    $saverawText = $_POST['rawText'];
    $saveConvertedText = $_POST['convertedText'];

    $ins_query="insert into cmn_data (`rawtext`,`convertedtext`) values ('$saverawText','$saveConvertedText')";
    $result = mysqli_query($con, $ins_query);

?>

在 Db 中:创建了一条记录但它是空的,所以每次我单击保存按钮时都会创建 1 条记录但它是空的。上面的语法有什么问题?

谢谢!

标签: javascriptphpjson

解决方案


PHP 不会将 JSON 请求解析为 $_POST 数组本身。您应该在 php 中解析请求正文:

$request = json_decode(file_get_contents('php://input'), true);
$saverawText = $request['rawText'];
$saveConvertedText = $request['convertedText'];

或使用 FormData 对象将数据传递给请求:

var data = new FormData();
data.append("rawText", rt);
data.append("convertedText", ct);
xhr.send(data);

并且如前所述,将用户直接输入到 sql 中可能会导致 sql 注入。使用mysqli_real_escape_string转义用户输入或 PDO 驱动程序,这是一种更复杂但更可靠的方法。


推荐阅读