php - php 区分管理员和用户

标签 php mysql

我正在创建一个网站,用户可以登录购买书籍并从商店取书。我有一个登录屏幕,普通用户和工作人员都可以使用它来登录。然而,我试图找到一种方法来区分普通用户和员工。

我有一个名为“users”的表,其中一列称为“account_type”,它可以保存普通用户的值 U 和管理员的值 A。

这是我目前拥有的代码:

<?php
session_start(); // Starting Session
include_once('config.php');

$error=''; // Variable To Store Error Message
if (isset($_POST['submit'])) {
if (empty($_POST['user']) || empty($_POST['pass'])) {
$error = "Please complete both fields";
}
else
{
// Define $username and $password
$user=$_POST['user'];
$_SESSION['login_user']=$user;
$pass=md5($_POST['pass']);
// To protect MySQL injection for Security purpose
$user = stripslashes($user);
$pass = stripslashes($pass);
$user = mysqli_real_escape_string($mysqli, $user);
$pass = mysqli_real_escape_string($mysqli, $pass);
// SQL query to fetch information of registered users and finds user match.
$query = mysqli_query($mysqli, "SELECT * FROM users where Username='$user' AND Password='$pass'");
$rows = mysqli_num_rows($query);
if ($rows == 1) {
header("location: home.php"); // Redirecting To Other Page
}elseif ($rows["account_type"] == "A"){
header ("location: adminHome.php");
}else {
$error = "Username or Password is invalid";
}
mysqli_close($mysqli); // Closing mysqlinection
}
}
?>

<!doctype html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="style/style.css"> 
<script type="text/javascript" src="//code.jquery.com/jquery-2.1.3.min.js"></script>
<title>Login</title>

</head>
<body>

<div id = "logReg">
<span href="#" class="button" id="toggle-login">Log in</span> 
</div>

<div id="login">
  <div id="triangle"></div>
  <h1>Log in</h1>
  <form action = "" id = "logregform" method = "POST">
    <p id = "err"> <?php if(isset($error)) {echo $error;} ?> </p>
    <input id = "logtxt" type="text" placeholder="Username" name = "user" required/>
    <input type="password" placeholder="Password" name = "pass" required/>
    <input type="submit" value="Log in" name = "submit" />
    <br>
    <br>
    <p id ="bklg">Dont have an account? <a href="register.php">Sign up</a></p> 
  </form>
</div>
<script>

$('#toggle-login').click(function(){
  $('#login').slideToggle('fast'); 
});
</script>
</html>

第 24-30 行是我放置支票的地方,但它似乎不起作用。 当我尝试管理员登录详细信息并说“用户名或密码无效”时,我没有收到任何错误,它只是跳到验证部分,但是它确实以普通用户身份登录。

有什么想法吗?

最佳答案

$rows = mysqli_num_rows($query);
if ($rows == 1) {
header("location: home.php"); // Redirecting To Other Page
}elseif ($rows["account_type"] == "A"){
...
}

仔细看看这个。您正在使用 mysqli_num_rows 设置 $rows ,它不会是一个数组,而应该只是一个整数。您需要使用 fetch 函数来获取列数据。提取将使用 MySQLi 语句变量运行(在您的情况下为 mysqli_query 或 $query 的返回值。在此处阅读有关提取的更多信息:http://php.net/manual/en/mysqli-stmt.fetch.php

附注你的代码有点乱。你使用stripslashes然后真正的转义,为什么不使用准备好的语句呢?它们更安全、更高效,因为它们让 DBMS (MySQL) 处理变量。在这里阅读有关准备好的语句的更多信息:http://php.net/manual/en/mysqli.prepare.php

关于php - php 区分管理员和用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29062361/

相关文章:

php - 运行2条sql语句2个不同的表

php - 准备好的语句中的 MySQL/PHP : How can we bind a parameter to both (? )s?

php - 如何从2个单独的SQL表中选择最新日期?

Wordpress 中响应式菜单的 Javascript

php - orWhere vs Where Laravel 5.1

MySQL/SQL 防止删除在另一个表中使用的记录

c# - 在 C# 中用于 MySQL 的 MARS

java - MySql查询异常

mysql - 如何在 Excel CSV 中保留日期和引号的 SQL 格式?

mysql - 消除 Rails 中 HasMany 关系中的联接表