获取发送表单数据并从 php

问题描述

您好,英语不好,我正在尝试使用 fetch 请求将一些表单数据插入到我的 sql 数据库中,添加了行并且 ID 计数为 +1,但是没有向列“nomtar”添加额外的数据,” destar”等

提交表单上的 JS 函数

function enviarDatos(e){
    e.preventDefault();
    var nomtar = document.getElementById('nomtar').value;
    var destar = document.getElementById('destar').value;
    var usu2tar = document.getElementById('usu2tar').value;
    var fectar = document.getElementById('fectar').value;
    formData = new FormData();
    formData.append('nomtar',nomtar);
    formData.append('destar',destar);
    formData.append('usu2tar',usu2tar);
    formData.append('fectar',fectar);
    fetch('servicios/agregar.PHP',{
      method: 'POST',headers: {
                  'Content-Type': 'application/json'
              },body: JSON.stringify(formData)
    }).then(response => {
      if(response.ok){
        console.log("datos enviados");
      }
      else{
        console.log("datos no enviados");
      }
    }).catch((error) => {
      console.log(error)
      });
  }

agregar.PHP 文件

    <?PHP
  session_start();
  include('conexion.PHP');
  $data = json_decode(file_get_contents('PHP://input'),true);

  $nomtar=$data['nomtar'];
  $destar=$data['destar'];
  $fectar=date('Y-m-d',strtotime($data['fectar']));
  $usu1tar=$_SESSION['idusu'];
  $usu2tar=$data['usu2tar'];
  $query="select idusu from usuario where nombre='$usu2tar'";
  $result1=MysqLi_query($con,$query);
  if($result1){
    while($row=MysqLi_fetch_array($result1)){

        $idusu=$row['idusu'];

    }
  }


  $sql="INSERT INTO tarea(usu1tar,usu2tar,nomtar,destar,fectar,esttar) VALUES('$usu1tar','$idusu','$nomtar','$destar','$fectar',1)";
  $result2=MysqLi_query($con,$sql) or die(MysqLi_error($con));


  MysqLi_close($con);
?>

解决方法

无需将表单数据转换为 JSON。 Fetch 直接理解 FormData

改变这一行

body: JSON.stringify(formData)

为此:

  body: formData

现在您的 PHP 代码可以从 $_POST 中提取传入的数据,而无需读取 php://input

    <?php
  session_start();
  include('conexion.php');
  // remove line that reads php://input here.

  $nomtar=$_POST['nomtar'];
  $destar=$_POST['destar'];
  $fectar=date('Y-m-d',strtotime($_POST['fectar']));
  $usu1tar=$_SESSION['idusu'];
  $usu2tar=$_POST['usu2tar'];
// rest of code follows

这应该能让您继续前进,但请注意,您的代码容易受到 SQL 注入的影响。一旦你解决了这个问题,你应该重构你的代码以使用准备好的语句。

注意:FormData 可以直接从表单中提取数据,而无需逐个字段地提取数据。 let formData = new FormData(document.getElementById('formId')) 将在一次操作中完成。