php文件未从axios发布请求接收数据

时间:2019-09-05 07:00:04

标签: php reactjs axios

php文件未从axios发布请求接收数据。表单提交后显示未定义的错误。我已经在react js中创建了表单。所有字段和状态变量都正确显示。

axios({
  method: 'post',
  url: 'http://tulisuites.com/form.php',
  headers: { 'content-type': 'application/json' },
  data:JSON.stringify(this.state)
})
  .then(result => {
    this.setState({
      mailSent: result.data.sent
    });
    console.dir(this.state);
  })
  .catch(error => this.setState({ error: error.message }));  
<?php

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: X-Requested-With, Content-Type, Origin, Cache-Control, Pragma, Authorization, Accept, Accept-Encoding");
header("Access-Control-Allow-Methods: POST, GET, OPTIONS");
header("Content-Type: application/json");

$rest_json = file_get_contents("php://input");

$_POST = json_decode($rest_json, true);

$subject = "Enquiry form";
$to = "sample@domainname.com";
// data

$msg = $_POST['name'] . $_POST['email'] . $_POST['organisation'] . $_POST['contactno'] . $_POST['message'];

// Headers

$headers = "MIME-Version: 1.0\r\n";
$headers.= "Content-type: text/html; charset=UTF-8\r\n";
$headers.= "From: <admin@tulisuites.com>";
mail($to, $subject, $msg, $headers);
?>

1 个答案:

答案 0 :(得分:-1)

如果您通过ajax以正确的JSON格式将数据发送到服务器,则该数据应该已经在全局$_POST变量中。您可以使用var_dump($_POST)查看数据内容,以确保获得数据。如果其中包含您的数据,则无需从输入流中读取值,对其进行解码然后覆盖全局变量,则只需使用以下行:

$msg = $_POST['name'] . $_POST['email'] . $_POST['organisation'] . $_POST['contactno'] . $_POST['message'];

它应该可以工作。

此外,您可以对每个参数使用filter_input(INPUT_POST, "variable")而不是$_POST["variable"]来确保已设置并防止错误。