成功登录后运行另一个查询

时间:2016-10-02 18:48:05

标签: php mysql session mysqli login

我的登录脚本需要一些帮助。我只是想自学PHP和mysqli并坚持这一点,所以任何建议/帮助将非常感激。

检查登录详细信息的实际部分有效并在找到匹配时将用户指向一个页面,如果不成功则返回登录页面。

我想要发生的是,一旦检查了用户名并且会话集使用会话'user'然后根据会话'member_type'从pupil或instructor表中找到相同的用户。会话'user'被设置为'user_id',它在登录表中是相同的,其余的细节存储在表中,并且是两个表的主键。

<?php 

include_once ("includes/dbconnect.php");
session_start();

$error="";

if ( isset($_POST['btn_signin']) ) {

// username and password received from loginform 
$username=mysqli_real_escape_string($conn,$_POST['username']);
$password=mysqli_real_escape_string($conn,$_POST['user_password']);

$sql_checklogin="SELECT * FROM user_logins WHERE username='$username' and password='$password'";
$result=mysqli_query($conn,$sql_checklogin);
$login=mysqli_fetch_array($result,MYSQLI_ASSOC);
$count=mysqli_num_rows($result);


// If result matched $username and $password, table row must be 1 row
if($count==1)
{
// Set Sessions
$_SESSION['logged_in']=TRUE;
$_SESSION['user']=$login['user_id'];
$_SESSION['member_type']=$login['reg_type'];

} else {
  header("location:login.php");
  $error = "Invalid Username or Password!";
}
}
//This part to be replaced with code that checks both tables to find the user details
if ( isset($_SESSION['member_type'])) {
header("Location:mydashboard.php");
}

?>
//The above code works and allows user to login but sends both member types to same page

刚才这个工作正常,但是我想用这样的东西替换脚本的最后一个IF部分(或者更好的建议?)。

//if ( isset($_SESSION['member_type'])=='pupil' { 
//$sql_findpupil="SELECT * FROM pupils WHERE user_id='$_SESSION['user']'";
//$result=mysqli_query($conn,$sql_findpupil);
//$pupil=mysqli_fetch_array($result,MYSQLI_ASSOC);

我应该在这个部分放置另一个计数功能吗?

//header("location:mydashboard.php");

//}elseif ( isset($_SESSION['member_type'])=='instructor' {
//$sql_findinstructor="SELECT * FROM instructors WHERE user_id='$_SESSION['user']'";
//$result=mysqli_query($conn,$sql_findinstructor);
//$instructor=mysqli_fetch_array($result,$MYSLQI_ASSOC);

在这里?

//header("location:control_panel.php");
//}
//}

正如我所说,我正在尝试在家里教自己一些新技能,所以可能在这里犯了一些基本的男生错误而错过了一些明显的东西

1 个答案:

答案 0 :(得分:0)

isset()检查是否设置了变量,但是您想要检查该值。因此,对于学生和教师来说,if ( isset($_SESSION['member_type']))总是如此。尝试

if ($_SESSION['member_type'] == 'pupil') {
    header("Location:mydashboard.php");
}

代替。

另一个建议是,重构你的数据库设计。最好不要使用包含userIds的教师和学生表,而是使用仅包含两行(pupil / instructor)的userType-Table,然后将userTypeId添加到用户表。并且还将user.userTypeId中的外键添加到userType.id,以确保每个用户都链接到现有的userType。

使用该设计您不需要其他查询,以确定用户是学生还是教师。

相关问题