| Доброгоо времени суток!
Это моя первая попытка написать сайт, прошу помочь.
1. Описание задачи. Нужен сайт-база данных(для такси), каждый пользователь заходит под своим логином-паролем, есть несколько групп пользователей(5), каждый пользователь в форме редактирования заявки может редактировать только поля, которые прописаны для группы в которой он состоит. На вид список заявок один в один как эксел (наворотов сильных не нужно).
Итак, я сделал отображение заявок в виде с списка с поиском, все работает
стартовая страница ( там где просят ввести имя пользователя и пароль) index.php
главная страница с фреймами main.php , в ней в виде фреймов отображаются файлы list.php(список заявок) , и search.php (поиск
по разным полям) , при клике на каждой заявке окрывается форма редактирования заявки (edit.php?id=343).
В списке отображаемых заявок, отображаются заявки, для конкретного пользователя, заявки других пользователей ему не видны,
но если поменять в ссылке edit.php?id=343, id=XXXX на любое другое , то любой пользователь может открыть любую заявку.
Как организовать защиту от прямого обращения с форме редактирования? Это первый вопрос.
2. При авторизации, данные(имя пользователя, пароль) из формы расположенного в index.php передаются в обработчик auth.php , в обработчике проверяется логин-пароль, в случае успешной авторизации, в переменные загружаются данные о правах для группы, в которой он находится. И перенаправляется на страницу main.php . Как передать значения переменных из обработчика auth.php на страницу main.php , и еще дальше что-бы эти данные передались во фреймы list.php search.php и при отрытии формы edit.php в нее.
Т.е нужно сохранять авторизацию при переходе по заявкам, при использовании постраничной навигации, постоянно.
Авторизация нужна только по сессиям. У меня стандартный сервер (UNIX+mySQL+PHP+Apache). Авторизация средствами Apache
неприменима - только на PHP и сессиях, и без cookies.
Сорри за избитую тему, где то на форуме видел решение по защите страниц от прямого обращения к ним, но поискав уже 6 часов подряд не могу найти снова, если кто знает кинте ссылку.
Вот код:
list.php
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>PozzitivePLUS</title>
<body>
<?php
//Если пользователь не авторизован останавливаем загрузку страницы
include "./config/auth.php";
// Устанавливаем соединение с базой данных
include "./config/config.php";
// Переменная хранит число сообщений выводимых на станице
$num = 50;
// Извлекаем из URL текущую страницу
$page = $_GET['page'];
// Определяем общее число сообщений в базе данных
$cnt = mysql_query("SELECT COUNT(*) FROM main");
$result = mysql_result($cnt, 0);
// Находим общее число страниц
$total = ceil($result/$num);
// Определяем начало сообщений для текущей страницы
$page = intval ($page);
// Если значение $page меньше единицы или отрицательно
// переходим на первую страницу
// А если слишком большое, то переходим на последнюю
if(empty($page) or $page < 0) $page = 1;
if($page > $total) $page = $total;
// Вычисляем начиная к какого номера
// следует выводить сообщения
$start = $page * $num - $num;
// Выбираем $num сообщений начиная с номера $start
$result = mysql_query("SELECT * FROM main LIMIT $start, $num");
// В цикле переносим результаты запроса в массив $postrow
while ( $list[] = mysql_fetch_array($result));
//Формируем таблицу, в ввиде списка
echo "<pre><table rules=all border=1>";
echo "<thead><td><b>Номер заявки</b><td><b>Тип заявки</b><td><b>Статус</b><td><b>Дата ДТП</b><td><b>Название С/К</b><td><b>ФИО клиента</b><td><b>Марка/модель машины</b><td><b>ГОС номер</b><td><b>Номер полиса</b></thead>";
$i=0;
while ($list[$i])
{
echo "<tr><td>";
echo $list[$i]['id'];
echo "<td>";
echo $list[$i]['type'];
echo "<td>";
echo $list[$i]['status'];
echo "<td><";
echo $list[$i]['date_dtp'];
echo "<td>";
echo $list[$i]['name_company'];
echo "<td>";
echo $list[$i]['2_name']," ";
echo $list[$i]['1_name']," ";
echo $list[$i]['3_name'];
echo "<td>";
echo $list[$i]['car_mark']," ";
echo $list[$i]['car_model'];
echo "<td>";
echo $list[$i]['car_number']," ";
echo $list[$i]['car_region'];
echo "<td>";
echo $list[$i]['policy_number'];
$i++;
}
echo "</table></pre>";
//Постраничная навигация
echo "Страницы:<br><br>";
echo "<table rules=all border=1><tr>";
for ($i=1; $i <= $total; $i++)
{
echo "<td><a href=list.php?page=", $i , ">", $i , "</a>";
}
echo "</table>"
?>
|
index.php
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>PozzitivePLUS</title>
<body>
<! Форма авторизации - ввода имени пользователя и пароля>
<table align="center">
<form action="/config/auth.php" method=post>
<input type="hidden" name="session" value="<?php echo session_id() ?>">
<tr><td>Имя пользователя:<td><input type=text name=username>
<tr><td>Пароль :<td><input type=password name=pass><br>
<input type=submit value="Войти">
</form>
</table>
<?php if($_GET['bad']) echo ("Неправильные имя пользователя или пароль!") ?>
</body>
</html>
|
auth.php
<?php
//Устанавливаем соединение с базой данных
include "config.php";
//Извлекаем имя пользователя, его пароль, и идентификатор сессии
$username = $_POST['username'];
$pass = md5($_POST['pass']);
$session = $_POST['session'];
//Формируем SQL запрос
$query = "SELECT * FROM users WHERE logname = '$username' AND pass='$pass'";
//Выполняем SQL запрос имени пользователя и пароля
$result = mysql_query($query);
//При ошибке перенаправляем на index.php
if (!mysql_num_rows($result)) header("Location: ../index.php?bad=1");
//Проверяем заблокирован ли логин
if (mysql_result($result, 0, 'active') == 0) header("Location: ../index.php?bad=1");
//Извлекаем из базы данных данные о пользователе
header("Location: ../main.php");
?>
|
| |