Я работаю над скриптом авторизации , который проверяет имя пользователя, пароль и уровень доступа (роли). Он отлично работает, пока проверяется только одна роль.PHP array vs mysql query
Я хотел бы узнать, как я могу поместить роли в массив и проверить базу данных, присутствует ли какая-либо из них в базе данных для зарегистрированного пользователя. Сейчас он проверяет только одну роль.
Вопрос: Как построить и массивы для разрешенных ролей, а затем проверить, проверено ли какое-либо из них?
<?php
// allowed roles
$allowedRoles = 'role1';
// needs to be like:
$allowedRoles = array('role1','role2','role3','etc.');
//------------------------------------------------------------
// instantiate sessions
//------------------------------------------------------------
if (!isset($_SESSION)) {
session_start();
}
//------------------------------------------------------------
// define auth variables
//------------------------------------------------------------
$first_pass = 0; // sessions
$second_pass = 0; // password
$third_pass = 0; // role
//------------------------------------------------------------
// check if sessions exist and are valid
//------------------------------------------------------------
if(!empty($_SESSION['UserName']) && !empty($_SESSION['Password']) && !empty($_SESSION['LoggedIn']) && $_SESSION['LoggedIn'] == 1)
{
// FIRST PASS OK!
$first_pass = 1;
echo 'PASSED: 1st ';
}
if($first_pass == 1)
{
//------------------------------------------------------------
// include db connection
//------------------------------------------------------------
require_once('../../connections/mysql.php');
// set variables
$session_un = $_SESSION['UserName'];
$session_pw = $_SESSION['Password'];
// DB QUERY: check username SESSION credential against db
// ------------------------------------------------------------------
$session_auth = mysqli_query($conn, "SELECT UserId, UserName, Password FROM users WHERE UserName = '$session_un' AND IsApproved = 1 AND IsLockedOut = 0 LIMIT 1")
or die($dataaccess_error);
// ------------------------------------------------------------------
if(mysqli_num_rows($session_auth) == 1)
{
$row = mysqli_fetch_array($session_auth);
$auth_UserId = $row['UserId'];
$auth_Password = sha1(sha1($row['Password']));
// if passwords match
if($auth_Password == $session_pw)
{
// SECOND PASS OK!
$second_pass = 1;
echo 'PASSED: 2nd ';
if($second_pass == 1)
{
// DB QUERY: check ROLE credentials in db
// ------------------------------------------------------------------
$auth_roles = mysqli_query($conn, "SELECT UserId, RoleId, RoleName FROM users_in_roles WHERE UserId IN ($auth_UserId) AND RoleName IN ('$allowedRoles')")
or die($dataaccess_error);
// ------------------------------------------------------------------
if(mysqli_num_rows($auth_roles) > 0)
{
// THIRD PASS OK!
$third_pass = 1;
echo 'PASSED: 3rd ';
}
else
{
// redirect back to login page
header('Location: ../../login.php');
}
}
}
}
}
?>
Спасибо!
Вам нужно обернуть 'implode' с RTRIM как' RTRIM (Implode (...), «») '. В противном случае у вас будут запятые и ошибки MySQL. –
@Chris 'implode' только вставляет текст« клей »* между * элементами, а не до/после. Решение работает как отправлено. – meagar
Большое спасибо! Это именно то, что я хотел научиться делать. Мне пришлось посмотреть, что такое взрыв, и я рад, что сделал. – 2010-10-17 02:23:41