问题描述
您好,英语不好,我正在尝试使用 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)
});
}
<?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'))
将在一次操作中完成。