重定向if语句不起作用

时间:2010-01-18 18:56:20

标签: php redirect

嘿,我正在尝试制作一个if语句,将它们重定向到另一个页面,如果这是真的,那么简单吧?

我不确定为什么这不起作用但我正在使用:

if ($_POST['accounttype']=='Paid User - £2 p/m'){
    $userid = strtolower($_SESSION['X2X2']);
    $getuser = mysql_query("SELECT * FROM XXXXXX WHERE X2X2 = '$userid'");
    $info = mysql_fetch_array($getuser);
    $id = $info['X3X3'];
    mysql_query("UPDATE members SET payment = '" . mysql_real_escape_string("XXXXXXXX"). "' WHERE X3X3 = $id");
    header('Location: http://beta.XXXXX.co.uk/purchase.php');
    mysql_close($con);
}

当我把

<?
echo $_POST['accounttype'];
?>

我回来了

Paid User - £2 p/m

哪个是对的?

任何帮助将不胜感激, 感谢。

5 个答案:

答案 0 :(得分:3)

您希望在if声明的大括号前调用exit()

documentation for header的示例代码如下:

<?php
header("Location: http://www.example.com/"); /* Redirect browser */

/* Make sure that code below does not get executed when we redirect. */
exit;
?>

if语句的结尾位应该是:

mysql_query("UPDATE members SET payment = '" . mysql_real_escape_string("XXXXXXXX"). "' WHERE X3X3 = $id");
mysql_close($con); // do this before sending a redirect header
header('Location: http://beta.XXXXX.co.uk/purchase.php');
exit();

此外,如果您已根据header的文档中的此警告发送任何输出,则header无效:

  

请记住,必须调用header()   在发送任何实际输出之前,   通过普通的HTML标签,空白   文件中的行,或来自PHP。它是一个   用于读取代码的常见错误   include()require(),函数或   另一个文件访问功能,并有   输出的空格或空行   在调用header()之前。相同   使用单个时存在问题   PHP / HTML文件。

答案 1 :(得分:2)

由于它似乎依赖于£,根据$_POST['accounttype']可能具有的值,您有多种可能性。

首先我建议你试试:

if ($_POST['accounttype']=='Paid User - &pound;2 p/m'){

&pound;HTML中的£。) 如果这不起作用,字符串的一部分是什么,这使它独一无二? Paid User2 p/m?如果其中任何一个,只需检查substring就好了:

if (substr($_POST['accounttype'],-5)=='2 p/m'){

if (substr($_POST['accounttype'],0,9)=='Paid User'){

或任何组合(避免£)。

答案 2 :(得分:1)

你有没有机会向浏览器输出内容了吗?如果在使用echo或print语句后修改位置标题,它将发出警告,除非您有详细错误或已启用日志记录,否则您可能看不到警告。

我知道在某些版本的PHP中UTF-8文件会发生这种情况 - 在PHP脚本开始执行之前输出UTF-8文件的字节顺序标记(BOM),这会阻止发送位置标头。

答案 3 :(得分:0)

使用header更改HTTP标头要求尚未发送HTTP标头。这可能是导致它无效的原因之一,因为HTTP标头与脚本的第一个输出一起发送(任何输出包括<?php之前的文本)。

当您将error_reporting设置为 E_ALL 并将display_errors设置为 true 时,PHP会立即显示所有错误。这可以帮助您确定错误原因。

答案 4 :(得分:0)

我的第一个倾向是通过尝试以下方法检查您的POST数据是否有任何额外的字符:

if (trim($_POST['accounttype']) == 'Paid User - £2 p/m') {