无法在php

时间:2016-02-29 18:28:51

标签: php mysql

我有一份注册表格和登录表格。我在我的注册表单中使用了md5加密,它工作正常。但是,当我尝试使用真实密码(如123)登录时,它并没有登录我。另一方面,当我在密码字段中复制粘贴md5加密时,它就会登录我。请帮我解决这个问题!谢谢!

这是我的编码:

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

            $user_name = $_POST['username'];
            $user_email = $_POST['email'];
            $user_pass = $_POST['password'];

            $query = "SELECT * FROM users where Email = '" . $_POST["email"] . "'";
            $result = $obj->run_query($query);

            if ($count = mysqli_num_rows($result) == 0) {

                $query = "INSERT INTO users (Name,Email,Pass) VALUES ('$user_name','$user_email', md5('$user_pass'))";
                $result = $obj->run_query($query);

                echo "<script>alert('You have successfully Registered!')</script>";
                echo "<script>window.open('welcome.php','_self')</script>";

            } else {

                echo "<script>alert('This user email $user_email is already exist!')</script>";
            }
        }

    // login script
    if (isset($_POST['login'])) {

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

        $query = "SELECT * FROM users WHERE Email = '$email' AND Pass = '$password'";
        $result = $obj->run_query($query);

        if ($count = mysqli_num_rows($result) > 0) {

            $_SESSION['email'] = $email;
            $_SESSION['name'] = $name;

            echo "<script>window.open('welcome.php','_self')</script>";



        }
        else 
        {
            echo "<script>alert('Your email or password is incorrect!')</script>";
        }
    }

?>   

1 个答案:

答案 0 :(得分:3)

如前所述:您要将POST数组$password = $_POST['pass'];中的纯文本与表格中的MD5进行比较。

那应该是$password = md5($_POST['pass']);

我还说过你不应该使用 “ever” 。如果它是一个现场网站,我建议你暂停,直到你使用“本世纪”的安全散列函数。

MD5已有30多年历史,现在不再被认为可以安全地使用哈希/存储密码。

请参阅以下内容:

<强>密码

使用以下其中一项:

其他链接:

关于列长的重要说明:

如果您决定使用password_hash()或隐藏,请务必注意,如果您当前的密码列的长度低于60,则需要将其更改为(或更高)。手册建议长度为255。

您需要更改列的长度并重新开始使用新哈希才能使其生效。否则,MySQL将无声地失败。

您现在的代码也向SQL injection开放。使用mysqli with prepared statementsPDO with prepared statements