无法在php中的post方法中读取数据

时间:2016-02-08 10:04:31

标签: php

付款成功后,页面将数据发布到我的服务器页面。我只能通过

读取数据
foreach($_POST as $key => $value)
  {
   file_put_contents($filename, "$key: $value\n", FILE_APPEND);        
  }

这个php代码并写入文本文件 但不要通过普通的变量获得任何数据。

例如,如果我通过$ _POST [' status']调用,则通过发布数据发送的状态密钥我没有通过它获得任何价值。

所以这里发生的事情我是出于想法。 所以请在这里指导我获取发布数据。

文档定义数据发送方法和加密类型在application / x-www-form-urlencoded

我的php文件代码将帖子数据重定向到

<?php
  session_start();


echo "post Data:"; print_r($_POST);   //Nothing Show


$filename = "webhook_data2.txt";

foreach($_POST as $key => $value)

{

    file_put_contents($filename, "$key: $value\n", FILE_APPEND);


}

file_put_contents($filename, "----------\n", FILE_APPEND);

?>

此文件的工作和输出如下:

buyer_name: xxxx xxxxx xxxxx
offer_slug: xxxx xxxxxx xxxxx
currency: INR
custom_fields: {"Field_42842": {"value": "xxxxx@xxxx.org", "required": "on", "type": "char", "label": "Email Mentioned on the Form"}, "Field_85492": {"value": "XXX XXX XXX", "required": "on", "type": "char", "label": "Student Name"}}
status: Credit
quantity: 1
variants: []
payment_id: MXXXXXXXXXXXX
buyer: xxxxx@xxxx.org
amount: xxxx.00
fees: 0.xx
buyer_phone: ############
offer_title: ###### #### #########
mac: ******************
unit_price: ##.00

2 个答案:

答案 0 :(得分:0)

检查帖子是否发送

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $data = '';
    foreach($_POST as $key => $value) {
          $data .= "$key: $value" . PHP_EOL; 
    }
    //write data
    file_put_contents($filename, $data);  
} else {
    die('POST REQUEST IS NOT SEND');
}
  1. 获取数据然后将其写入文件一次比循环写入更快。
  2. 如果帖子不是请求类型(不是发送),那么它将失败,它将显示&#39;帖子请求未发送&#39;
  3. 如果出现2,请检查您的表单方法是否设置为 POST 且操作网址是否正确。
  4. 此外,如果您的POST数据是原始的,那么您可以从名为php://input的流中读取它,其中包含从流中读取的函数

    file_get_contents(`php://input`);
    

    阅读RAW帖子并保存,您可以使用下面的代码

    file_put_contents($filename, file_get_contents(`php://input`));  
    

    如果您的请求是RAW格式,例如JSON / XML,则无法自动映射到$ _POST,您需要自己解码输入,例如,如果是json,则使用json_decode,如果是xml则你可以使用DOM或simplexml。来自手册:

    $_POST

      

    当使用application / x-www-form-urlencoded或multipart / form-data作为请求中的HTTP Content-Type时,通过HTTP POST方法传递给当前脚本的关联变量数组。

答案 1 :(得分:0)

实际上,由于各种原因,有时$ _POST是空的。当这种情况发生在我身上时,总是可以阅读php://input 比如$postdata = file_get_contents("php://input");

$ postdata现在是json-string,您可以将其转换为如下数组:

$arr = json_decode($postdata, true);

然后你应该能够做到:

foreach($arr as $key => $value) { file_put_contents($filename, "$key: $value\n", FILE_APPEND);
}