【问题标题】:Get values through post method from URL通过 URL 的 post 方法获取值
【发布时间】:2017-01-03 00:37:48
【问题描述】:

我正在尝试一些代码通过 post 方法从 URL 获取值,并在数据库表中搜索该值并从数据库中获取信息并将其编码为 JSON 响应。

这是我的代码:

<?php
//open connection to mysql db
$connection = mysqli_connect("localhost","root","","json") or die("Error " . mysqli_error($connection));
if (isset($_POST['empid'])) {
    $k = $_POST['empid'];
    //fetch table rows from mysql db
    $sql = "select `salary` from tbl_employee where `employee_id` = $k ";
} else {
    //fetch table rows from mysql db
    $sql = "select `salary` from tbl_employee";
}
//fetch table rows from mysql db
$result = mysqli_query($connection, $sql) or die("Error in Selecting " . mysqli_error($connection));

//create an array
$emparray = array();
while($row =mysqli_fetch_assoc($result))
{
    $emparray[] = $row;
}
echo json_encode($emparray);

//close the db connection
mysqli_close($connection);
?>

我在 Chrome 上使用了 Postman 扩展并传递了值,但它没有返回。相反,它返回 else 部分。

邮递员截图

【问题讨论】:

  • 你有这个值empid的表格吗?
  • var_dump($_POST); 如果您要查找的值不存在,那么邮递员就没有工作
  • 你是用“form-data”还是“URL params”来定义POST参数?
  • 我也在使用它。这就是为什么我问你如何定义你的 post 参数。将有两种选择 1. 使用 URL 参数,另一种是 body->form-data 或 x-www-form-urlencoded 或 raw 或 binary。如果您使用的是最新版本,则会有一个名为“生成代码”的选项。共享它以进行调试
  • 你需要转储或打印_r $_POST

标签: php mysql json post


【解决方案1】:

查看您的屏幕截图,您没有传递正文键值,而是传递了参数。

单击正文选项卡,然后传递键值对。

【讨论】:

  • 尝试检查 你是否真的收到了任何数据
  • 我得到了 else 条件
  • 我的意思是你在上面收到的postdata,因为截图中显示的设置足以接收post数据-正文-键值-选择表单数据
  • 我在尝试您的解决方案时得到了所有数据
  • 你的意思是你收到了字符串中的预期数据?
【解决方案2】:

根据您的屏幕截图,您通过查询参数发送empid,因此您需要按如下方式访问它

<?php
if (isset($_GET['empid'])) {
    echo $_GET['empid'];
}else{
    // else part
}

为此,您还需要使用 GET 方法在 Postman 中请求 URL。

但正如您所说,您想在邮递员中通过POST 发送empid,您必须在邮递员中通过form-data 发送并以$_POST["empid"]; 访问它。以下是供您参考的屏幕截图

还有另一种选择,您可以通过bodyrow json 的身份发送POST 数据并以row json 的身份访问它

$rawPostData = file_get_contents('php://input');
$jsonData = json_decode($rawPostData);

$post 将包含raw data。您可以通过邮递员发送,如下图所示。

【讨论】:

  • @Melvin 我的回答对你有帮助吗?
【解决方案3】:

您必须将 Body 设置为“x-www-form-urlencoded”并添加要发布的变量

或者试试这个SO question,已经回答了

【讨论】:

    【解决方案4】:

    我在我的系统上复制了代码和数据库以找出问题所在。为了诊断起见,我还在if (isset($_POST['empid'])) { 之前添加了一些代码行:

    $method = $_SERVER['REQUEST_METHOD'];
    echo $method."<br/>";
    

    应用程序文件是index.php,部署在webroot内的json目录中。

    当我向http://localhost/json 目录(POST/GET)发送任何请求时,Apache 将请求作为 GET 请求重定向到 index.php(在我的 Apache 配置文件中配置)。我想这就是你正在经历的。

    但是当我将请求发送到http://localhost/json/index.php时,请求被准确地接收和处理。

    因此,我会说解决方案是您需要指定php 文件并将empid 参数设置为邮递员正文的一部分(而不是网址的一部分)。

    【讨论】:

    • 但不要忘记SQL注入
    【解决方案5】:

    如果为空if (isset($_POST['empid']) AND ($_POST['empid']) != ""),我认为您也应该检查帖子。让php在else.Sometimes编程变得不可预测之前执行该行。

    【讨论】:

      【解决方案6】:

      在 POSTMAN 中使用if(isset($_REQUEST['empid'])) 进行测试...

      然后使用if(isset($_POST['empid']))直接从app测试...

      看看邮递员https://github.com/postmanlabs/postman-app-support/issues/391中的问题

      【讨论】:

        【解决方案7】:

        要从URL(query string)获取变量的值,您需要使用$_GET$_REQUEST$_POST表示通过@发送到脚本的数据987654326@.

        所以,在你的代码中你只需要这样做:

        $_REQUEST['empid'] 而不是$_POST['empid']

        POST 方法中,数据在与处理脚本的单独通信中作为一个包发送到服务器。通过 POST 方法发送的数据在 URL 中将不可见。

        确认邮递员中的Content-Type 应该是请求标头中的application/x-www-form-urlencoded

        邮递员参考文档: https://www.getpostman.com/docs/requests

        【讨论】:

          【解决方案8】:

          嘿,听起来您只需要向您的数据库发出 GET 请求。

          我们也非常欢迎您通过 GET 请求发送变量。

          获取http://localhost/json?empid=3

          然后您可以像这样从 GET 请求中获取数据$_GET['empid']

          我建议使用 GET 请求,因为我看到您实际上并未将任何数据发布到您的服务器,您只是提交了一个您想要用于查询的变量。

          我确实了解 GET 请求不太安全,但在您的场景中,您的 POST 似乎并不想工作。因此,不同的策略可能对你有好处。

          【讨论】:

            【解决方案9】:

            如果你想从 URL 中获取一个值,你需要使用 $_GET["empid"] 而不是 $_POST["empid"]

            【讨论】:

              【解决方案10】:

              通过POST方式提交表单

              通过表单提交的post方法,我们可以发送数据的数量或长度。密码等敏感信息不会通过 POST 方法暴露在 URL 中,因此我们的登录表单应该使用 POST 方法提交数据。这就是我们在 PHP 中收集 POST 方法提交的数据的方式

              $id=$_POST['id'];

              $password=$_POST['password'];

              收集通过 GET 或 POST 方法提交的数据

              如果页面接收到的数据可以通过 GET 或 POST 中的任何一种方法来,那么如何收集呢?在这里,我们不确定如何收集数据。所以我们会这样使用。

              $id=$_REQUEST['id'];

              $password=$_REQUEST['password'];

              【讨论】:

                【解决方案11】:

                查看您请求的 URL,您在 POST 请求中发送了一个 GET 值。

                http://localhost/json?empid=3
                

                正如您在此处看到的,url 包含 empid 变量,因此它作为 GET 变量 ($_GET) 发送到服务器

                使用$_GET['empid'] 访问此变量,同时使用$_POST 访问其他变量。

                您还可以使用$_REQUEST 通过同一个全局访问GETPOST 数据。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-05-23
                  • 2017-09-16
                  • 2016-02-13
                  • 2014-03-15
                  • 2016-05-03
                  • 1970-01-01
                  相关资源
                  最近更新 更多