Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Авторизация пользователей без БД
 
 автор: survey   (17.06.2009 в 07:45)   письмо автору
 
 

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

Есть модуль, который записывает в файл данные введённые пользователем

Файл vopros.php
<form action="action.php" method="post">
<p>Ваше имя<br>
<input name="name" type="text" class="lnews_data" size="30">
</p>
<p>Ваш пароль<br>
<input name="password" type="text" class="lnews_data" size="40">
</p>
<p>Ваш вопрос<br>
<textarea name="mes" cols="50" rows="5" class="lnews_data"></textarea>
</p>
<p>
<label>
<input type="submit" name="submit" id="submit" value="спросить">
</label>
</p>
</form>

Файл action.php
<?php
$_POST[''];
$file=fopen('mes.txt','a+');
fputs($file,$_POST['name']);
fputs($file,$_POST['password']);
fputs($file,$_POST['mes']."\r");
fclose($file);
echo 'Данные записаны в файл!'; //можно удалить
header("Location:vopros.php"); // редирект на предыдущую страницу
?>

//Кстати редирект не работает, не пойму почему

Файл mes.txt - пустой

Нужен модуль, который проверяет вводимые пользователем данные и сверяет их с данными из файла. Т.е. проверяет зарегистрирован ли пользователь ранее.
Подскажите реализацию кто сталкивался с такой же проблемой.

  Ответить  
 
 автор: Петр   (17.06.2009 в 12:08)   письмо автору
 
   для: survey   (17.06.2009 в 07:45)
 

- Редирект не работает, т.к. перед функцией header есть вывод данных (echo)
- Пользователей можно хранить в PHP-файле, т.е. создать двумерный массив (но это не безопасно):

<?php
$user 
= array (
 array (
'name'=>'admin''password'=>'admin'),
 array (
'name'=>'user''password'=>'user')
);
?>

- Для хранения данных о пользователях удобно использовать CSV-файлы (в нем поля разделены специальным символом), а в PHP есть стандартные функции для чтения таких данных в массив. Плюс в дальнейшем этот файл можно легко импортировать в любую БД.

  Ответить  
 
 автор: guye   (17.06.2009 в 12:10)   письмо автору
 
   для: survey   (17.06.2009 в 07:45)
 

можно записывать в таком формате fputs($file,$_POST['name']."=".$_POST['password']);
а потом с помощью регулярных выражений искать сравнения например
if($_POST['password']==ereg_replace("^[.$_POST['name']."]=,"",строка из текстового файла))

  Ответить  
 
 автор: Loki   (17.06.2009 в 12:34)   письмо автору
 
   для: guye   (17.06.2009 в 12:10)
 

>if($_POST['password']==ereg_replace("^[.$_POST['name']."]=,"",строка из текстового файла))
Задав регулярное выражение в $_POST['name'] получаем прекрасный инструмент для брута:)
А вообще будет удивительно если так хоть кто-то авторизуется через этот код.

  Ответить  
 
 автор: survey   (17.06.2009 в 17:07)   письмо автору
 
   для: Loki   (17.06.2009 в 12:34)
 

Проблема в "вытаскивании" строки из текстового файла.
Сейчас так:
<?php
if ( isset ($name) AND isset ($password))
{

$data = File ("mes.txt");
$pass =($password);
for ($i=0;$i<count($data);$i++) {
$dat = explode (";", $data[$i]);
if ($name == $dat[0] && $pass."\r\n" == $dat[1])
{
echo "<b><center>Зона зарегистрированных пользователей</b><p><a href=\"\">Ссылка 1</a><p><a href=\"\">Ссылка 2</a>";
exit;
}
}
}
?>

Всё прекрасно, но не работает.


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

  Ответить  
 
 автор: Trianon   (17.06.2009 в 17:29)   письмо автору
 
   для: survey   (17.06.2009 в 17:07)
 

<?php
if ( isset ($name) AND isset ($password))

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

  Ответить  
 
 автор: survey   (17.06.2009 в 18:09)   письмо автору
 
   для: Trianon   (17.06.2009 в 17:29)
 

Есть форма в HTML здесь я полагаю и определены переменные.

<html>
<body>
<b><center>Вход для зарегистрированных пользователей</b></center>
<form action='<?php print $PHP_SELF ?>' method='post'>
<table>
<tr><td>Введите ваш логин<td><input type=text size=15 name=name></tr>
<tr><td>Ваш пароль<td><input type=text size=15 name=password></tr>
</table>
<p><input type = submit value="Ок">
</form>
</html>

Но тем не менее всё это не работает. Если не сложно объясните плз. мои ошибки.
В PHP недавно залез, вообще я занимаюсь SEO.

  Ответить  
 
 автор: Trianon   (17.06.2009 в 18:11)   письмо автору
 
   для: survey   (17.06.2009 в 18:09)
 

>Есть форма в HTML здесь я полагаю и определены переменные.

Форма сама по себе переменные не определяет.

  Ответить  
 
 автор: Trianon   (17.06.2009 в 17:29)   письмо автору
 
   для: survey   (17.06.2009 в 17:07)
 

-

  Ответить  
 
 автор: Trianon   (17.06.2009 в 17:29)   письмо автору
 
   для: survey   (17.06.2009 в 17:07)
 

-

  Ответить  
 
 автор: Trianon   (17.06.2009 в 17:29)   письмо автору
 
   для: survey   (17.06.2009 в 17:07)
 

-

  Ответить  
 
 автор: Trianon   (17.06.2009 в 17:29)   письмо автору
 
   для: survey   (17.06.2009 в 17:07)
 

-

  Ответить  
 
 автор: Trianon   (17.06.2009 в 17:29)   письмо автору
 
   для: survey   (17.06.2009 в 17:07)
 

-

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования