2015-03-22 2 views
1

Итак, у меня есть 2 таблицы с именем tbl_admin и tbl_users. Каждый из них имеет столбец с именем acct_type. Все значения acct_type в tbl_admin равны 1 и в tbl_users, 0. Я знаю, что для меня было бы легко, если бы я только что создал для них одну таблицу. Мой вопрос в том, как я могу запросить это, чтобы я мог перенаправить администратора на свою страницу и пользователей на свою страницу.Как получить значения столбцов в 2 таблицах в выбранном запросе?

Вот мой код

$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. Ваша помощь будет очень признательна, спасибо!

+0

Используйте соединение, http://dev.mysql.com/doc/refman/5.0/ru/join.html. – chris85

+1

Я бы не предложил присоединиться. Я * предлагаю исправить ваши таблицы. –

+0

@ HalfCrazed Да, я предпочитаю фиксировать свои таблицы. Но если это будет так, есть ли решение? – FewFlyBy

ответ

0

Предполагая, что ваша таблица (tbl_admin, tbl_users) имеет одинаковое количество столбцов , и каждая запись пользователя в этих двух таблицах уникальна. «в будущем у вас будут серьезные проблемы, если нет».

$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

Edit: как это было предложена Половина Crazed, этот подход должен быть сделана только тогда, когда каждый пользователь уникален в обеих таблицах. Если у вас есть дополнительное время, вы должны пересмотреть способ получения своих пользователей.

+0

Что делать, если пользователь существует в обеих таблицах? Это то, что нужно учитывать. –

+0

Тогда у вас есть проблема; это одна из причин, почему вы должны использовать две таблицы. Что делать, если значения в каждой таблице различны, например, пароль? Какой из них следует использовать в этом случае? –

+0

Ну, я не могу использовать union, потому что у меня нет одинакового количества столбцов. Это мои столбцы: tbl_admin: [ссылка] (http://i.imgur.com/N2KFPXp.png) tbl_users: [ссылка] (http://i.imgur.com/eAYZT9g.png) Спасибо за понимание. – FewFlyBy

0

Спасибо, что помогли мне в этом запросе. Ваши ответы очень ценятся. Я выяснил, что я просто создам разные формы регистрации для администратора и пользователя для некоторых целей.

Смежные вопросы