密码/用户名将无法使用php / mysql

时间:2012-08-13 04:52:37

标签: php mysql content-management-system

我正在尝试使用PHP和MYSQL创建一个非常简单的CMS。我遇到的问题是,每当我尝试登录时,如果我输入错误的用户名,我想要发生的事情发生。它进入一个显示错误输入的屏幕,并有一个返回登录页面的链接。但是,如果我输入正确的用户名和错误的密码,它只是重新加载页面,如果我输入正确的密码,就会出现相同的屏幕,好像我输入了错误的用户名,告诉我用户名或密码错误。我已经检查了数据库,以确保我输入的密码是正确的,用户名和密码都正确但它不起作用。任何人都可以帮我解决这个问题吗?提前谢谢

以下是您可能需要查看的功能:

function verifyUser($name, $pass)
{
// Escape strings
$username = mysql_real_escape_string($name);
$password - mysql_real_escape_string($pass);

$result = mysql_query("select * from users where username='$username' and       password-'$password' limit 1");

if (mysql_fetch_array($result))
{
    return true;
} else{
    return false;
}

}

function validateUser($name, $pass)
{
    $check = verifyUser($name, md5($pass));

    if($check)
    {
        $_SESSION['status'] = 'authorized';

        header('Location: http://localhost/cms/admin/index.php');

    } else{

        echo'Please enter a correct username and password <br />';
        echo "<a href='http://localhost/cms/admin/login.php'>Try Again?</a>";
        exit;
    }



}

这是login.php文件:     

require_once '../functions.php';

connect();

if($_POST['username'] && $_POST['password'])
{
$result = validateUser($_POST['username'], $_POST['password']);
}


?>

<form method="post" action="">
<p>
    <label for="name">Username: </label>
    <input type="text" name="username" />
</p>

<p>
    <label for="password">Password: </label>
    <input type="password" name="password" />
</p>

<p>
    <input type="submit" id="submit" value="Login" name="submit" />
</p>
</form>

我收到一条通知:未定义的索引:第14行的C:\ xampp \ htdocs \ cms \ admin \ login.php中的用户名

4 个答案:

答案 0 :(得分:1)

尝试在成功登录尝试后die();行之后添加header('Location: ...');

要更正未定义的索引错误,请在login.php中更改:

if( isset($_POST['username']) && isset($_POST['password']) )

此外,您的查询中有错误。减号应该是一个等号(你有password-'$password'。除非你需要捕获用户数据,否则你应该尝试计算结果,而不是抓取它们。

$result = mysql_query("select * from users where username='$username' and       password='$password' limit 1");

if ( mysql_num_rows( $result ) > 0 )

答案 1 :(得分:0)

阅读mysql_fetch_array

基本上,行if (mysql_fetch_array($result))就是问题所在。它不一定像if / else期望的布尔答案。相反,它要么返回资源,要么返回FALSE。因此,$check永远不会被赋予true的价值。

此外,但重要的是,您正在使用的功能已被弃用。阅读MySQLiPDO_MySQL

答案 2 :(得分:0)

这可能是微不足道的但请注意,在密码变量之后你有' - '而不是'=',两次

    $password - mysql_real_escape_string($pass);

$result = mysql_query("select * from users where username='$username' and       password-'$password' limit 1");

答案 3 :(得分:0)

使用正确的查询

$result = mysql_query("select * from users where username='{$username}'
 AND password='{$password}' limit 1");
if($result){
return true;
}else{
return false;
}

并使用

if(isset($_POST["username"]) && isset($_POST["password"])){
$check=verifyuser($_POST["username"],sha1($_POST["password"]));//sha1 is more secure than md5
}