使用PHP验证登录和创建会话
尝试在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
$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!";
}
?>