所以我有两个名为tbl_admin和tbl_users的表。它们中的每一个都有一个名为acct_type的列。 tbl_admin中的所有acct_type值都是1,而tbl_users中的所有值都是0.我知道如果我刚刚为它们创建了一个表,那对我来说很容易。我的问题是,如何查询,以便我可以将管理员重定向到其页面,将用户重定向到其页面。
这是我的代码
$uname = $_POST['txt_un'];
$pword = sha1($_POST['txt_pw']);
$query = "SELECT * FROM tbl_admin WHERE uname=? AND pword=?";
$stmt = $dbc->prepare($query);
$stmt->bindParam(1, $uname);
$stmt->bindParam(2, $pword);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if ($row > 0) {
if ($row['acct_type'] == 1) {
header("Location: adminpage.php");
} elseif ($row['acct_type'] == 0) {
header("Location: userspage.php");
}
} else {
echo "<script>alert('Incorrect username/password');location.href='../index.php'</script>";
}
我知道它不起作用,因为我只是从tbl_admin查询select。非常感谢您的帮助,谢谢!
答案 0 :(得分:0)
假设您的表(tbl_admin,tbl_users)具有相同的列数 并且这两个表中的每个用户条目都是唯一的。 &#34;如果不是,你将来会遇到一些严重的问题。&#34;
$uname = $_POST['txt_un'];
$pword = sha1($_POST['txt_pw']);
$query = "SELECT * FROM tbl_admin WHERE uname=? AND pword=? UNION SELECT * FROM tbl_users WHERE uname=? AND pword=?";
$stmt = $dbc->prepare($query);
$stmt->bindParam(1, $uname);
$stmt->bindParam(2, $pword);
$stmt->bindParam(3, $uname);
$stmt->bindParam(4, $pword);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if ($row > 0) {
if ($row['acct_type'] == 1) {
header("Location: adminpage.php");
} elseif ($row['acct_type'] == 0) {
header("Location: userspage.php");
}
} else {
echo "<script>alert('Incorrect username/password');location.href='../index.php'</script>";
}
有关UNION的其他信息,请查看:http://dev.mysql.com/doc/refman/5.0/en/union.html
编辑:正如半疯狂所建议的那样,只有每个用户在两个表中都是唯一的时才应该采用这种方法。如果您有额外的时间,则应修改提取用户的方式
答案 1 :(得分:0)
感谢您在此查询中帮助我。非常感谢您的回答。我已经想到,我会为管理员和用户制作不同的登录表单。