我无法在axios
中使用react
发出发布请求,而我正在向我的php服务器发出发布请求,并想在通过发布请求获取的mysql中插入数据。
这是我的代码。
const url = "http://localhost:80/react-backenda/";
const axios = require('axios');
axios.post(url, {
SendBy: 'username',
Sendto: 'got_name',
Msg: 'input'
})
.then(res=> console.log(res.data))
.catch(err => console.log(err));
我正在我的控制台中获取它:
Notice: Undefined index: Msg in C:\xampp\htdocs\react-backenda\index.php on line 10
Notice: Undefined index: Sendby in C:\xampp\htdocs\react-backenda\index.php on line 11
Notice: Undefined index: Sendto in C:\xampp\htdocs\react-backenda\index.php on line 12
done
这是我的php脚本:
<?php
$servername = "localhost";
$username = "root";
$password = "";
$database = "msg-clone";
$conn = mysqli_connect($servername, $username, $password, $database);
if(!$conn){
die("could not connect to server!");
}
$recText = $_POST['Msg'];
$sendby = $_POST['Sendby'];
$sendto = $_POST['Sendto'];
echo $recText;
$sql = "INSERT INTO `messages` (`id`, `text`, `sendby`, `sendto`, `time`) VALUES (NULL, '$recText', '$sendby', '$sendto', current_timestamp());";
$res = mysqli_query($conn, $sql);
if ($res){
echo "done";
}else {
echo "err";
}
?>
帮助解决此问题。
答案 0 :(得分:0)
默认情况下,Axios serializes your object to JSON。这意味着您将必须在PHP后端中以JSON形式接收它,或配置axios实例以像浏览器在简单表单上那样以form data
的形式发送它。
要在PHP上将其作为JSON接收,您可以这样做:
$data = json_decode(file_get_contents('php://input'), true);
$recText = $data['Msg'];
$sendby = $data['Sendby'];
$sendto = $data['Sendto'];
但是,如果您想在前端处理它,它将是这样的:
var formData = new FormData();
formData.append("SendBy", "username");
formData.append("Sendto", "got_name");
formData.append("Msg", "input");
axios.post(url, formData, {
headers: {
'Content-Type': 'multipart/form-data'
}
})
注意:正如Dharman所警告的那样,您的后端代码存在与SQL注入相关的严重安全问题,将连接和查询处理隔离在单独的Classes/Files
上也很不错。如果您正在开发生产应用程序甚至只是学习,请注意这些细节,还有一些初学者的朋友框架,可让您轻松地为Laravel等较小或较大的项目创建良好的结构。
样品: