获取发送表单数据并从 php 接收它
fetch send formdata and recieve it from php
你好,英语不好,我正在尝试通过获取请求向我的 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'))
一次操作即可完成。
你好,英语不好,我正在尝试通过获取请求向我的 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'))
一次操作即可完成。