获取发送表单数据并从 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 脚本,该脚本将获取的数据插入 MySQL 吗?如果是这样,我们如何保护它?