错误的电子邮件密码

时间:2016-01-25 18:22:51

标签: php

错误的电子邮件和密码"当我错误地填写表单时,消息不会显示。

我的代码开头有ob_start(); - 这会导致什么吗?如果我删除ob_start();,则会出现以下错误:

  

无法修改标题信息

我该如何解决这个问题?

<?php
if (isset($_POST['login'])) {

    $email = $password = $error = "";
    $email = $_POST['email'];
    $password = md5($_POST['password']);

    if (empty($email) || empty($password)) {
        $error = "Please enter your Email and Password!";
    } else {
        $sql = "SELECT * FROM tbl_users WHERE email='$email' && password='$password'";
        $res = mysql_query($sql);
        $user = mysql_num_rows($res);

        if ($user['blocked'] == 'YES') {
            $error = "Your Account has been blocked. Please contact us for more info";
        } else {
            if ($user == 1) {
                $_SESSION['current_user'] = $email;
                header("Location: edit_profile.php");
                exit();
            } else {
                $error = "Wrong Email and Password";
            }
        }

    }
}
?>

1 个答案:

答案 0 :(得分:0)

ob_start()打开输出缓冲;在您明确检索输出缓冲区的内容并停止缓冲(例如,使用ob_end_clean()或类似功能)之前,屏幕上不会显示任何内容。你还没有这样做,所以即使你使用了echo,也没有得到任何输出。

您需要像这样调整if / else块:

        if ($user == 1) {
            $_SESSION['current_user'] = $email;
            header("Location: edit_profile.php");
            exit();
        } else {
            ob_end_clean(); // add this line
            $error = "Wrong Email and Password";
        }

此外,您的代码有几个大问题:

  • don't use mysql_*; mysql_*函数已过时,deprecated且不安全。请改用MySQLiPDO
  • 您对SQL injection持开放态度。现在,即使没有适当的权限,以管理员身份登录也是微不足道的。
  • 您正在使用不安全且损坏的MD5来哈希密码。不要这样做。使用像bcrypt这样安全的现代化图书馆。