-1

我创建了一个 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重定向到用户帐户是错误的?我搜索了它,但没有找到答案。

请不要气馁...在此先感谢。

4

2 回答 2

1

是的,你的导师是对的。include()用于包含 PHP 代码,而不是用于重定向。header()函数就是这样做的,所以使用它。使用include() works,但这并不意味着您应该使用它。

为什么不应该使用include

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

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

您的代码中存在更多问题:

  • 你正在使用mysql_*函数。该ext/mysql扩展已弃用,不应使用。请改用MySQLiPDO

  • 您盲目地将用户输入注入到数据库查询中,从而使其容易受到SQL 注入的攻击。有恶意的用户在技术上可能会造成麻烦,甚至完全删除您的数据库。使用 PDO / MySQLi 和准备好的语句来防止这种情况发生。有关如何操作的更多详细信息,请参阅此问题

于 2014-04-27T12:37:56.480 回答
0

尝试这个

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

您还应该调查MySqliPDO

于 2014-04-27T12:41:16.920 回答