Это если заявление не работает - что я делаю не так? - PullRequest
0 голосов
/ 02 ноября 2011

Я пытаюсь получить уровень доступа (admin / member / guest) для текущего пользователя, вошедшего в систему, и в зависимости от этого показывать им конкретное содержимое на моей странице. Я пытаюсь проверить это с эхом прямо сейчас, но все еще не могу ничего распечатать. Кто-нибудь может дать какой-нибудь совет?

if(isset($_SESSION['username'])){

    global $con;
    $q = "SELECT access FROM users WHERE username = '$username' ";
    $result = mysql_query($q, $con);

    if($result == 'guest')
    {
        echo "You are a guest";// SHOW GUEST CONTENT
    }
    elseif($result == 'member')
    {
       echo "You are a member"; // SHOW OTHER CONTENT
    }
    elseif($result == 'admin')
    {
        echo "You are an admin";// SHOW ADMIN CONTENT
    }

}

Ответы [ 3 ]

2 голосов
/ 02 ноября 2011

$result является ресурсом mysql.вам нужно

if(isset($_SESSION['username'])){

    global $con;
    $q = "SELECT access FROM users WHERE username = '$username' LIMIT 1";
    $result = mysql_query($q, $con);
    $row = mysql_fetch_assoc($result);

    $access = $row['access'];

    if($access == 'guest')
    {
        echo "You are a guest";// SHOW GUEST CONTENT
    }
    elseif($access == 'member')
    {
       echo "You are a member"; // SHOW OTHER CONTENT
    }
    elseif($access == 'admin')
    {
        echo "You are an admin";// SHOW ADMIN CONTENT
    }

}
1 голос
/ 02 ноября 2011

$result как возвращено mysql_query - это , а не строка, с которой вы можете сравнить;это ресурс .Вам нужно извлечь строку из $result:

$row = mysql_fetch_assoc($result)
$access = $row['access'];

if($access == 'guest') {
   ...
}

...

Несколько других проблем:

  • Возможно, у вас возникла проблема с SQL-инъекцией в вашем запросе.Вы никогда не должны напрямую вставлять значения переменных в ваши SQL-запросы без их правильного экранирования.Возможно, вы захотите использовать mysql_real_escape_string.
  • mysql устарела.Вам следует попробовать использовать mysqli (MySQL Improved) или PDO (объекты данных PHP).
0 голосов
/ 02 ноября 2011

Я вижу две проблемы: 1. Вам нужно использовать session_start (); в начале. в противном случае ваше заявление if не будет выполнено. 2. mysql_query ($ q, $ con) не возвращает строку. он возвращает набор записей. Вам нужно использовать mysql_fetch_assoc ($ result); которые возвращают ассоциативный массив. И из массива вы получаете желаемое значение по:
$ assoc_arr = mysql_fetch_assoc ($ result); $ access = $ assoc_arr ['access'];

теперь вы можете сравнить $ access.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...