嘿,我正在尝试制作一个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
哪个是对的?
任何帮助将不胜感激, 感谢。
答案 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 - £2 p/m'){
(£
为HTML中的£。)
如果这不起作用,字符串的一部分是什么,这使它独一无二? Paid User
或2 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') {