存在多个表时最有效的登录方式

时间:2012-12-13 03:12:15

标签: php mysql login registration

我使用的是教师注册表和学生注册表。每个都有十个字段,名字,姓氏,用户名,密码等相似,而部门(教师有7个,学生有3个)和电子邮件ID(教师有不同的域名扩展,学生不同)是不同的。我使用两张桌子,一张用于教师,一张用于学生。

现在,我知道我可以使用一个登录表单,使用JOIN属性查询这两个表并使它们登录。但我想知道这种方法是否有效,因为正在使用两个表。

或者这种方法效率更高:在注册表格中,我选择了一个单选按钮来选择教师或学生,并根据所选择的其余字段进行更改,即,如果我选择了教师,则有7个部门出现或者如果我选择学生只有3人出现。通过这种方式,我只能使用一个表,至少我猜是这样。

或者另一种可能性是我使用两个表但只有两个登录表单,一个用于教师,一个用于学生,我知道这是一个简单的方法,但作为一个Comp Sci学生我想选择有效的方法。

P.S:教师的角色将与网站上的学生完全不同。教师和学生将会有很多活动,他们完全不同。维持一张桌子是不错的选择?

1 个答案:

答案 0 :(得分:1)

我会说教师和学生都是用户,但教师拥有更高的权限,就像管理员一样。

因此,我只会为users使用1个表,并且有一个属性列来指示它们的类型。

登录后,您可以向页面返回一个类型变量,以确定要显示的字段。

你甚至不需要一个单选按钮来指示类型。只需要一个用户名和密码字段。然后,一旦对它们进行身份验证,请检索type属性并相应地加载表单。

您的PHP页面可能如下所示:

<?php
    if(isset($_POST['username'])) {
        $user = $_POST['username'];
        $password = $_POST['password'];
        $mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');

        $query = "SELECT * FROM tblUser WHERE userid=" . $user;

        //Execute SQL
        if($mysqli->query($query) === TRUE) {
            if ($password == $row['password']) {
                $userType = $row['type'];
                $mysqli->close();
                echo $userType;
            else { echo "incorrect password"; }

        } else { echo "SQL execution error"; }
    } else { 
        echo "invalid username string"; 
    }
?>