如何从多个表中进行选择?

时间:2014-05-26 23:52:04

标签: php mysql

我正在建立一个网站,我需要一个登录文件来将管理员和客户重定向到他们各自的帐户。

应该验证两个表并查看电子邮件是否与密码相对应。

这是我已经拥有的

<?php
include "data-base.php";
if($_SESSION){
header("location: index.php?site=perfil");
    echo "<script>window.location.href = \"index.php?site=login&erro=3\";</script>";
}
$result = mysql_query("select * from admin, clients where email='".$_POST['email']."' and password='".$_POST['password']."'");
if (mysql_num_rows($result)>0)
{
$linha = mysql_fetch_array($result);
$_SESSION['id']=$linha['id'];
if($linha['email'] = "admin") {
    header("location: admin.php?id=".$linha['id']."");
} else {
    header("location: client.php?id=".$linha['id']."");
}
} else {
echo "<script type=\"text/javascript\">alert(\"Incorrect email or password\"); window.location = 'index.php';</script>";
}
?>

3 个答案:

答案 0 :(得分:1)

我认为最好将一个查询分成两部分。首先,尝试从“admin”表中获取行。如果mysql_now_rows == 0,则从用户获取行。如果为空,请显示有关错误登录和密码的消息

$q = "SELECT * FROM admin WHERE email = '".$_POST["email"]."' AND password ='".$_POST["password"]."'";
$result = mysql_query($q);
if(sizeof($result) !== 0){
    header("put admin URL here");
} else {
    $q = "SELECT * FROM clients WHERE email = '".$_POST["email"]."' AND password ='".$_POST["password"]."'";
    $result = mysql_query($q);
    if(sizeof($result) !== 0){
        header("put clients URL here");
    } else {
        print_r("wrong email&pass");
    }
}

抱歉格式化,我来自手机

答案 1 :(得分:1)

"select * from admin, clients where (admin.email='".$_POST['email']."' OR
clients.email='".$_POST['email']."') AND (admin.password='".$_POST['password']."' OR
clients.password='".$_POST['password']."')";

在这个问题中,您还可以使用列来输入用户类型而不是使用两个表。如果那么可以在声明之下运行。

"select * from admin_clients_table where email='".$_POST['email']."' AND
password='".$_POST['password']."'";

由于问题是如何从多个表中进行选择,您可以执行以下操作:

"select table1.column1, table1.column2, table2.column1, table2.column3 from table1,
 table2 where (table1.column4 = table3.column1 and table2.column2 = 'value1') or
 table3.column1 = 'value2' order by table1.id desc limit 0,100";

答案 2 :(得分:0)

您的脚本中存在一个小错误。

if($linha["email"] = "admin")

应该是

if($linha["email"] == "admin")

1 =你所做的就是说$ linha [“email”]应该成为“admin” 2 =你正在比较$ linha [“email”]和$ linha [“email”]

换句话说,如果$ linha [“email”]与$ linha [“email”]相同

希望这可以帮助你。

此外,您还需要更改查询并加入表格。

$result = mysql_query("SELECT * from admin, clients 
                       WHERE email='".$_POST['email']."' 
                       AND password='".$_POST['password']."'");