获取发送表单数据并从 php 接收它

Posted

技术标签:

【中文标题】获取发送表单数据并从 php 接收它【英文标题】:fetch send formdata and recieve it from php 【发布时间】:2021-07-21 06:49:30 【问题描述】:

您好 srry 英语不好,我正在尝试使用 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);
?>

【问题讨论】:

你做了什么调试?变量有什么值?无论如何,这不是编写数据库代码的方式。请查看准备好的语句,您将使您的代码更安全,并且很有可能解决您的问题。 警告:您对SQL Injections 持开放态度,应该使用参数化的prepared statements,而不是手动构建查询。它们由PDO 或MySQLi 提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行,you are still in risk of corrupting your data。 Escaping is not enough! 在代码中使用die(mysqli_error($conn)); 是一个非常糟糕的主意,因为它可能会泄露敏感信息。更多解释见这篇文章:mysqli or die, does it have to die? 【参考方案1】:

无需将表单数据转换为 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')) 将在一次操作中完成。

【讨论】:

以上是关于获取发送表单数据并从 php 接收它的主要内容,如果未能解决你的问题,请参考以下文章

发送序列化的表单数据并接收带有表单和会话数据的 PHP Laravel 重定向

php怎么获取表单中提交的数据?

有人可以将来自不同主机的表单数据发送到我的 PHP 脚本,该脚本将获取的数据插入 MySQL 吗?如果是这样,我们如何保护它?

如何从 javascript 变量发送表单值并在 php 中作为整数接收? [复制]

PHP如何接收json数据

PHP:从表单中获取电子邮件并在单击按钮时发送它