使用'include'将用户重定向到另一个PHP文件是不对的?

时间:2014-04-27 12:33:07

标签: php redirect php-include

我创建了一个HTML登录表单,用于检查电子邮件和密码身份验证,然后重定向到用户帐户。

我的PHP代码如下:

 <?php  

 require('connect.php');//for connection to the database.


$email = $_POST['email'];
$password = $_POST['password'];

$query = "SELECT * FROM `account` WHERE pemail='$email' and password='$password'";

$result1 = mysql_query($query) or die(mysql_error());
$usercount = mysql_num_rows($result1);




if ($usercount == 1){
include 'myaccount.php';
}


else{

echo "Invalid Details.";
echo "<a href='login.php'>Back to Login</a>";
}

在这里,我尝试include重定向到用户帐户...并且工作正常。

虽然我的导师告诉我使用include是错误的,你应该用另一种方式实现它。

使用include重定向到用户帐户的原因是什么?我搜索了它,但我没有找到答案。

请不要劝阻......提前谢谢。

2 个答案:

答案 0 :(得分:1)

是的,你的导师是对的。 include()用于包含PHP代码,而不是用于重定向。 header()函数执行此操作,因此请使用它。使用include() 工作,但这并不意味着您应该使用它。

为什么不使用include

  • include()是一个“包含”来自不同文件的代码的函数。它从文件加载并执行代码,并不是专门为重定向而构建的。另一方面,header()的唯一目的是发送原始HTTP标头,即执行重定向等。请改用它。

  • 如果您在用于重定向的文件中有多行代码,include()将在每次执行重定向时完全执行。如果您的应用程序大量使用重定向,这将意味着性能损失并导致应用程序滞后。此外,如果您使用include(),则会不必要地执行多行代码。如果您使用header(),则可以避免此问题。 (在exit()之后立即致电header()。)

代码中存在更多问题:

  • 您正在使用mysql_*个功能。不推荐使用ext/mysql扩展名,不应使用该扩展名。请改用MySQLiPDO

  • 您盲目地将用户输入注入数据库查询,从而使其易受SQL injection攻击。具有恶意意图的用户在技术上可能会造成麻烦,甚至完全删除您的数据库。将PDO / MySQLi与prepared statements一起使用可以防止这种情况发生。有关如何使用的详细信息,请参阅this question

答案 1 :(得分:0)

试试这个

    if ($usercount == 1) {
        $redirect_url = "";//here goes your url where you want to redirect the user to
        header("Location: " . $redirect);
        exit();
    }

您还应该查看MySqliPDO