发布会话数据时未运行标头重定向的问题


Issues with header redirect not running when posting session data

本质上,我有一个打印表单的页面,填写表单,然后用户被重定向到第三方支付页面(数据通过xml请求发送到第三方支付页面)。以下是应该工作的功能:

function redirect_form()
{
  global $pxpay;
  $request = new PxPayRequest();
  $http_host   = getenv("HTTP_HOST");
  $request_uri = getenv("SCRIPT_NAME");
  $server_url  = "http://$http_host";
  #$script_url  = "$server_url/$request_uri"; //using this code before PHP version 4.3.4
  $script_url  = "$server_url$request_uri"; //Using this code after PHP version 4.3.4
  #$script_url = (version_compare(PHP_VERSION, "4.3.4", ">=")) ?"$server_url$request_uri" : "$server_url/$request_uri";
  $MerchantReference = $_REQUEST["Reference"];   
  $StudentName = $_REQUEST["x_name"];
  $Venue = $_REQUEST["x_venue"];
  $Course = $_REQUEST["x_course"];
  $AmountInput = $_REQUEST["x_amount"];
  $Currency = $_REQUEST["x_currency"];
  $Email = $_REQUEST["x_email"];

  #Generate a unique identifier for the transaction
  $TxnId = uniqid("ID");
  #Set PxPay properties
  $request->setMerchantReference($MerchantReference);
  $request->setAmountInput($AmountInput);
  $request->setTxnData1($StudentName);
  $request->setTxnData2($Venue);
  $request->setTxnData3($Course);
  $request->setTxnType("Purchase");
  $request->setCurrencyInput($Currency);
  $request->setEmailAddress($Email);
  $request->setUrlFail($script_url);            # can be a dedicated failure page
  $request->setUrlSuccess($script_url);         # can be a dedicated success page
  $request->setTxnId($TxnId);  
  #The following properties are not used in this case
  # $request->setEnableAddBillCard($EnableAddBillCard);    
  # $request->setBillingId($BillingId);
  # $request->setOpt($Opt);

  #Call makeRequest function to obtain input XML
  $request_string = $pxpay->makeRequest($request);
  #Obtain output XML
  $response = new MifMessage($request_string);
  #Parse output XML
  $url = $response->get_element_text("URI");
  $valid = $response->get_attribute("valid");
   #Redirect to payment page
   header("Location: ".$url);
}

当使用$_REQUEST时,该表单在示例代码中非常有效,如果我注释掉定义每个变量的部分,则该表单会完美发送——每个变量也是一个字符串。

我已经完成了将变量定义为纯文本的测试,它仍然有效。

此函数由以下人员调用:

if (isset($_POST['StudentName'])) { redirect_form(); }

问题是,页面只是转到一个空白页面——它应该转到付款页面。

如有任何建议,我们将不胜感激。

编辑:-PHP错误报告显示:

Warning: Cannot modify header information - headers already sent by (output started at /home/becky/public_html/paymentconfirmation.php:244) in /home/becky/public_html/paymentconfirmation.php on line 288

244行为:

  $MerchantReference = $_REQUEST["Reference"];  

第288行是标题调用:

header("Location: ".$url);

我不明白的是,只有在已经开始填写表格(我需要)的情况下,才会出现这个问题。如果你在这个页面上开始你的会话,没有问题。

如果这是一个简单的问题,请原谅我-我试图找到一个类似的问题,该问题已经解决,但在

中遇到了困难

调用函数的脚本似乎是页面的一部分,其中页眉和输出已经发送到浏览器。

如果使用输出缓冲,则只能在之后修改标头。你收到的错误告诉我你不是。

<?php
/*
 * Establish output buffer, build output string
 */
ob_start();

/* (YOUR ENTIRE SCRIPT / PAGE GOES HERE) */

/*
 * Send output and flush the buffer
 */
ob_end_flush();
?>