【问题标题】:Can't get params from any HTTP request in php无法从 php 中的任何 HTTP 请求中获取参数
【发布时间】:2019-05-03 16:59:48
【问题描述】:

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

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

返回:string(0) ""

var_dump($_POST);

返回:数组(0){}

var_dump($_REQUEST);

返回:数组(2){ ["ergerg"]=> 字符串(6)“ergerg” [“雷格格”]=> 字符串(6)“ergreg” }

我在 Postman 中的请求如下所示:

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());
}

【问题讨论】:

标签: php rest


【解决方案1】:

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

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

  • 请求方法 - GET、POST、PUT、DELETE 等
  • 请求的 URL
  • 标题
  • “主体”,包含附加数据

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

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

所以,最后,对于您的示例请求:您已经指定了一个 URL,其中编码了一些参数; PHP 会将它们解码为 $_GET;您已指定 POST 的 HTTP 方法;但你还没有在请求正文中发送任何内容,所以 php://input 将为空。

【讨论】:

  • 我猜你是对的,我不完全理解 htttp 请求,我的任务是将值从 vue (axios) 发送到用 php 编写的 api,我发现第一种方法是 json_decode( file_get_contents("php://input")) 和第一个问题是在 json_decode,然后我明白 file_get_contents("php://input") 返回字符串。但实际问题出在我的请求中,因为我认为 Get 请求的参数与 post 请求的正文相同。
猜你喜欢
  • 1970-01-01
  • 2015-11-01
  • 2017-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多