0

我是 PHP 新手,正在创建一个简单的登录和预订系统。我一直在验证登录页面。它应该将用户重定向到用户菜单或管理菜单,但由于某种原因,即使密码正确,它总是返回“密码错误,请重试。单击此处登录”。问题是什么?


checkLogin1.php

<?php
// Connects to your Database 
mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("maxizoo") or die(mysql_error());
//Checks if there is a login cookie
if (isset($_COOKIE['ID_my_site'])) {
//if there is, it logs you in and directes you to the members page
    $uid = $_COOKIE['ID_my_site'];
    $pass = $_COOKIE['Key_my_site'];
    $check = mysql_query("SELECT * FROM registrants WHERE userid = '$uid'") or die(mysql_error());
    while ($info = mysql_fetch_array($check)) {
        if ($pass != $info['password']) {

        } else {
            if ($info['admin'] == '1') { // check the value of the 'admin' in the db
                //go to admin area
                header("Location: adminMenu.php");
            } else {
                //go to members area
                header("Location: studentMenu.php");
            }
        }
    }
}
//if the login form is submitted 
if (isset($_POST['submit'])) { // if form has been submitted
    // makes sure they filled it in
    if (!$_POST['uid'] | !$_POST['pass']) {
        die('You did not fill in a required field.');
    }
    // checks it against the database
    if (!get_magic_quotes_gpc()) {

    }
    $check = mysql_query("SELECT * FROM registrants WHERE userid = '" . $_POST['uid'] . "'") or die(mysql_error());
    //Gives error if user dosen't exist
    $check2 = mysql_num_rows($check);
    if ($check2 == 0) {
        die('That user does not exist in our database. <a href=registration.php>Click Here to Register</a>');
    }
    while ($info = mysql_fetch_array($check)) {
        $_POST['pass'] = stripslashes($_POST['pass']);
        $info['password'] = stripslashes($info['password']);
        $_POST['pass'] = md5($_POST['pass']);
        //gives error if the password is wrong
        if ($_POST['pass'] != $info['password']) {
            die('Incorrect password, please try again. <a href=login.php>Click Here to Log In</a>');
        } else {
            // if login is ok then we add a cookie 
            $_POST['uid'] = stripslashes($_POST['uid']);
            $hour = time() + 3600;
            setcookie(ID_my_site, $_POST['uid'], $hour);
            setcookie(Key_my_site, $_POST['pass'], $hour);
            //then redirect them to the members area 
            header("Location: studenMenu.php");
        }
    }
} else {
    // if they are not logged in 
    ?> 
    <form action="checkLogin1.php" method="post"> 
        <table border='1' cellpadding='5' cellspacing='0' bordercolor='#FF9900' bgcolor="#CCFFFF"> 
            <tr><td colspan=2><h1>Login</h1></td></tr> 
            <tr><td>User ID:</td><td> 
                    <input type="text" name="uid" maxlength="40"> 
                </td></tr> 
            <tr><td>Password:</td><td> 
                    <input type="password" name="pass" maxlength="50"> 
                </td></tr> 
            <tr><td colspan="2" align="right"> 
                    <input type="submit" name="submit" value="Login"> 
                </td></tr> 
        </table> 
        <br />
        <a href="/hrd/orig/registration.php">Register Here</a>
    </form> 
    <?php
}
?>
4

2 回答 2

0

如果数据库表中的用户有未散列的密码,那么每次将这些密码与 MD5 版本进行比较都会失败。在您的注册逻辑中,以下应该是您需要的(大致):

...
$p = md5($_POST['newpassword']);
$q = "INSERT INTO registrants (userid, password) VALUES ('" 
        . $_POST['userid'] . "', '" . $p . "')";
// Execute query as normal
...
于 2013-05-01T12:48:42.437 回答
0

我认为是这样的:

$check = mysql_query("SELECT * FROM registrants WHERE userid = '$uid'")or die(mysql_error());

它只是查找 '$uid' 的 userId 而不是值。尝试这个:

$check = mysql_query("SELECT * FROM registrants WHERE userid = '".$uid."'")or die(mysql_error());

这应该够了吧!

于 2013-05-01T12:24:19.097 回答