【问题标题】:PHP Header location in IF statementIF 语句中的 PHP 标头位置
【发布时间】:2011-06-01 19:05:55
【问题描述】:

我正在尝试编写此脚本来说明电子邮件是否有效插入数据库并重定向,否则重定向错误消息只有我的重定向不起作用,我对 php 不是非常好并且仍在阅读主题所以我很感激任何建议,提前谢谢!

<?php

$userid = $usersClass->userID();
$user_email=$_POST['email_upd'];

if(!filter_var($user_email, FILTER_VALIDATE_EMAIL))
{
header('Location: http://www.mysite.co.uk/mytwitter.php?msg=invalid');
}
else
{
mysql_query(" UPDATE produgg_users SET email='$user_email' where produgg_users.id = ".$usersClass->userID()) or die(mysql_error());
header('Location: http://www.mysite.co.uk/mytwitter.php?msg=success');
}

?>

抱歉没有描述哪里出了问题,发生的事情是我的页面没有重定向回页眉(位置)中的页面

我现在启用了错误报告,但我仍然只看到一个白页,这是我的整个页面代码。

<?php 

error_reporting(E_ALL);
require 'config.inc.php'; 


?>

<?php

$userid = $usersClass->userID();
$user_email=$_POST['email_upd'];

if(!filter_var($user_email, FILTER_VALIDATE_EMAIL))
    {
    header('Location: http://www..co.uk/mytwitter.php?msg=invalid');
    }
else
    {
    mysql_query(" UPDATE produgg_users SET email='$user_email' where produgg_users.id = ".$usersClass->userID()) or die(mysql_error());
    header('Location: http://www..co.uk/mytwitter.php?msg=success');
    }

?>

【问题讨论】:

  • 不是您问题的答案,但您需要在标头重定向后始终使用die(),并且您的代码容易受到SQL injection的攻击
  • 不过,您应该描述到底出了什么问题。
  • 嗨 Pekka,我知道它目前容易受到注入攻击,我正在阅读我计划稍后整合的那一刻,或者这不是处理事情的最佳方式?
  • 请详细说明“我的重定向不起作用”。发生了什么?有任何错误信息吗?如果没有,将error_reporting 设置为E_ALL 并将display_errors 设置为1
  • @Liam:改造 SQL 注入预防很难 - 你可能会忘记一些东西,你将不得不重新测试一切。尽快考虑从直接查询 (mysql_*) 转向 PDO 和参数化查询。

标签: php


【解决方案1】:

这应该可以,但是请确保在标头方法之前没有任何代码,当我说代码时,我的意思是从任何其他文件中的 php 或 HTML 标记输出,这需要首先执行, 但您还需要确保重定向后的代码未执行,并使用 exit;

header(....
exit;

【讨论】:

  • 这应该真的可以,但是检查其他浏览器,我知道ff上的一些插件可以禁用页面重定向...
【解决方案2】:

您能发布您的完整脚本吗? Senad 说的是真的:如果您的脚本将 anything 写入输出缓冲区,则任何 header();不会再工作了。根据您提供的代码,没有任何内容写入输出缓冲区(除非您遇到 mysql 错误,您没有告诉我们,我认为情况并非如此)。

另外,无需使用 .仅供参考。

【讨论】:

    【解决方案3】:

    我设法使用以下代码使其工作,我已经根据我所阅读的有关 SQL 注入的内容对其进行了重写,并且工作正常,我将不胜感激任何关于此的建议,谢谢!

    <?php 
    
    require 'config.inc.php'; 
    
    $userid = $usersClass->userID();
    $user_email=mysql_real_escape_string($_POST['email_upd']);
    
    if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $user_email)) 
    { 
        mysql_query(" UPDATE produgg_users SET email='$user_email' where produgg_users.id = ".$usersClass->userID()) or die(mysql_error());
        echo "<meta http-equiv=\"refresh\" content=\"0;URL=/mytwitter.php?msg=email updated\">";
    } 
    else 
    { 
        echo "<meta http-equiv=\"refresh\" content=\"0;URL=/mytwitter.php?msg=email error\">";
    } 
    
    ?>
    

    【讨论】:

      猜你喜欢
      • 2016-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-15
      • 1970-01-01
      • 2021-04-26
      • 1970-01-01
      相关资源
      最近更新 更多