Вот накидал кое-что для тебя, надеюсь разберешься! Информация о пользователях хранится в файле users.xml. В тегах <password> хэш пароля. В соответвующих коментах сам пароль (желательно в реальной модели убрать). И этот сам файл надо прятать в директорию, которая не доступна через HTTP интерфейс. Ну и прочие приблуды по безопасности. Файл имеет следующий вид :
<?xml version="1.0" encoding="UTF-8"?>
<root>
<user login="cyburglar">
<!-- password : kindzadza -->
<password>402b142c95de7623ca85ec9ba33d1099</password>
<realname>Alex Burg</realname>
<role>admin</role>
<homepage>http://www.cyburglar.ee/cv.pdf</homepage>
<e-mail>[email protected]</e-mail>
</user>
<user login="bin_laden">
<!-- password : vsem_pizdec -->
<password>603f3c62b51d289e88ed66a4e0e99b64</password>
<realname>Usama Bin Laden</realname>
<homepage>http://www.seprin.com/laden/</homepage>
<role>moder</role>
<e-mail>[email protected]</e-mail>
<comment>Буш чмокает писю! :)</comment>
</user>
<user login="marfa">
<!-- password : otsosu_za_tak -->
<password>5a733149cbefb879bf62d71572db87b8</password>
<realname>Марфа Васильевна</realname>
<homepage>http://www.lukomorje.ru/</homepage>
<role>girl</role>
<e-mail>[email protected]</e-mail>
<comment>Интим не предлагать</comment>
</user>
</root>
Для разбора написал маленький парсер XML (файл users_parser.php) , который лазит по контенту users.xml и ищет пользователя заданого переменной $search_for . если находит, то устанавливает бит $found в истину. Вот исходник парсера :
<?php
if (!defined("NO_JOKE"))
die("Ахтунг ... некоректный доступ");
$insideuser = false;
$tag = "";
$found = false;
$search_for = "";
$login = "";
$password = "";
$realname = "";
$role = "";
$e_mail = "";
$homepage = "";
$comment = "";
function startElement($parser, $name, $attrs) {
global $insideuser, $tag, $login, $found;
if ($found) return;
if ($insideuser) {
$tag = $name;
} elseif ($name == "USER") {
$insideuser = true;
$login = $attrs['LOGIN'];
}
}
function endElement($parser, $name) {
global $found, $insideuser, $tag, $password, $realname, $role,$login,$e_mail,$search_for , $comment, $homepage;
$tag = "";
if ($found) return;
if ($name == "USER") {
$insideuser = false;
if ($login == $search_for) {
$found = true;
} else {
$login = "";
$password = "";
$realname = "";
$role = "";
$e_mail = "";
$comment = "";
$homepage = "";
}
}
}
function characterData($parser, $data) {
global $found,$insideuser, $tag, $password, $realname, $role,$e_mail, $comment, $homepage;
if ($found) return;
if (!$insideuser) return;
switch ($tag) {
case "PASSWORD":
$password = $data;
break;
case "REALNAME":
$realname = $data;
break;
case "ROLE":
switch ($data) {
case "admin" :
$role = "Администратор";
break;
case "moder" :
$role = "Модератор";
break;
case "girl" :
$role = "Женщина";
break;
}
break;
case "E-MAIL":
$e_mail = $data;
break;
case "HOMEPAGE":
$homepage = $data;
break;
case "COMMENT":
$comment = $data;
break;
}
}
function searchForUserInXML($db_file) {
global $found;
$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
$fp = fopen($db_file,"r")
or die("Запара с чтением БД пользователей.");
while ($data = fread($fp, 4096)) {
xml_parse($xml_parser, $data, feof($fp))
or die(sprintf("XML ошибка: %s (строка %d )",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
}
fclose($fp);
xml_parser_free($xml_parser);
}
?>
Если пользователь найден ... то информацией о нем заполняются переменные
$password, $realname, $role,$login,$e_mail,$comment, $homepage.
Далее ... в файле auth.php (за базу был взять твой файл) идет сама проверка на истиннсть ввденнего пароля (эго хэша) с хэшем, который у тебя в users.xml ... если условие удолетворено, то печатается информация о пользователе ... суда можно уже вставлять, что душе захочется ... как кукисы, так и другие детские обиды.
<HTML>
<HEAD>
<TITLE>Администрировние</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
</HEAD>
<BODY>
<CENTER>
<?
if (empty($e_login) || strlen(trim($e_login)) == 0) {
die("<p align=center><b><font color=red>Ошибка. </b></font>Не введен Логин. Вернитесь и проверьте данный параметр.</p>");
}
if (empty($e_password) || strlen(trim($e_password)) == 0) {
die("<p align=center><b><font color=red>Ошибка. </b></font>Не введен Пароль. Вернитесь и проверьте данный параметр.</p>");
}
define("NO_JOKE", 1);
include("users_parser.php");
$search_for = $e_login;
searchForUserInXML("users.xml");
if ($found) {
printf("<dt><b>Пользователь:</b>%s</dt><dt><b>Пароль(MD5):</b>%s</dt><dt><b>Имя:</b>%s</dt><dt><b>Роль:</b>%s</dt><dt><b>Почта:</b>%s</dt><dt><b>Домашнаяя страница:</b><a href=\"%s\">Смотреть</a></dt><dt><b>Коментарий:</b>%s</dt><br><br>",
trim($login),htmlspecialchars(trim($password)), trim($realname) , trim($role) , trim($e_mail), trim($homepage) , trim($comment) );
}
if ($found && $password == md5($e_password)) {
echo "<p align=center><b>Доступ:</b> <font color=green><b>Открыт</b></font><BR>Добро пожаловать <u>".$role."</u></p>";
} else {
echo "<p align=center><b>Доступ:</b> <font color=red><b>Закрыт</b></font><BR>Неверный логин или пароль</p>";
}
?>
</CENTER>
</BODY>
</HTML>
И я немного подправил login.php (имена объектов input сменил, чтобы ты не запутался).
<html>
<head>
<title>Вход в закрытую зону</title>
</head>
<body bgcolor="#FFFFFF">
<center>
<form action="auth.php" method="POST">
<b><font color=red>Доступ только доверенным лицам</font></b><br><br>
Логин<font color=red>*</font>: <input name="e_login" type="text" value="" /><br><br>
Пароль<font color=red>*</font>:<input name="e_password" type="password" value="" /><br><br>
<input type="submit" name="enter" value="Вход" />
<input type="reset" name="reset" value="Сброс" /><br><br>
<li><font color=red>*</font> - Является обязательным для заполнения.
</form>
</center>
<br>
</body>
</html>
Рабочий пример можешь наблюдать
здесь. Пытался всё максимально упростить ... надеюсь мне удалось быть максимально доступным
. Если чё не понятно ... то пиши в эху, если даст Бог загляну то отвечу. Или тут местные "умельцы" помогут.
ЗЫ! Да, переменная NO_JOKE используется как провка на то что auth.php является обложкой для парсера.
ЗЗЫ! Делал на скору руки, так что критикофф просим помолчать!!!
Victoria nulla est, Quam quae confessos animo quoque subjugat hostes ...
Верю в смерть после жизни, любовь после секса и в крем после бритья ...