Урок 2. Конструктивный подход. Описание процедуры авторизации.

Как только вы возьметесь за написание какого-либо скрипта или фрагмента кода, вы непременно встретитесь со многими трудностями, многое введет вас в заблуждение, что то не сразу получиться. Чтобы избежать ошибок советую Вам не торопиться, уроки по php, которые я буду публиковать Вам обязательно помогут.

Изначально моя тактика была на предоставление пользователям исчерпывающей информации по каждой функции,  описанием из документации, примером исполнения, синтаксиса, но  я решил что это будет  лишней нагружающей информацией, которая забьет вашу  ясную голову =)  и будет мешать вам идти дальше, поэтому мои уроки php программирования будут исключительно конструктивные. Что это значит? Давайте для примера рассмотрим следующий случай: мы захотели написать гостевую книгу. Что нам необходимо знать для реализации нашей цели? Так это то, из чего будет состоять наш код. Я буду писать какие функции используются, описание их синтаксиса, соединение блоков в единое целое, разъяснение каждого шага  моих действий, чтобы у вас не возникало вопросов типа – «Че за нах ваще?» и  «а откуда это нарисовалось?».

Поверьте, даже самые простые вещи потребуют от вас знаний и сообразительности. Скажем вам потребуется создать сбор данных, или наоборот вывод каких то данных из файла(гостевая книга, счетчик, доска объявлений итд), мы должны уже на этом этапе определится какие функции будут  использованы для написания скрипта, для вышеперечисленных – это обязательно функции работы с файлами, создание циклов и условий, при которых наш скрипт должен запускаться.

Вспомните как в детстве вы играли в конструктор,что вы делали для создания машины? Спорю на бутылку пива что вам нужны были  рама, 2 оси, 4 колеса и разумеется крепежные элементы, при помощи которых это все соединялось. В нашем случае детали – это стандартные функции PHP.  Отсюда вывод написать скрипт – сконструировать его.

Моим первым примером будет скрипт простой авторизации пользователя на сервере.

Конструкция

  • form.html – форма ввода данных, а именно логина и пароля. Это будет простой html-файл, который мы разберем по ходу дела.
  • form.php – это наш скрипт, который будет обрабатывать полученные данные из form.html.

Детали

form.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<html>

<head>
  <title>Авторизация</title>
</head>

<body>
     <form name="" action="form.php" method="post">
      логин:<input name="login" type="text" value=""><br/>
      пароль:<input name="pass" type="password" value=""><br/><br/>
      <input type="submit" value="[ войти ]">
</form>
 </body>

</html>

Прошу обратить внимание на тег <form></form> , он отвечает за передачу данных у него есть несколько важных атрибутов:
1. method - это принцип, по которому данные буду передаваться из формы.
значение: может быть post или get , вам лично советую передавать данные
первым методом .
2. action – он указывает куда передавать наши данные, а точнее здесь прописывается имя файла, отвечающего за обработку.
Внутри тега <form></form> есть вложенные теги input, у них тоже есть свои атрибуты:
name – это имя переменной ,которое будет передавать значение в наш скрипт, value – значение по умолчанию,
type - тип данных вводимых в поле ввода, вы наверняка замечали что при авторизации, пароль обычно скрывается звездочками, это получается тогда, когда type принимает значение password.

Ну и главный исполнительный элемент, это кнопка. Это тоже тег input, в котором type принимает значение submit (отправить). А также value и name, которое тоже необходимо присваивать кнопке. Value в данном случае, это слово, котрое отображается на кнопке.

Можете скопировать этот фрагмент и вставить в PHP Expert Editor, и сохранить с именем form.htm, поставьте расширение файла именно htm, потому что он не содержит исполянемого кода.

form.php
Скрипт будет представлять собой валидатор, т.е. будет происходить проверка на правильность введенных данных.

1
2
3
4
5
<?php

//Конфигурация
$login = "admin";   //Логин
$pass = "extra";    //Пароль админа

Обратите внимание на нашу форму, как видите поле для логина носит имя login, поле ввода пароля pass, т.к. метод передачи был post, будем принимать эти данные через специальный массив $_POST['имя_переменной']. Массив это определенный вид переменной, в которой соответствующему ключу соотвествует определенное значение. Мы не будем углубляться в массивы , к ним мы вернемся позднее.

В нашем скрипте данные введенные в форме будут содержаться в переменной $_POST['login'] и $_POST['pass'],  с ними мы и продолжим работать.

1
2
3
4
5
6
//Проверка и чистка входящих данных

$flogin = stripslashes(substr($_POST['login'],0,15));

$fpass = stripslashes(substr($_POST['pass'],0,15));
//Вырезаем слэши и обрезаем до 15 знаков

Теперь мы имеем 2 отфильтрованные переменные $flogin и $fpass, с ними и продолжим работать. Для того чтобы проверить, нам надо сравнить полученные данные, с данными изначально сконфигурированными применяем простые условия.

1
2
3
4
5
6
7
8
if($flogin == $login) {
  if($pass == $fpass) { echo "Здравствуйте $flogin<br>вы авторизованы";    }
                    else {echo "не верный пароль";}
                      }

else { echo "неверное имя пользователя"; }

?>

А теперь разберем детально как производилась проверка.

Первое условие: если введенный логин (переменная $flogin) равен заданному (переменная $login) получаем значение TRUE и идем дальше, ко второму условию, иначе выводим сообщение об ошибке.

Второе условие: вложенное в первое, если введенный пароль равен заданному получаем значение TRUE и выводи сообщение об удачной авторизации, иначе выводим сообщение об ошибке.

Соединяя все это в единое целое получаем рабочий скрипт. Готовый пример можно посмотреть здесь (имя пользователя admin, пароль extra) .

Для начинающих php программистов, я советую под рукой держать документацию, которая всегда поможет в правильности написания той, или иной функции, подскажет синтаксис, ну и небольшой пример.
Наша задача – научится программировать.

Google Bookmarks БобрДобр.ru Memori.ru rucity.com МоёМесто.ru Mister Wong
rss-лентаПодпишись на RSS, впереди много интересного.
Рубрика: уроки | Отзывов: 66

66 Responses to “Урок 2. Конструктивный подход. Описание процедуры авторизации.”

Страниц: « 7 6 5 4 [3] 2 1 » Show All

  1. 30
    123No Gravatar Says:

    Почему нельзя было убавить количество скобок? Так всё прекрасно работает.

    if($flogin == $login)
    {
    if($pass == $fpass)
    echo «Здравствуйте $floginвы авторизованы»;
    else echo «не верный пароль»;
    }

    else echo «неверное имя пользователя»;

  2. 29
    ОлегNo Gravatar Says:

    А как сделать чтобы при регистрации выбиралось (например, профессия – инженер и рабочий) и при входе каждый направлялся на личную страницу, соответствующую специальности?

  3. 28
    BalooNo Gravatar Says:

    Для начинающих php программистов, я советую под рукой держать документацию, которая всегда поможет в правильности написания той, или иной функции, подскажет синтаксис, ну и небольшой пример.

    Может лучше поможешь найти????
    Не знаю как у кого у меня под рукой ничего нету=((((

  4. 27
    АнтонNo Gravatar Says:

    В тексте урока вот в этом куске кода неправильно стоят скобочки, должно быть так:

    1
    2
    3
    4
    5
    if ($login == $flogin) {
    if ($pass == $fpass) { echo "Вы авторизовались!";}
                    else {echo "Неверный пароль!";}
                             }
            else {echo "Неверное имя пользователя!";}
  5. 26
    АнатолийNo Gravatar Says:

    Андрей, тогда вот так:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <?php
    $data=file("login.txt"); // Читаем файл в массив
    $i=0; //Четный символ -логин в файле
    $j=1; //Нечетный -пароль
    $flogin = stripslashes(substr($_POST['login'],0,15)); //Убираем лишние символы из запроса
    $fpass = stripslashes(substr($_POST['pass'],0,15)); //Убираем лишние символы из запроса
    while(isset($data[$i])){ //Индексируем массив $data[]
        $data[$i] = substr($data[$i],0,-2);  //Удаляем из каждой строки символ новой строки
        $data[$j] = substr($data[$j],0,-2);  //Тоже самое для нечетных строк
        if($data[$i] == $flogin){ //Если логин из запроса совпадает с логином из файла
            if($data[$j] == $fpass){ //И если пароль из запроса совпадает с паролем из файла
                echo "Вы вошли как пользователь: ".$flogin;  //Выводим привествие
                exit;
            } else { //Если пароль введен неправильно говорим об этом пользователю
                 echo "Пароль не подходит!<br>";
                 exit;}
        } else {}
        $i +=2;
        $j +=2;
        if(!(isset($data[$i]))) {  //Если логин неверно введен выводим сообщение
            echo "Логин введен не верно";
        }
    }
    ?>

    В конце файла должна быть новая строка, иначе в последнем пароле будет \nEOF вместо \n.

  6. 25
    АндрейNo Gravatar Says:

    спасибо большое *salute*..
    и ещо один вопросикБД(текстовом файле) хранится не один пользователь ( логин(в первой строке)и пароль(во второй))..
    Допустим в третий строке логин 2 польз..четвертой его пароль..и тп..
    тоесть в непарной строке-логин, а в непарной -пароль..
    как тогда? )

  7. 24
    АлександрNo Gravatar Says:

    Можно сделать проще:

    1
    2
    3
    4
    5
    6
    7
    $data=file("login.txt");
    $log=$data[0]; //Ваш логин в файле
    $pas=$data[1];//Ваш пароль на второй строке
    if($log==$_POST['login']) {
    if($pas==$_POST['passwd']
    {echo "Вход";}  else {echo “Неверные данные”;}
    }
  8. 23
    АндрейNo Gravatar Says:

    здраствуйте..подскажите пожалуиста как вместо БД для хранения логинов и паролей использовать текстовый файл

    $f=fopen(«login.txt»,»a+t») or die(«Не могу создать файл»);
    //вручную вбиваю в 1-строке -логин, в 2-строке-пароль..

    как осуществить проверку введенного логина и пароля с теми что храняться в текстовом файле..если можна небольшой примерчик..заранее спасибо..

    while(!feof($f)) {
    $log=fgets($f);//лог–логин с БД в текстовом файле
    if($log==$_POST['login']) {
    $pas=fgets($f);//пароль-пасс с текстового файла
    if($pas==$_POST['passwd']
    {echo «Вход» else echo «Неверные данные»;}

  9. 22
    УрриNo Gravatar Says:

    Здравствуйте!
    Подскажите, пожалуйста, почему переменные из массива $_POST при выводе интерпретируются как цифры – выводятся 0 (когда ввожу символы) или цифры (когда ввожу цифры) ?

  10. 21
    АлександрNo Gravatar Says:

    Здравствуйте!
    Хотелось бы задать вам вопрос. Аозможно ли в данном случае добавлять лополнительных пользователей с другими паролями и логинами?
    Заранее спасибо

    Обратитесь к 14 уроку

Страниц: « 7 6 5 4 [3] 2 1 » Show All

Leave a Reply