【问题标题】:PHP not able to read JSON but writes extra lines in SQLPHP 无法读取 JSON 但在 SQL 中写入额外的行
【发布时间】:2020-12-06 19:22:47
【问题描述】:

我有一个 HMTL 表单,上面有 3 个字段,名字、姓氏和图像上传文件。按下提交时,它会调用以下 JS 脚本。

//main function to be called on submit
function processData() {

  var firstName = document.querySelector('#first-name'),
    lastName = document.querySelector('#last-name'),
    imageUser = document.querySelector('#image-user');

  var formSubmitData = {

    'firstName': firstName.value,
    'lastName': lastName.value,
    'imageUser': imageUser.value
  };

  var dataString = JSON.stringify(formSubmitData);

  if (navigator.onLine) {
    sendDataToServer(dataString);
  } else {
    saveDataLocally(dataString);
  }

  firstName.value = '';
  lastName.value = '';
  imageUser.value = '';
}

//called on submit if device is online from processData()
function sendDataToServer(dataString) {

  var myRequest = new XMLHttpRequest();
  //new code added so data is sent to server

  //displays popup message - data sent to server 
  myRequest.onreadystatechange = function() {

    if (myRequest.readyState == 4 && myRequest.status == 200) {

      console.log('Sent to server: ' + dataString + '');
      window.localStorage.removeItem(dataString);
    } else if (myRequest.readyState == 4 && myRequest.status != 200) {

      console.log('Server request could not be completed');
      saveDataLocally(dataString);
    }
  }

  myRequest.open("POST", "write_test.php", true);
  //Send the proper header information along with the request
  myRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  myRequest.send(dataString);

  alert('Sent: ' + dataString + ''); //remove this line as only for example
}

如您所见,它会向 php 页面发送一个 POST 请求。 “数据字符串”被编码为 JSON。

我使用以下 PHP 代码将数据发送到 SQL 服务器,但它所做的只是创建一个没有数据的空白记录,但它确实创建了一条新记录。

<?php
 //TRYING NEW CODE TO EXTRACT DATA FROM dataString
 $json = json_decode(file_get_contents("php://input"), true);
 $data = json_decode($json, true);
 echo '<pre>' . print_r($data, true) . '</pre>';
 // INSERT into your contact table.
 $sql="INSERT INTO contacts (firstName, lastName)VALUES('$firstName','$lastName')";

如何使用从表单提交的数据在 SQL 中创建记录??

【问题讨论】:

  • 为什么要将结果解码两次?
  • 您正在执行查询吗?你从print_r() 得到什么结果?可以肯定的是,您没有获得变量 $firstName$lastName,因此我们需要查看 JSON 来告诉您如何获得这些变量。
  • 我认为第一行应该是唯一的解码行? $json 应该读取 $data?
  • 您不能使用.value 来获取文件输入的值。您需要发布一个FormData,然后您可以使用$_POST$_FILES获取发布的数据。

标签: javascript php sql json


【解决方案1】:

我没有最终解决方案,因为我没有表单代码。希望你准备好学习。 我担心用户图像 - 请不要发送任何图像进行测试,而是发送一个字符串(如路径)或什么都不发送。
js - 更改为双引号:

var formSubmitData = {
    "firstName" : firstName.value,
    "lastName" : lastName.value,
    "imageUser" : imageUser.value
};

php - 只留下这个

<?php
$data = json_decode(file_get_contents("php://input"));      // test only version
print_r($data);                         // test only version

/* 
and close the rest as a comment - SQL is fine, don't worry

$data = json_decode(file_get_contents("php://input",true)); // final ver
echo print_r($data, true);                  // final ver
...   
*/

如果您收到正确的输出,请删除试用版并祝您好运。
如果不是 - 回到 var formSubmitData 到右边的值 - 它们是如此赤裸......没有任何引号

当然,还要注意安全性(注入)和顺序,在输入处设置所需 - 您不需要空提交

【讨论】:

    猜你喜欢
    • 2017-12-25
    • 1970-01-01
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多