Защита страницы для страницы администратора не работает

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

Итак, что я пытаюсь сделать, так это то, что когда обычный пользователь с типом «0» пытается получить доступ к странице администратора, index_admin.php, пользователь будет перенаправлен на страницу обычного пользователя, < сильный>index.php. А если у пользователя тип '1', то пользователь/админ останется на странице.

Итак, вот код, который я пытался заставить работать. (Этот файл требуется в index_admin.php и называется index_admin_check.php):

<?php
  session_start();
?>

<?php
    $vert = "localhost";
    $brukarnamn = "root";
    $passord = "";
    $db_namn = "nettsidebunad";
    $tbl_namn = "kunde_register";

    // Connecting to the MySQL database.
    mysql_connect("$vert", "$brukarnamn", "$passord") or die ("Kan dessverre ikkje koble til databasen.");
    mysql_select_db("$db_namn") or die ("Kan ikkje finna den ynkjande databasen.");
?>

<?php
        // *** Page protection *** \\

        // Admin check. If `type` = 1, let the user (admin) stay on the site. If `type` = 0 kick the user (normal) off the site.
        $sql = "SELECT `type` FROM $tbl_namn";
        $res = mysql_query($sql);
        $tell = mysql_num_rows($res);

    if ($tell == 0) {
        header ("location: index.php");
        exit();
}
?>

Часть этого текста на норвежском языке.

$vert = $host (на английском языке)

$brukarnamn = $usernamn (на английском языке)

$password = $password (на английском языке)

$db_namn = $db_name (на английском языке)

$tbl_namn = $tbl_name (на английском языке)


person ravo10    schedule 01.02.2013    source источник
comment
Вы используете устаревший API базы данных и должны использовать современная замена.   -  person Quentin    schedule 01.02.2013
comment
Вы не отправляете запрос на идентификатор или имя пользователя или что-то еще, как он узнает, в какой строке проверять тип?   -  person Pitchinnate    schedule 01.02.2013
comment
Вероятно, также нужно указать в своем запросе, что вы ищете только type=1   -  person Pitchinnate    schedule 01.02.2013
comment
Хорошо, спасибо :) Постараюсь исправить.   -  person ravo10    schedule 01.02.2013


Ответы (3)


$sql = "SELECT `type` FROM $tbl_namn";

Этот SQL-запрос вернет строку для каждого пользователя в вашей базе данных. Используя ваш метод простой проверки, вернул ли запрос результат или нет, вам нужно выбрать только строку для текущего пользователя, и только если у пользователя есть type=1.

Вам необходимо убедиться, что:

  • Пользователь ранее входил в систему, используя имя пользователя и пароль или что-то подобное.
  • Вы сохранили их данные в сеансе.

Если в вашей пользовательской таблице есть столбец идентификатора, и вы сохранили идентификатор вошедшего в систему пользователя в сеансе как «userid», вы можете использовать запрос:

$sql = "SELECT `type` FROM $tbl_namn WHERE id = {$_SESSION['userid']} AND type = 1";

Но, конечно, это было бы спорно, потому что вы бы просто сохранили тип пользователя в сеансе при первом входе в систему, не так ли?

person Gareth Cornish    schedule 01.02.2013
comment
Хм.. Пытаюсь заставить его работать. Но код, который я использую (новый снизу, который немного изменен), похоже, не работает. Спасибо за помощь :) - person ravo10; 02.02.2013

Ну, насколько я вижу, вы на самом деле не проверяете пользователя. Я сделаю несколько замечаний к вашему коду, чтобы прояснить ситуацию:

    $sql = "SELECT `type` FROM $tbl_namn";   //Return all values of column "type" from table - instead you should search for specifyc user
    $res = mysql_query($sql);    
    $tell = mysql_num_rows($res);   //Count returned rows

Таким образом, вместо того, чтобы узнавать тип пользователя, вы получаете количество зарегистрированных пользователей. Что вы должны сделать, чтобы найти имя пользователя и получить тип пользователя для этого имени. Итак, давайте подумаем об этой концепции таблицы: ID | name | type |
Теперь мы можем начать проверку нашего пользователя. Мы запросим у mysql тип пользователя «admin».

$name = $_POST["username"];   //username submited in POST HTML form
$name = mysql_real_escape_string($name);  //Replace dangerous characters from name. This is important to avoid your database being hacked
$data = mysql_query("SELECT type FROM $tbl_namn WHERE name='$name'") or die(mysql_error());  //On failure, you will is if there is some error
$data=mysql_fetch_row($data);  //Get actual data
if($data["type"]==0) {
   header("HTTP/1.1 403 Acces Forbidden");
   header("Location: forbidden.html");  //send user to page telling me he is not allowed to enter. As well you can use include here.
   exit;
person Tomáš Zato - Reinstate Monica    schedule 01.02.2013
comment
Хм... Я пытался использовать этот код в index_admin_check.php и заменить код некоторыми изменениями, чтобы использовать его для входа на страницу пользователя и администратора, но, похоже, у меня это не работает: S Может быть, я делаю Что-то не так? Я не уверен .. Что ж, спасибо за помощь :) - person ravo10; 03.02.2013
comment
Вы должны помнить, что это всего лишь пример кода. Некоторые части должны быть заменены рабочим контекстом. $_POST[username] должен быть действительно отправлен пользователем, то есть вы должны отправить форму с этим полем. Также столбец «имя» должен выходить из вашей таблицы, потому что это поле является критерием для поиска пользователя. Дайте мне знать, если некоторые изменения моего поста сделают его более понятным для вас. - person Tomáš Zato - Reinstate Monica; 03.02.2013

поместите это на страницу входа:

<?php session_start();
if ($_POST['type'] = "1") {
    Header('location: http://example.com/admin.php/');
    $_SESSION['admin']; = "yes";
    exit;
} else { 
    Header('location: http://example.com/user.php/');
    $_SESSION['admin']; = "no";
    exit;
}
//modify as needed
?>

и это в admin.php имя файла может быть любым, но расширение должно быть .php:

<?php session_start():
if ($_SESSION['admin']; = "no") {
    Header('location: http://example.com/user.php/');
    exit;
}
//modify as needed
?>

и не забудьте поместить это в самое начало файла, иначе сеансы не будут работать

person Deimantas    schedule 04.01.2015