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

时间:2013-02-19 22:29:25

标签: php xml

基本上我有一个页面打印表格,表格填写 - 然后用户被重定向到第三方付款页面(数据通过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);

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

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

1 个答案:

答案 0 :(得分:0)

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

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

<?php

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


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


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

?>