singlepost

Как реализовать простую форму PHP авторизации? << На главную или назад  

Имеется форма авторизации login.html

<html>
<body>
<center>
<hr>
<form action=validate.php method=POST>
Имя:<input type=text name=name>
Пароль:<input type=password name=pass>
<input type=submit value=Войти>
</form>
<center><a href=reg.html><b>Регистрация</b></a></center>
<hr>
</center>
</body>
</html>

Имеется файл записи пользователей в масив base.txt

<?php
$mass = file("base.txt");
$mass[count($mass)-1]="/".$_POST["name"]."=".$_POST["pass1"]."/";
$mass[count($mass)]="?>";
$fp=fopen("base.txt", "w");
for($i=0;$i<count($mass);$i++)
{
if ($i==count($mass)-1)
fputs($fp,"\r\n");
fputs($fp, $mass[$i]);
}

?>

Имеется проверка логинов и паролей validate.php

<?php
require "base.txt";
if (!isset($base[$name]))
{
require "login.html";
echo "<b><center><font color=red>Неправильно указан пользователь!</center></font></b>";
exit;
}
if (md5($pass) !== $base[$name])
{
require "login.html";
echo "<b><center><font color=red>Неверный пароль!</center></font></b>";
exit;
}
Header("Location: private.php");
?>

base.txt
<?php

?>

Форма регистрации reg.html

html>
<body>
<center>
<hr>
<form action=reg.php method=POST> //обработка данных будет происходить в reg.php
<table border=0> //для удобства выводим поля для заполнения в таблице
<tr><td>
Имя:</td><td><input type=name name=name>
<td></tr>
<tr><td>Пароль:</td><td><input type=password name=pass1>
</tr><tr><td>
<tr><td>Еще раз:</td><td><input type=password name=pass2>
</tr><tr><td>
Почта:</td><td><input type=text name=email>
</tr></td>
</table><br>
<input type=submit value=Зарегистрироваться>
</form>
<center><a href=localhost/login.html><b>Вход</b></a></center>
<hr>
</center>
</body>
</html>

Имеется защищенная страница private.php
<?php
if ($HTTP_REFERER !== "localhost/login.html")
{
echo "Хакать надумали? :) ";
exit;
}
?>
<html>
<body>
<br><br>
<br><br>
<center>
<font color=red size=7>
Private page!
</font>
</center>
<br><br>
<br><br>
</body>
</html>

28 ответов в теме “Как реализовать простую форму PHP авторизации?”

  1. 28
    Сергей Середенин ответил:

    И вообще всё можно делать через аякс там я бы сказал даже удобней в этом случае.
    И лучшая среда разработки это gVim поддерживает кучу языков программирования. notepad++ отдыхает.
    Zend выводит слишком много лишней инфы но незаменим при отладке(в данном случае это не нужно).
    Dreamweaver это попытка сделать ещё один front page по моему мнению ерунда.

  2. 27
    Delete Delete ответил:

    =))))))))

  3. 26
    Сергей Середенин ответил:

    Вот тебе файл записи пользователей в массив
    <?php
    each($_POST);
    // проверяем откуда пришёл
    if($_GET['HTTP_REFERER']!=$_GET['HTTP_HOST']."/reg.html")
    {
    // отправляем отуда он пришёл
    $location=$_GET['HTTP_REFERER'];
    }
    else
    {
    // если пропущен один из параметров
    if(!isset($name) || $name=='' || !isset($pass1) || $pass1=='' || $pass2=='' || !isset($pass2))
    {
    $location=$_GET['HTTP_REFERER'];
    }
    else
    {
    // Тут склеим в одну линию логин и пароль как он записан в базе то есть в строчку
    $addUserLine=$name."=".md5($pass)."/";
    // Проверяем существует ли файл
    if(file_exsist("base.txt"))
    {
    // Открываем для записи
    $fData=fopen("base.txt", "a+");
    /// блокируем для записи
    flock($fData, LOCK_EX);
    // добавляем пользователя
    $addUser=fwrite($fData, $addUserLine);
    // проверяем добавился ли
    if($addUser==strlen($addUserLine))
    {
    //перенаправление после регистраци кудалибо для примера
    $location=$_GET['HTTP_HOST']."private.php;
    }
    // если не добавился то тоже самое можно предложить заново зарегистрироваться
    else
    {
    $location=$_GET['HTTP_HOST']."/reg.html";
    }
    // снимаем блокировку
    flock($fData, LOCK_UN);
    // закрываем файловый поток
    fclose($fData);
    }
    }
    }
    // перенаправляем куда надо
    Header("Location: $location");
    ?>

    вот тебе проверка
    <?php
    each($_POST);
    // если пользователь пришёл не оттуда
    if($_GET['HTTP_REFERER']!=$_GET['HTTP_HOST']."/login.html")
    {
    // отправляем отуда он пришёл
    $location=$_GET['HTTP_REFERER'];
    }
    else
    {
    // если пропущен один из параметров
    if(!isset($name) || $name=='' || !isset($pass) || $pass=='')
    {
    // идёт туда откуда пришли
    $location=$_GET['HTTP_REFERER'];
    }
    else
    {
    // Тут склеим в одну линию логин и пароль как он записан в базе то есть в строчку
    $controlLine=$name."=".md5($pass);
    // Проверяем существует ли файл
    if(file_exsist("base.txt"))
    {
    // открываем файловый поток
    $fData=fopen("base.txt", "r");
    // блокируем
    flock($fData, LOCK_EX);
    // читаем пока файл незакончиться
    $findArr=fread($fData, filesize($fData));
    // разбиваем на массив
    $findLines=$explode("/", $findArr);
    // снимаем блокировку
    flock($fData, LOCK_UN);
    // закрываем поток
    fclose($fData);
    // вроде необязательно
    i=0;
    // перебираем массив
    while(i!=count($findLines))
    {
    // если нашли искомое
    if($findLines[$i]==$controlLine)
    {
    // перенаправляем

    $location=$_GET['HTTP_HOST']."private.php";
    }
    // это оставить
    i++;
    }
    // если не нашли на страницу логина
    $location=$_GET['HTTP_HOST']."/login.html";
    }
    }
    // а вот теперь перенаправляем туда куда надо
    header("Location: $location");
    ?>

    Прочти каждый комментарий

  4. 25
    Алексей Вишняков ответил:

    и еще:
    Переменные из формы(post) получают так
    $_POST['name']

  5. 24
    Delete Delete ответил:

    короче нужно сравнить введеную name ..вот это name передается в action="validate.php"
    и вызвать записанный name из базы base.txt тоже в validate.php
    у меня он так называется $base['nams']
    Соединив всё в одном файле validate.php

  6. 23
    Delete Delete ответил:

    Алексей ..спс об этом не знал..
    А $base – тоже какую-то функцию выполняет

  7. 22
    Алексей Вишняков ответил:

    substr_count($base['nams'],"base.txt") – точку с запятой на конце нужно ставить? и вообще смысл этой строки непонятен.

    name_Edit=$name]; – это вообще непонятно что. Смайлик на конце что-ли?

    if($base['nams']=="$name")это что ты сравниваешь?

    header(location: private.html) – опять точку с запятой забыл

  8. 21
    Алексей Вишняков ответил:

    И еще
    header(location: private.html)
    строку указывают в кавычках

  9. 20
    Delete Delete ответил:

    напишите…плиз ..
    Я уже неделю разбераюсь в этом ,никак не могу разобраться..
    <input type=text name=name>это форма входа
    нужно привязать вот это name с записанным в базе
    В базе вот это..
    ——————————
    $base['nams']= "nick"
    ——————————-
    У меня вот так,но это не работает..
    Прошу сделайте validate.php
    <?php
    substr_count($base['nams'],"base.txt")
    name_Edit=$name];
    if($base['nams']=="$name")
    {
    eacho header(location: private.html)
    {
    ?>

  10. 19
    Айдын Сапаргалиев ответил:

    Linux + PHP IDE (например зенд или пхп дизайнер) + SVN
    и можно кодить и кодить, кодить и кодить :)

  11. 18
    Даниил Малых ответил:

    #17 //ru.php.net/substr_count . Вообще, на php.netесть все.)

    #18 Одной книги порой мало.)Я вот на эту книгу просто молюсь: //www.books.ru/shop/books/367978

  12. 17
    Юрий Лисичкин ответил:

    прочти одну умную книжку и будешь PHP кодером
    мне, например, в свое время вот эта понравилась //oz.by/books/more1013570.html
    ЗЫ. а если ты не пхп кодер, так, имхо, нехер реализовывать простую форму PHP авторизации… и людей тупыми вопросами мучать…

  13. 16
    Delete Delete ответил:

    Можешь рассказать как ей воспользоваться..
    просто я не php кодер..))

  14. 15
    Даниил Малых ответил:

    Попробуй с помощью substr_count искать полностью строку в файле.

  15. 14
    Delete Delete ответил:

    Вот так написал вроде работает!!! файл регистрации пароля
    ——————————————
    <?php
    $mass = file("base.txt");
    $mass[count($mass)-1]= "\$base['".name."'] = \"".$_POST["pass1"]."\";";
    $mass[count($mass)]="?>";
    $fp=fopen("base.txt", "w");
    for($i=0;$i<count($mass);$i++)
    {
    if ($i==count($mass)-1)
    fputs($fp,"\r\n");
    fputs($fp, $mass[$i]);
    }
    ?>
    ————————————–

    В base .txt получается…
    ———————————–
    <?php
    $base['pass'] = "1234";
    ?>
    ————————————

    Вопрос такой как связать данные пароля базы с введенными в форме login.htmlв файле validate.php ????????? =)

    Я пытаюсь как-то так сделать
    Validate.php
    <?php
    require "base.txt"; //подключаем базу пользователей
    if ($base['pass'] =$pass1); вот здесь запара,тк я не знаю правильно я сделал…
    echo require "private.php";
    exit;
    ?>

    ПОМОГИТЕ !!!! )))

  16. 13
    Даниил Малых ответил:

    #13, ага, error_reporting(E_ALL); и вперед.) Хотя…О других средах разработки задумывался, даже хотел на них перелезть. Но все время, как около компа, забываю об этом. Спасибо, что напомнили. =)

  17. 12
    Юрий Лисичкин ответил:

    Даниил Drimean Малых,
    а дебажить с Notepad++ как? через эхо в браузер? (сам так лет пять назад делал… как вспомню – мурашки по коже…)

  18. 11
    Сергей Екимов ответил:

    руки надо отрывать за такой говнокод

  19. 10
    Илья Антипенко ответил:

    вопрос к ТС:
    А мускула на хосте нету?
    Нафиг такие извращения с файлами?!

  20. 9
    Даниил Малых ответил:

    Кстати, по validate.php. Может проще формировать строку, идентичную той, что записываетя в файл, и далее substr_count'омпроверять?

  21. 8
    Даниил Малых ответил:

    #8 Согласен, ужас.) Может, лучше так?

    $content = "/".$_POST["name"]."=".$_POST["pass1"]."/ \r\n";

    $filename = 'base.txt';
    if ( ( file_exists($filename) ) &&( is_writable($filename) ) &&( $file = fopen($filename, 'a') ) )
    {
    if (fwrite($handle, $content) === false )
    {
    echo 'FUCK!';
    }

    }
    else
    {
    echo 'WTF?!';
    }

  22. 7
    Илья Антипенко ответил:

    Юзаю обычный блокнот)
    Или прямо с серва под ssh через "ee"

    Глянул на это и ужаснулся:
    <?php
    $mass = file("base.txt");
    $mass[count($mass)-1]="/".$_POST["name"]."=".$_POST["pass1"]."/";
    $mass[count($mass)]="?>";
    $fp=fopen("base.txt", "w");
    for($i=0;$i<count($mass);$i++)
    {
    if ($i==count($mass)-1)
    fputs($fp,"\r\n");
    fputs($fp, $mass[$i]);
    }

  23. 6
    Алексей Вишняков ответил:

    #4
    Мне Zend Studio нравится

  24. 5
    Даниил Малых ответил:

    Я php кодер.) В Notepad++. Больше не в чем.)

  25. 4
    Даниил Малых ответил:

    Игорь Михайлов, опишите, что имено не работает? Регистрация, или что? Просто полностью во все вникать лень, а зная проблему будет легче.)

  26. 3
    Димка Дроздик ответил:

    установи eclipse себе, вот сборка под php //www.eclipse.org/pdt/downloads/ там и ошибки он тебе сам найдет, и покажет еще как исправить…
    просмотрел код, вникать в суть впадлу, но он явно кривой у тебя, намутили хз знает что..

  27. 2
    Юрий Лисичкин ответил:

    сделай себе нормальную среду разработки и ковыряйся дальше…
    например так //www.netbeans.org/kb/docs/php/configure-php-en...

    ЗЫ. я не пхп кодер – я хз в чем там люди работают…

  28. 1
    Delete Delete ответил:

    Проблема в том ,что половина скриптов с ошибками…
    Я как ни старался,нифига не пашет!!!
    Кто силён в php!!!Подскажите в чём дело!!

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.