无法从php中的任何HTTP请求获取参数

时间:2019-05-03 16:59:48

标签: php rest

我无法从php // input获取请求参数,它总是返回空字符串。 $ _POST也总是空的,我可以获取参数的唯一方法是使用$ _REQUEST,但我不确定这是否是解决此问题的正确方法。

var_dump(file_get_contents("php://input"));

返回:string(0)“”

var_dump($_POST);

返回:array(0){}

var_dump($_REQUEST);

返回:array(2){   [“ ergerg”] =>   string(6)“ ergerg”   [“ regergerg”] =>   字符串(6)“ ergreg” }

我在邮递员中的要求如下:

POST  /api/ajax.php?ergerg=ergerg&regergerg=ergreg

response
Status:200 OK
Time:192 ms
Size:236 B

ajax.php

<?php
include "config.php";

$rest_json = file_get_contents("php://input");
$obj = json_decode($rest_json);
$request = $obj->request;

if($request == 1){
    $userData = mysqli_query($con, "select * from rows");

    $response = array();

    while ($row = mysqli_fetch_assoc($userData)) {
        $response[] = $row;
    }
    echo json_encode($response);
}

if($request == 2){
    $platform   = $data->platform;
    $container1 = $data->container1;
    $container2 = $data->container2;
    $ZPU1       = $data->ZPU1;
    $ZPU2       = $data->ZPU2;
    $reportId   = $data->reportId;
    mysqli_query($con, "INSERT INTO 
                            rows(platform,container1,container2,
                                ZPU1,ZPU2,reportId) 
                    VALUES('" . $platform . "','" . $container1 . "','" . 
                            $container2 . "','" . $ZPU1 . "','" . $ZPU2 . 
                            "','" . $reportId . "')");
    echo "Insert successfully";
}

exit;

在配置文件中,只有与mysql数据库的连接:

config.php

<?php

$host = "localhost"; /* Host name */
$user = "root"; /* User */
$password = "password"; /* Password */
$dbname = "dbname"; /* Database name */

$con = mysqli_connect($host, $user, $password,$dbname);
// Check connection
if (!$con) {
  die("Connection failed: " . mysqli_connect_error());
}

1 个答案:

答案 0 :(得分:0)

我认为您可能对POST请求和HTTP主体的工作方式感到困惑。抱歉,如果这实际上只是您的问题中的一个错误。

HTTP请求可以包含几个关键部分:

  • 请求方法-GET,POST,PUT,DELETE等
  • 请求的网址
  • 标题
  • 一个“身体”,其中包含其他数据

如果您从网站提交纯HTML表单,它将被转换为GET请求(参数编码为URL)或POST请求(参数参数编码为请求正文)。因此,PHP具有名为$_GET$_POST的数组,用于在两种情况下检索表单详细信息-但它们实际上并不对应于HTTP方法,而只是对应于数据编码方式。

php://input代表请求正文,无论使用哪种HTTP方法。

因此,最后,对于您的示例请求:您已经指定了一个URL,并在其中编码了一些参数。 PHP将其解码为$ _GET;您已指定POST的HTTP方法;但您尚未在请求正文中发送任何内容,因此php:// input将为空。