РНР программирование

 

 

                             Главная         Программа телепередач, энциклопедии и многие другие справочные материалы

1.1. Программа регистрации и авторизации на вашем сайте

     Надеюсь, что после удачной установки Apache-PHP-MySQL Вы взялись за книги и познакомились с синтаксисом языка PHP и получили представление, для чего нужны базы данных и, как с ними работать. Если этого не произошло, то рекомендую прочитать Главу 2 и 3 из этой статьи, которая посвящена  "программированию вообще, программированию на языке php и основам работы с СУБД MySQL".

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

Как Вы уже поняли, СУБД MySQL устанавливается на ваш компьютер, как сервер. Нам останется только подключиться к серверу MySQL как клиенту, а для этого нам потребуется ввести имя пользователя и пароль. По умолчанию имя пользователя: root , а пароль пустой.  Но сначала запустим  Internet Explorer и в адресной строке наберем с клавиатуры http://localhost/ и нажмите клавишу <Enter>.  На появившейся страничке Denwer найдите строку  phpMyAdmin - администрирование СУБД MySQL  и щелкните мышкой по этой ссылке. В появившемся интерфейсе для работы с MySQL создадим базу данных Mydata.  В окне "Создать новую БД"  напишем имя  Mydata и нажмем на кнопку "Создать". Как вы уже знаете, база данных состоит из таблиц, которые нам так же предстоит создать. В появившемся окне "Создать новую таблицу в БД Mydata" напишем "Имя:" userslist  в окне "Поля: " поставьте 6 – это количество полей (количество колонок) в таблице. Напомню, что таблица состоит из строк и колонок – пересечение стоки и колонки называется "полем" таблицы. Строки имеют числовую нумерацию, а колонки имеют символьное название. Поле называют по названию колонки. Это сильно  напоминает таблицу Excel, если Вы с ними знакомы. И так мы остановились в том месте, где нам надо вносить имена полей: n, name, parol, parol_again, email, url  (номер по порядку, имя, пароль, повторный пароль, адрес email, адрес вашего сайта).

Тип переменной для поля "n"  вместо VARCHAR (по умолчанию) надо выбрать INT (целое число). Для остальных полей выберите тип TEXT. Далее нажмите кнопку сохранить. Таблица будет создана. Забегая вперед, скажу, что создать базу данных и таблицы MySQL возможно,  написав программу на PHP. Но все по порядку. Одна база данных может содержать большое количество таблиц.

            А сейчас напишем простую программу с помощью, которой мы попробуем установить связь с нашей базой данных Mydata.

 

<?php

  // Адрес сервера MySQL

  $dblocation = "localhost";  // имя локального компьютера всегда будет localhost

  // Имя пользователя базы данных

  $dbuser = "root";

  // и его пароль

  $dbpasswd = ""; // без пароля

  $dbcnx = mysql_connect($dblocation, $dbuser, $dbpasswd);

  if (!$dbcnx)   // Если дескриптор равен 0, соединение не установлено

  {

    exit ("<p>В настоящий момент сервер базы данных не доступен, поэтому

             корректное отображение страницы невозможно.</p>");

  }

  else

  {

    echo "<p> Соединение с сервером MySql установлено.</p>";

  }

 mysql_query ("SET NAMES 'cp1251'"); // установим кодовую таблицу

 

 // Выбор базы данных Mydata

  $dbname = "Mydata";

  // соединение с базой данных

  if (!mysql_select_db($dbname, $dbcnx))

  {

    exit( "<p>В настоящий момент база данных не доступна, поэтому

              корректное отображение страницы невозможно.</p>" );

  }

  else { echo "<p>Соединение с базой данных установлено.</p>";}

?>

 

Сохраните этот текст в файле Connect_BD.phpон нам еще пригодится.

Перенесите этот файл в папку C:\WebServers\home\localhost\www\ и попробуйте в браузере выполнить этот скрипт (маленькая программа) написав в адресной строке http://localhost/connect_bd.php

Как видно из приведенной программы для связи с сервером и базой данных MySQL в PHP используются функции. Обязательным является анализ ошибок, и прерывание  работы программы, если произошла ошибка. Для этого используется функция exit().

Далее перечислены функции, которые используются в данном скрипте (программе).

int mysql_connect(

[string hostname [:port] [:/path/to/socket], [string username, [string password]]]);

Функция mysql_connect() возвращает идентификатор соединения, если его установление прошло успешно, или значение false в случае неудачи. По умолчанию параметр host:port имеет значение 'localhost:3306', параметр username хранит владельца процесса сервера,

параметр password - значение пустой строки. Параметр hostname может содержать также и порт или путь к сокету на локальном хосте. Последующий вызов функции с такими же параметрами приведет к возврату идентификатора существующего соединения,

если оно доступно. Кроме того, отсоединение происходит автоматически по завершении работы сценария или при явном вызове функции mysql_close().

int mysql_query(string query, [int link_identifier]);

Функция mysql_query() отправляет запрос серверу. Соединение с сервером задается при помощи параметра link_identifier. Если он не указан, используется последнее установленное соединение. Если доступных соединений нет, предпринимается попытка установить соединение таким образом, как если бы функция mysql_connect() была вызвана без аргументов. Строка запроса query не должна завершиться двоеточием. При успешном выполнении функция возвращает значение true, в случае неудачи - false. Тем не менее, значение true не гарантирует, что в запросе были задействованы какие-либо строки или функция возвратила результирующий набор.

int mysql_select_db(string database_name, [int link_identifier]);

Функция mysql_select_db() устанавливает текущую активную базу данных на сервере. Соединение с сервером задается при помощи параметра link_identifier. Если он не указан, используется последнее установленное соединение. Если доступных соединений нет, функция пытается установить новое соединение.

Обратите внимание на описание функции. Если параметр написан в квадратных скобках, то он может быть пропущен (не обязателен) при применении функции.

            Язык PHP имеет огромное количество функций, которые используются для программирования. В общем, все современные языки имеют огромное количество функций – это делает программирование удобным. И, тем не менее, программисты пишут все новые и новые функции. Видимо, этот процесс бесконечный, как познание окружающего мира.

            А сейчас рассмотрим программу авторизации пользователей на сайте. Это первый простой вариант программы. Для этого имя пользователя и пароль сохраним в базе данных MySql  в таблице userslist (база данных Mydata). Конечно, создадим предварительно таблицу userslist в базе данных Mydata с полями (имена колонок):

n(int), name(text),  parol(text), parol_again(text), email((text), url(text) в скобках указан тип (или формат) полей. Шифровать пароль пока не будем. Надеюсь, что Вы знакомы с HTML программированием хорошо и мы не будет на каждом шагу объяснять теги.

Html-форма запроса на авторизацию и регистрации называется password.html

<html>

<head>

  <title>Регистрация на сервере</title>

</head>

<body>

      <h2><p><b> Форма для ввода данных</b></p></h2>

<table>

<form  action=Password.php method=POST>

<tr><td>Имя:</td><td><input type=text name=name></td></tr>

<tr><td>Пароль:</td><td><input type=password name=parol></td></tr>

<tr><td>Подтверждение пароля:</td><td><input type=password name=parol_again></td></tr>

<tr><td>e-mail:</td><td><input type=text name=email></td></tr>

<tr><td>URL:</td><td><input type=text name=url></td></tr>

<tr><td></td><td><input type=submit value='Зарегистрировать'></td></tr>

</form>

</table>

</body>

</html>

В данной HTML странице мы ввели форму, для обработки событий которой используется программа  Password.php. Для передачи данных из формы  используется метод POST.

Далее приведен файл password.php

<?php

// для регистрации необходимо ввести имя, пароль, подтверждение пароля,

// электронный адрес email и не обязательно url адрес. 

// Создайте предварительно таблицу userslist в базе данных Mydata с полями (имена колонок):

// n(int), name(text),  parol(text), parol_again(text), email((text), url(text) в скобках указан формат       // полей

// Обработчик HTML-формы

// 1. Блок проверки правильности ввода данных

 // Удаляем лишние пробелы (функция trim()). Здесь мы работаем с суперглобальным массивом  

 // $_POST[], хотя можно было ввести непосредственно php-переменные $name, $parol и т.д. 

 $_POST['name'] = trim($_POST['name']);

  $_POST['parol'] = trim($_POST['parol']);

  $_POST['parol_again'] = trim($_POST['parol_again']);

  // Проверяем, не пуст ли суперглобальный массив $_POST

  if(empty($_POST['name'])) {echo "Суперглобальный массив пуст!"; exit();}

  // Проверяем, правильно ли заполнены обязательные поля

  if(empty($_POST['name'])) exit('Поле "Имя" не заполнено');

  if(empty($_POST['parol'])) echo 'Первое из полей "Пароль" не заполнено';

  if(empty($_POST['parol_again'])) exit('Второе из полей "Пароль"  не заполнено');

  if($_POST['parol'] != $_POST['parol_again']) exit('Пароли не совпадают');

  // Если введен e-mail, проверяем его на соответствие

  if(!empty($_POST['email']))

  {

    if(!preg_match("|^[-0-9a-z_]+@[-0-9a-z_]+\.[a-z]{2,6}$|i",

                   $_POST['email']))

    {

      exit('Поле "E-mail" должно соответствовать формату somebody@somewhere.ru');

    }

  }

  // Если на сервере не включены "магические кавычки",

  // обрабатываем введенные пользователями данные

  // функцией mysql_escape_string()

  if (!get_magic_quotes_gpc())

  {

    $_POST['name']  = mysql_escape_string($_POST['name']);

    $_POST['parol']  = mysql_escape_string($_POST['parol']);

    $_POST['email'] = mysql_escape_string($_POST['email']);

    $_POST['url']  = mysql_escape_string($_POST['url']);

  }

  // 2. Блок проверки имени на уникальность

  // Устанавливаем соединение с базой данных

  Include "Connect_BD.php";  

// подключаем файл Connect_BD.php для соединения с базой данных Mydata

 // Проверяем, не было ли переданное имя зарегистрировано ранее

  $query = "SELECT COUNT(*) FROM userslist WHERE name = '$_POST[name]'";

  $usr = mysql_query($query);

  if(!$usr) exit("Ошибка 1 - ".mysql_error());

  $total = mysql_result($usr, userslist.name);

# отладочная печать # echo "</p>total = $total если равно нулю, то имя не зарегистрировано</p>";

  if($total > 0)

  {

    exit("Данное имя уже зарегистрировано, пожалуйста, выберите другое");

  }

// 3. Блок регистрации пользователя

// Формируем и выполняем SQL-запрос на  добавление нового пользователя

// по формату MySQL значения хранятся в суперглобальном массиве $_POST[]

  $query = "INSERT INTO userslist ( `name` , `parol` , `parol_again` , `email` , `url` )

   VALUES('$_POST[name]','$_POST[parol]', '$_POST[parol_again]', '$_POST[email]', '$_POST[url]')";

  if(mysql_query($query))

  {

    echo "<p>Все в порядке</p>";

  } else exit("Ошибка при добавлении данных - ".mysql_error());

 

?>  // закончили файл password.php

После проверки работы этой программы, запустите интерфейс PhpMyAdmin и посмотрите, что у вас записалось в таблицу userslist в базе данных Mydata. Очень приятно и интересно увидеть результаты своего труда. Для того, что бы убедится в правильности работы алгоритма в программу обязательно необходимо вставлять "отладочную печать". И никогда не удаляйте эти строки после того, как убедитесь, что алгоритм программы (или функция) работает правильно, а "закомментируйте" эти операторы – они могут пригодиться. Для отладочной печати выводите значения переменных, которые для вас вызывают сомнения  или интерес. И обязательным для программы является запись комментариев, которые объясняют ваш алгоритм и придают вам больше уверенности в том, что Вы делаете.

В следующей главе мы продолжим программировать регистрацию и авторизацию на сайте и покажем, как зашифровать пароль с помощью метода MD5. А главное разберем подробно алгоритм регистрации и авторизации.

 Главная 

1. Что такое PHP?

1. 1. Применение РНР при программировании сайтов

1.2. Программа регистрации и авторизации на вашем сайте

1.3. Программа регистрации и авторизации на сайте с шифрованием пароля

2. Глава посвящена программированию
вообще и программированию в частности
сайтов

3. MySQL элементы управления и взаимодействие с PHP

4. Русский перевод файла "httpd.conf" Для Apache 2.0

5. Русский перевод файла "php.ini"

 

При использовании данного материала, ссылка на сайт ОБЯЗАТЕЛЬНА