Проблемы с оператором PHP SQL IF

Итак, я пытаюсь извлечь некоторые данные из моей базы данных SQL и использовать их в операторе IF.

У меня есть база данных с именем DB_Default, и у меня есть таблица с именем Users.

Внутри пользователей у меня есть все обычные столбцы, такие как идентификатор, имя пользователя, пароль, но у меня также есть столбец с именем isadmin.

Я хочу иметь возможность выполнять запрос mysql через PHP, выбирая всех пользователей с именем пользователя $_SESSION[username] и isadmin = 1.

Я собираюсь добавить несколько навигационных ссылок только для повышенных привилегированных пользователей. Итак, поскольку страница, на которую будет помещен код, предназначена только для зарегистрированных пользователей, я подумал правильно, давайте использовать уже определенный сеанс имени пользователя, т. Е. Если для имени пользователя моего сеанса было установлено значение «Администратор».

заявление должно быть

$result = mysql_query("SELECT * FROM users WHERE user_name='" . $_SESSION["user_name"] . "' and isadmin = '". $admin."'");

Я установил $admin = "1"; так, чтобы он мог возвращать результаты только в том случае, если у пользователя, вошедшего в систему, isadmin установлен на 1.

Вместо этого я либо показываю навигационные ссылки любому пользователю независимо от его статуса администратора, либо не вижу его вообще.

Честно говоря, код очень грязный, так как сейчас 5:40 утра, и я какое-то время не писал код, так что он довольно ржавый, поэтому я более чем осведомлен о том, насколько легко это должно быть исправлено.

Я на 99% уверен, что это связано с тем, что я только что установил $admin = "1";, но хоть убей, не могу понять, где я ошибся. Отдохну сегодня и вернусь завтра. Надеюсь, к тому времени кто-то опубликует решение, и, очевидно, я проголосую за лучший ответ, иначе я просмотрю код и посмотрю, смогу ли я исправить это самостоятельно!

Спасибо!

ОБНОВЛЕНИЕ - Включенный код

    <?php
$admin = 1;
$conn = mysql_connect("localhost","root","password");
mysql_select_db("DB_Default",$conn);
$result = mysql_query("SELECT * FROM users WHERE user_name='" . $_SESSION["user_name"] . "' and isadmin = '". $admin."'");
$row  = mysql_fetch_array($result);
if(is_array($row)) {
$_SESSION["isadmin"] = $row[isadmin];
} else {
}
if($_SESSION["isadmin"] == '1'){
//has admin privs
} else {
//does not have admin privs
}

Я еще не настроил навигационные ссылки, так как я еще не дошел до этого этапа, однако ссылки будут внутри административных ссылок оператора if в административной части, а не в неадминистративной части.


person Brad Andrews    schedule 30.08.2015    source источник
comment
Сам запрос, кажется, в порядке. Попробуйте присвоить запрос какой-либо переменной и var_dump, чтобы убедиться, что строка сгенерирована правильно. $sql = "SELECT * FROM users WHERE user_name='" . $_SESSION["user_name"] . "' and isadmin = '". $admin."'"; var_dump($sql);   -  person DannyPhantom    schedule 30.08.2015
comment
Согласен с Дэнни, что запрос, кажется, в порядке. Я рекомендую размещать код там, где вы показываете (или скрываете) навигационные ссылки, на которые ссылаетесь.   -  person nb1987    schedule 30.08.2015
comment
@DannyPhantom спасибо за ответ. Это был ответ, который дал мне сервер. string(61) SELECT * FROM users WHERE user_name='Admin' и isadmin = '1'   -  person Brad Andrews    schedule 30.08.2015
comment
Не видя остальной части вашего кода, я предполагаю, что вы проверяете, возвращает ли $result значение true, т.е. if($result){ // isadmin } - вместо проверки, возвращена ли строка - if(mysql_num_rows($result)){ // isadmin }. Пустой возвращенный запрос по-прежнему является успешным запросом   -  person Sean    schedule 30.08.2015
comment
Мое предположение прямо сейчас будет следующим: вы устанавливаете переменную $_SESSION, когда входите в систему как администратор. После этого $_SESSION никогда не меняется. Это в значительной степени означает, что если вы войдете в систему как администратор, а затем повторно войдете в систему как кто-то другой, для $_SESSION['isadmin'] уже будет установлено значение 1, что обеспечит полный доступ. Итак, что вам нужно сделать, это изменить часть else на: if(is_array($row)) { $_SESSION["isadmin"] = $row[isadmin]; } else { $_SESSION['isadmin'] = 0; }   -  person DannyPhantom    schedule 30.08.2015
comment
Попробуйте сделать if(mysql_num_rows($result) == 1) { $_SESSION["isadmin"] = true; } else { $_SESSION["isadmin"] = false; }. Затем вы можете проверить if($_SESSION["isadmin"]) { //admin } else { //not admin }   -  person Sean    schedule 30.08.2015
comment
@DannyPhantom Вот оно! Пожалуйста, не могли бы вы представить его как ответ, чтобы я мог отметить как решенный? Большое спасибо! Как вы сказали, это было связано с установкой сеанса после того, как я вошел в систему с пользователем-администратором, но не было кода, чтобы сообщить компьютеру установить его на 0, если пользователь вошел в систему как администратор ISNT! ха-ха   -  person Brad Andrews    schedule 30.08.2015


Ответы (1)


Мое предположение прямо сейчас будет следующим: вы устанавливаете переменную $_SESSION, когда входите в систему как администратор. После этого $_SESSION никогда не меняется. Это в значительной степени означает, что если вы войдете в систему как администратор, а затем повторно войдете в систему как кто-то другой, для $_SESSION['isadmin'] уже будет установлено значение 1, что обеспечит полный доступ. Итак, что вам нужно сделать, это изменить часть else на:

if(is_array($row)) 
    { $_SESSION["isadmin"] = $row[isadmin]; } 
else 
    { $_SESSION['isadmin'] = 0; } 
person DannyPhantom    schedule 30.08.2015
comment
Этот. Спасибо Дэнни! Надеюсь, ваш пост поможет другим людям с такими же проблемами, как и я! Отличная работа :) - person Brad Andrews; 30.08.2015