PHP登录-使用SQL语句检测用户类型

标签 php mysql database authentication

基本上我想做的是创建一个登录系统,其中有两种不同类型的用户。每个用户都有一个 ID、用户名、密码和角色。角色决定了他们是讲师还是学生(总体上将决定给出的观点)。我让登录正常工作,用户可以登录并访问名为 welcome.php 的页面。当讲师登录时,我需要一个包含文件/lecturer.php 来打开,当学生登录时,我需要一个名为/student.php 的文件来打开。下面是我的代码:

//表格//

CREATE TABLE `admin` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(30) DEFAULT NULL,
  `passcode` varchar(30) DEFAULT NULL,
  `role` varchar(3) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

//PHP//

<?php

include("config.php");
session_start();

if($_SERVER["REQUEST_METHOD"] == "POST")
{
// username and password sent from form 

$myusername=addslashes($_POST['username']); 
$mypassword=addslashes($_POST['password']); 


$sql="SELECT id FROM admin WHERE username='$myusername' and passcode='$mypassword'";


$result=mysql_query($sql);
$row=mysql_fetch_array($result);
$active=$row['active'];

$count=mysql_num_rows($result);


// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1)
    {
        session_register("myusername");
    $_SESSION['login_user']=$myusername;

        header("location: welcome.php");
    }
    else 
        {
        $error="Your Login Name or Password is invalid";
    }
}
?>

提前感谢您的帮助

最佳答案

首先 - 请不要再使用 mysql_* 函数 - 它们已被正式弃用 - 查看 php.net 网站上的红框

你可以使用的替代品是 mysqliPDO,它们非常相似,如果你觉得更舒服的话,它们甚至都有过程调用,尽管我推荐客观的方法。

其次 - 使用适当的转义。请看http://php.net/manual/en/mysqli.quickstart.prepared-statements.php有关可防止您易受攻击的 SQL 注入(inject)的准备语句的信息。 (对于 PDO:http://php.net/manual/en/pdo.prepared-statements.php)

第三个 - 您问题的解决方案,将“角色”列添加到您的陈述中,如果在下面显示,则添加一个附加项

if($row["role"] == "lecturer") {
    include_once('lecturer.php');
} else {
    include_once('student.php');
}

关于PHP登录-使用SQL语句检测用户类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20202284/

相关文章:

php - 无法找出简单 PHP/MySQL "Q&A"DB 中的错误

php - 修改Mysql表中的字符串搜索

mysql - 对数据库执行 SQL 查询时出错 'database' : near "GROUP": syntax error

database - 在子查询中获取 Id

java - 将 vector 打印到 JTextArea 时出现间距错误

php - PayPal 不断收到无效的 ipn

php - 在 Laravel 问题中使用多个值绑定(bind)插入查询

java - 如何使用存储过程通过 Java ReSTful Web 服务中的输入参数值来完成更新和创建记录操作

mysql - 数据库错误无效值

php - Symfony - 表单事件 - 获取新旧数据