使用PHP验证登录和创建会话

使用PHP验证登录和创建会话,php,session,Php,Session,尝试在PHP中验证登录,但没有完全掌握其中的诀窍。此代码的问题是,即使登录无效且与数据库中的数据不匹配,它仍会将它们登录。底部的重定向代码工作正常。有什么想法吗 代码: $result = mysql_query("SELECT * FROM user WHERE username='" . $_POST["username"] . "' and password = '" . $_POST["password"] . "'"); $row = mysql_fetch_array($resul

尝试在PHP中验证登录,但没有完全掌握其中的诀窍。此代码的问题是,即使登录无效且与数据库中的数据不匹配,它仍会将它们登录。底部的重定向代码工作正常。有什么想法吗

代码:

$result = mysql_query("SELECT * FROM user WHERE username='" . $_POST["username"] . "' and password = '" . $_POST["password"] . "'");

$row = mysql_fetch_array($result);
if (is_array($row)) {
    $_SESSION["user_id"] = $row[user_id];
    $_SESSION["user_name"] = $row[username];
} else {
    echo = "Invalid Username or Password!";
}

if ($_SESSION["user_name"] == 'ADMIN') {
    header("Location: admin.php");
} else {
    header("Location: useroptions.php");
}
试试这个

 $result = mysql_query("SELECT * FROM user WHERE username='" . $_POST["username"] . "' and password = '". $_POST["password"]."'");

$row  = mysql_fetch_array($result);
if(is_array($row)) {
$_SESSION["user_id"] = $row[user_id];
$_SESSION["user_name"] = $row[username];
} 

else {
echo "Invalid Username or Password!";
exit(); 
}

if($_SESSION["user_name"] == 'ADMIN'){
header("Location: admin.php");
exit(); 
}
else {
header("Location: useroptions.php");
exit();
}

现在您的登录将有效您的数据与数据库不匹配,因为您有一个小空间username='“$\u POST[“username”]”和password='“$\u POST[“password”]” 现在试试

  $result = mysql_query("SELECT * FROM user WHERE username='".$_POST["username"]."' and password = '".$_POST["password"]."'");

    $row  = mysql_fetch_array($result);
    if(is_array($row)) {
    $_SESSION["user_id"] = $row[user_id];
    $_SESSION["user_name"] = $row[username];
    } 

    else {
    $message = "Invalid Username or Password!";
    }

    if($_SESSION["user_name"] == 'ADMIN'){
    header("Location: admin.php");
    }
    else {
    header("Location: useroptions.php");
    }

看起来您可能有一些逻辑问题,请尝试以下操作:

<?php
session_start();

$sql = "SELECT * FROM user WHERE username='" . $_POST["username"] . "' and password = '" . $_POST["password"] . "'";
$query = mysql_query($sql);
$count = mysql_num_rows($query);

if($count === 1)
{
    $row = mysql_fetch_assoc($query);
    $_SESSION["user_id"] = $row[user_id];
    $_SESSION["user_name"] = $row[username];

    if($_SESSION["user_name"] == 'ADMIN')
    {
        header("Location: admin.php");
    }
    else
    {
        header("Location: useroptions.php");
    }
}
else
{
    echo = "Invalid Username or Password!";
}
?>

强制PDO/SQL注入blurb
除非用户是管理员,否则最后一个else将始终运行。也许您应该在第一个else1中添加die,那么使用mysqli/pdo而不是mysql呢?2) 用mysql_num_行更改(isarray)怎么样?@user2191572-虽然我很欣赏对mysql_*弃用和SQL注入漏洞的相同观点变得非常烦人,但我认为你的评论实际上不会取得任何效果。提问者很可能根本不知道你在说什么,所以对网站上的其他人来说,这真的只是一个有趣的笑话。我认为适当地解释这些事情是值得的,这样提问者才能了解他们的错误,而不是得到一个低俗的笑声,尽管你的评论很有趣:P@Hecksa哈哈,谢谢!我很高兴你喜欢它,但它确实让我想知道,如果手册中的大红色标志不能阻止人们,那么
强制性宣传语到底应该如何帮助人们。我认为整个页面应该是红色的,用户需要先登录,然后才能查看内容。
<?php
session_start();

$sql = "SELECT * FROM user WHERE username='" . $_POST["username"] . "' and password = '" . $_POST["password"] . "'";
$query = mysql_query($sql);
$count = mysql_num_rows($query);

if($count === 1)
{
    $row = mysql_fetch_assoc($query);
    $_SESSION["user_id"] = $row[user_id];
    $_SESSION["user_name"] = $row[username];

    if($_SESSION["user_name"] == 'ADMIN')
    {
        header("Location: admin.php");
    }
    else
    {
        header("Location: useroptions.php");
    }
}
else
{
    echo = "Invalid Username or Password!";
}
?>