Ser*_*rus 1 php mysql forms select
我在数据库表中创建了一个名为"permissions"的列,其值为1表示管理员,2表示常规用户.问题是每当我与普通用户登录时,它都会将我重定向到管理员页面.
<?php
$con=mysql_connect('localhost','root','') or die(mysql_error());
mysql_select_db('user_registration') or die("cannot select DB");
if(isset($_POST["login"])){
if(!empty($_POST['user']) && !empty($_POST['pass'])) {
$user = strip_tags($_POST['user']);
$pass = strip_tags($_POST['pass']);
$query=mysql_query("SELECT * FROM users WHERE username='".$user."' AND password='".$pass."'");
$numrows=mysql_num_rows($query);
$permissions= "SELECT username FROM users WHERE permissions = '1'";
$result=mysql_query($permissions);
if($numrows!=0) {
while($row=mysql_fetch_assoc($query)) {
$dbusername=$row['username'];
$dbpassword=$row['password'];
}
if($user == $dbusername && $pass == $dbpassword) {
session_start();
$_SESSION['sess_user']=$user;
if (mysql_num_rows($result) == 1 ) {
header("Location: fullDB.php");
} else {
header("Location: member.php");
}
}
} else {
echo "Invalid username or password!";
}
} else {
echo "All fields are required!";
}
}
?>
Run Code Online (Sandbox Code Playgroud)
您将所有用户设为管理员,因为您正在执行完全错误的管理员检查:
$permissions= "SELECT username FROM users WHERE permissions = '1'";
Run Code Online (Sandbox Code Playgroud)
此查询不是"此用户是否为管理员".它是"数据库中是否有管理员用户".如果您至少有一个管理员用户,则所有用户将被视为管理员.
由于您已经使用第一个查询获取了用户详细信息,因此第二个查询完全是多余的:
$query=mysql_query("SELECT * FROM users WHERE username='".$user."' AND password='".$pass."'");
$row = mysql_fetch_assoc($query);
if ($row['permissions'] == 1) {
... admin user ...
} else {
... regular peon ...
}
Run Code Online (Sandbox Code Playgroud)
请注意,您无疑容易受到SQL注入攻击,并且正在使用过时/已弃用的数据库库.MySQL的_*()函数应该不使用任何更多.
| 归档时间: |
|
| 查看次数: |
42 次 |
| 最近记录: |