将AJAX中的post变量发送到PHP文件以获取可变性

时间:2018-09-25 14:02:35

标签: javascript php

应该发生什么:

  • 单击按钮时,它将调用report.php并发送“ main”作为类型
  • 在report.php中拾取类型“ main”并用作$ typename
  • $ data变量填充了main.json的内容

会发生什么:

>     [25-Sep-2018 13:56:56] WARNING: [pool www] child 11 said into stderr: "NOTICE: PHP message: PHP Notice:  Undefined index: type in
> /var/www/html/report.php on line 27"
>     [25-Sep-2018 13:56:56] WARNING: [pool www] child 11 said into stderr: "NOTICE: PHP message: PHP Warning:  file_get_contents(.json):
> failed to open stream: No such file or directory in
> /var/www/html/report.php on line 28"
>     2018/09/25 13:57:00 [error] 8#8: *5 FastCGI sent in stderr: "PHP message: PHP Notice:  Undefined index: type in
> /var/www/html/report.php on line 27

index.php

<script>
$(document).ready(function(){
    $("button").click(function(){
        $.ajax({
            url: 'report.php',
            type: "POST",
            dataType:'json',
            data: ({type: main}),
            success: function(result){
                $("#output").html(result);
            }
        }); 
    });
});
</script>

report.php

$typename = $_POST['type'];
echo $typename;
$data = file_get_contents("$typename.json");

main.json

{
    "reportDescription":{ <....>
}

2 个答案:

答案 0 :(得分:4)

问题是您正在尝试将未定义的变量main发送到您的php文件。此变量不存在,因此会出现错误。字符串必须用单引号或双引号引起来。

您应将data: ({type: main}),更改为

data: {type: 'main'},

(不需要假体)

将字符串发送到您的PHP文件。

现在在您的PHP文件中,您需要输出$data

$typename = $_POST['type'];
echo $typename;
$data = file_get_contents("$typename.json");
echo $data;

答案 1 :(得分:0)

您应将data: {type: 'main'},更改为answered before

但是该答案中的php代码可以改进。此代码可能会导致安全问题,尤其是Server Side Request Forgery。您需要在用户提供的数据和应用程序代码之间设置清晰的边界,需要验证代码,以避免file_get_contents的某些邪恶用途:

  • 一个人可以通过http 请求一个随机网站,或使用其他协议(例如 ssh )连接到可从您的网络服务器访问的其他服务器

  • 有人可以扫描目录读取操作系统文件

因此,请注意对用户输入的操作,您需要对其进行验证。我将使用以下代码。

  // strip all slashes and directories, use only the filename
  $typename = basename($_POST['type']);
  $filename = __DIR__.'/'.basename($_POST['type']).".json";

  if (!file_exist($filename)){
     echo "ERROR";
  }
  // do not output anything till validated
  // echo $typename;
  // use a header to tell the user that this is a json file
  header('Content-Type: application/json');
  $data = file_get_contents($filename);
  echo $data;