Статьи

Членство пользователя с PHP

Учебник для начинающих! Независимо от того, куда вы заходите в Интернет, почти везде вы найдете основной продукт — регистрацию пользователей. Независимо от того, хотите ли вы, чтобы ваши пользователи зарегистрировались для обеспечения безопасности или просто для дополнительной функции, нет причин не делать этого с этим простым руководством. В этом уроке мы рассмотрим основы управления пользователями, и в итоге получим простую личную зону, которую вы можете внедрить на своем веб-сайте.

Если вам нужна дополнительная помощь или ярлык, посмотрите список поставщиков услуг PHP в Envato Studio. Эти опытные разработчики могут помочь вам с быстрым исправлением ошибок и разработкой целого приложения с нуля. Так что просто просмотрите поставщиков, прочитайте отзывы и рейтинги, и выберите правильный для вас.

Поставщики услуг PHP на Envato Studio

В этом уроке мы рассмотрим каждый шаг создания системы управления пользователями, а также систему обмена сообщениями между пользователями. Мы собираемся сделать это с помощью PHP, с базой данных MySQL для хранения всей пользовательской информации. Это руководство предназначено для начинающих PHP, поэтому никаких предварительных знаний не требуется — на самом деле, вам может стать скучно, если вы опытный пользователь PHP!

Это руководство предназначено как базовое введение в сеансы и использование баз данных в PHP. Хотя конечный результат этого урока может показаться вам не сразу полезным, навыки, которые вы получите от этого урока, позволят вам создать собственную систему членства; удовлетворяя ваши собственные потребности.

Прежде чем начать этот урок, убедитесь, что у вас есть следующая информация:

  • Имя хоста базы данных — это сервер, на котором размещена ваша база данных, в большинстве случаев это просто localhost.
  • Имя базы данных, имя пользователя базы данных, пароль базы данных — перед запуском этого руководства вы должны создать базу данных MySQL, если у вас есть такая возможность, или иметь под рукой информацию для подключения к существующей базе данных. Эта информация необходима на протяжении всего урока.

Если у вас нет этой информации, то ваш хостинг-провайдер сможет предоставить ее вам.

Теперь, когда у нас нет формальностей, давайте приступим к обучению!

Как указано во введении, вам нужна база данных, чтобы продолжить этот пункт в руководстве. Для начала мы собираемся создать таблицу в этой базе данных для хранения информации о наших пользователях.

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

  • UserID (первичный ключ)
  • имя пользователя
  • пароль
  • Адрес электронной почты

В терминах базы данных первичный ключ — это поле, которое однозначно идентифицирует строку. В этом случае UserID будет нашим Первичным ключом. Поскольку мы хотим, чтобы это увеличивалось при каждой регистрации пользователя, мы будем использовать специальную опцию MySQL — auto_increment .

Запрос SQL для создания нашей таблицы приведен ниже и обычно выполняется на вкладке «SQL» в phpMyAdmin.

1
2
3
4
5
6
CREATE TABLE `users` (
`UserID` INT(25) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`Username` VARCHAR(65) NOT NULL ,
`Password` VARCHAR(32) NOT NULL ,
`EmailAddress` VARCHAR(255) NOT NULL
);

Чтобы упростить создание нашего проекта, мы собираемся создать базовый файл, который мы можем включить в каждый из создаваемых нами файлов. Этот файл будет содержать информацию о соединении с базой данных, а также некоторые переменные конфигурации, которые помогут нам в этом.

Начните с создания нового файла: base.php и введите в него следующий код:

01
02
03
04
05
06
07
08
09
10
11
<?php
session_start();
 
$dbhost = «localhost»;
$dbname = «database»;
$dbuser = «username»;
$dbpass = «password»;
 
mysql_connect($dbhost, $dbuser, $dbpass) or die(«MySQL Error: » . mysql_error());
mysql_select_db($dbname) or die(«MySQL Error: » . mysql_error());
?>

Давайте посмотрим на некоторые из этих строк, не так ли? Здесь есть несколько функций, которые мы использовали и еще не объяснили, поэтому давайте быстро рассмотрим их и разберемся с ними — если вы уже понимаете основы PHP, вы можете пропустить это объяснение.

1
session_start();

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

1
2
mysql_connect($dbhost, $dbuser, $dbpass) or die(«MySQL Error: » . mysql_error());
mysql_select_db($dbname) or die(«MySQL Error: » . mysql_error());

Каждая из этих функций выполняет отдельную, но связанную задачу. Функция mysql_connect соединяет наш скрипт с сервером базы данных, используя информацию, которую мы предоставили выше, а mysql_select_db функция mysql_select_db выбирает, какую базу данных использовать со скриптом. Если ни одна из функций не завершается, функция die автоматически включается и останавливает обработку сценария, оставляя всех пользователей с сообщением об ошибке MySQL.

Самый важный пункт на нашей странице — это первая строка PHP; эта строка будет включать файл, который мы создали выше (base.php), и по существу позволит нам получить доступ к чему-либо из этого файла в нашем текущем файле. Мы сделаем это с помощью следующей строки кода PHP. Создайте файл с именем index.php и поместите этот код вверху.

1
<?php include «base.php»;

Первое, что мы собираемся сделать для нашего веб-интерфейса, — это создать страницу, на которой пользователи могут вводить свои данные для входа в систему или, если они уже вошли на страницу, где они могут выбирать, что они затем хотят сделать. В этом руководстве я предполагаю, что пользователи имеют базовые знания о том, как работает HTML / CSS, и поэтому не собираюсь подробно объяснять этот код; на данный момент эти элементы не будут стилизованы, но мы сможем изменить это позже, когда создадим нашу таблицу стилей CSS.

Используя файл, который мы только что создали ( index.php ), введите следующий HTML-код ниже строки PHP, которую мы уже создали.

1
2
3
4
5
6
7
8
9
<!DOCTYPE html PUBLIC «-//W3C//DTD XHTML 1.0 Strict//EN» «http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd»>
<html xmlns=»http://www.w3.org/1999/xhtml»>
<head>
<meta http-equiv=»Content-Type» content=»text/html; charset=utf-8″ />
<title>User Management System (Tom Cameron for NetTuts)</title>
<link rel=»stylesheet» href=»style.css» type=»text/css» />
</head>
<body>
<div id=»main»>

Перед тем, как вывести остальную часть страницы, у нас есть несколько вопросов:

  1. Пользователь уже вошел в систему?
  • Да, нам нужно показать им страницу с вариантами выбора.
  • Нет — мы переходим к следующему вопросу.
  • Пользователь уже представил свои данные для входа?
    • Да, нам нужно проверить их данные, и если они будут правильными, мы зарегистрируем их на сайте.
    • Нет — мы переходим к следующему вопросу.
  • Если на оба ответа ответили « Нет» , теперь мы можем предположить, что нам нужно отобразить форму входа для пользователя.
  • Эти вопросы фактически являются теми же вопросами, которые мы собираемся реализовать в нашем PHP-коде. Мы собираемся сделать это в форме if statements . Не вводя ничего ни в один из ваших новых файлов, давайте взглянем на логику, которую мы собираемся использовать в первую очередь.

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    <?php
    if(!empty($_SESSION[‘LoggedIn’]) && !empty($_SESSION[‘Username’]))
    {
        // let the user access the main page
    }
    elseif(!empty($_POST[‘username’]) && !empty($_POST[‘password’]))
    {
        // let the user login
    }
    else
    {
        // display the login form
    }
    ?>

    Выглядит запутанно, не так ли? Давайте разделим его на более мелкие разделы и рассмотрим их по одному.

    1
    2
    3
    4
    if(!empty($_SESSION[‘LoggedIn’]) && !empty($_SESSION[‘Username’]))
    {
        // let the user access the main page
    }

    Когда пользователь входит на наш веб-сайт, мы собираемся сохранить его информацию в сеансе — в любой момент после этого мы можем получить доступ к этой информации в специальном глобальном массиве PHP — $_SESSION . Мы используем empty функцию, чтобы проверить, является ли переменная пустой, с оператором ! перед ней. Поэтому мы говорим:

    Если переменная $ _SESSION [‘LoggedIn’] не пуста, а $ _SESSION [‘Username’] не пуста, выполните этот фрагмент кода.

    Следующая строка работает таким же образом, только на этот раз с использованием глобального массива $_POST . Этот массив содержит любые данные, которые были отправлены из формы входа, которую мы создадим позже в этом руководстве. Последняя строка будет выполняться, только если не выполнено ни одно из предыдущих утверждений; в этом случае мы отобразим пользователю форму входа.

    Итак, теперь, когда мы понимаем логику, давайте разберемся между этими разделами. В вашем файле index.php введите ниже то, что у вас уже есть.

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    <?php
    if(!empty($_SESSION[‘LoggedIn’]) && !empty($_SESSION[‘Username’]))
    {
         ?>
     
         <h1>Member Area</h1>
         <pThanks for logging in!
          
         <?php
    }
    elseif(!empty($_POST[‘username’]) && !empty($_POST[‘password’]))
    {
        $username = mysql_real_escape_string($_POST[‘username’]);
        $password = md5(mysql_real_escape_string($_POST[‘password’]));
         
        $checklogin = mysql_query(«SELECT * FROM users WHERE Username = ‘».$username.»‘ AND Password = ‘».$password.»‘»);
         
        if(mysql_num_rows($checklogin) == 1)
        {
            $row = mysql_fetch_array($checklogin);
            $email = $row[‘EmailAddress’];
             
            $_SESSION[‘Username’] = $username;
            $_SESSION[‘EmailAddress’] = $email;
            $_SESSION[‘LoggedIn’] = 1;
             
            echo «<h1>Success</h1>»;
            echo «<p>We are now redirecting you to the member area.</p>»;
            echo «<meta http-equiv=’refresh’ content=’=2;index.php’ />»;
        }
        else
        {
            echo «<h1>Error</h1>»;
            echo «<p>Sorry, your account could not be found. Please <a href=\»index.php\»>click here to try again</a>.</p>»;
        }
    }
    else
    {
        ?>
         
       <h1>Member Login</h1>
         
       <p>Thanks for visiting!
         
        <form method=»post» action=»index.php» name=»loginform» id=»loginform»>
        <fieldset>
            <label for=»username»>Username:</label><input type=»text» name=»username» id=»username» /><br />
            <label for=»password»>Password:</label><input type=»password» name=»password» id=»password» /><br />
            <input type=»submit» name=»login» id=»login» value=»Login» />
        </fieldset>
        </form>
         
       <?php
    }
    ?>
     
    </div>
    </body>
    </html>

    Надеемся, что первый и последний блоки кода не слишком смущают вас. Что нам действительно нужно застрять сейчас — это то, для чего вы все пришли к этому руководству — код PHP. Сейчас мы рассмотрим второй раздел по одной строке за раз, и я объясню, для чего предназначен каждый фрагмент кода.

    1
    2
    $username = mysql_real_escape_string($_POST[‘username’]);
       $password = md5(mysql_real_escape_string($_POST[‘password’]));

    Для этого нужно объяснить две функции. Во-первых, mysql_real_escape_string — очень полезная функция для очистки входных данных базы данных. Это не безопасная мера, но она защитит большинство злонамеренных хакеров, удалив ненужные части того, что было введено в нашу форму входа. Во-вторых, md5 . Здесь было бы невозможно вдаваться в подробности, но эта функция просто шифрует все, что ему передается — в данном случае пароль пользователя — чтобы не дать посторонним глазам прочесть его.

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    $checklogin = mysql_query(«SELECT * FROM users WHERE Username = ‘».$username.»‘ AND Password = ‘».$password.»‘»);
        
       if(mysql_num_rows($checklogin) == 1)
       {
            $row = mysql_fetch_array($checklogin);
           $email = $row[‘EmailAddress’];
            
           $_SESSION[‘Username’] = $username;
           $_SESSION[‘EmailAddress’] = $email;
           $_SESSION[‘LoggedIn’] = 1;

    Здесь у нас есть ядро ​​нашего кода входа в систему; во-первых, мы запускаем запрос к нашей базе данных. В этом запросе мы ищем все, что касается члена, имя пользователя и пароль которого соответствуют значениям нашего $username и $password которые предоставил пользователь. На следующей строке у нас есть оператор if, в котором мы проверяем, сколько результатов мы получили — если результатов нет, этот раздел не будет обработан. Но если есть результат, мы знаем, что пользователь существует, и поэтому мы собираемся войти в него.

    Следующие две строки предназначены для получения адреса электронной почты пользователя. У нас уже есть эта информация из запроса, который мы уже выполнили, поэтому мы можем легко получить доступ к этой информации. Сначала мы получаем массив данных, которые были получены из базы данных — в этом случае мы используем функцию PHP mysql_fetch_array . Затем я присвоил значение поля EmailAddress переменной, которую мы будем использовать позже.

    Теперь мы устанавливаем сессию. Мы сохраняем имя пользователя и адрес электронной почты в сеансе вместе со специальным значением, чтобы мы знали, что они вошли в систему, используя эту форму. После того, как все это сказано и сделано, они будут перенаправлены в личный кабинет, используя META REFRESH в коде.

    Итак, как наш проект сейчас выглядит для пользователя?

    Большой! Пришло время двигаться дальше, чтобы убедиться, что люди действительно могут попасть на ваш сайт.

    Хорошо, что на вашем сайте есть форма для входа, но теперь нам нужно позволить пользователю использовать ее — нам нужно создать форму для входа. Создайте файл с именем register.php и вставьте в него следующий код.

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    <?php include «base.php»;
    <!DOCTYPE html PUBLIC «-//W3C//DTD XHTML 1.0 Strict//EN» «http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd»>
    <html xmlns=»http://www.w3.org/1999/xhtml»>
    <meta http-equiv=»Content-Type» content=»text/html; charset=utf-8″ />
     
    <title>User Management System (Tom Cameron for NetTuts)</title>
    <link rel=»stylesheet» href=»style.css» type=»text/css» />
    </head>
    <body>
    <div id=»main»>
    <?php
    if(!empty($_POST[‘username’]) && !empty($_POST[‘password’]))
    {
        $username = mysql_real_escape_string($_POST[‘username’]);
        $password = md5(mysql_real_escape_string($_POST[‘password’]));
        $email = mysql_real_escape_string($_POST[’email’]);
         
         $checkusername = mysql_query(«SELECT * FROM users WHERE Username = ‘».$username.»‘»);
          
         if(mysql_num_rows($checkusername) == 1)
         {
            echo «<h1>Error</h1>»;
            echo «<p>Sorry, that username is taken. Please go back and try again.</p>»;
         }
         else
         {
            $registerquery = mysql_query(«INSERT INTO users (Username, Password, EmailAddress) VALUES(‘».$username.»‘, ‘».$password.»‘, ‘».$email.»‘)»);
            if($registerquery)
            {
                echo «<h1>Success</h1>»;
                echo «<p>Your account was successfully created. Please <a href=\»index.php\»>click here to login</a>.</p>»;
            }
            else
            {
                echo «<h1>Error</h1>»;
                echo «<p>Sorry, your registration failed. Please go back and try again.</p>»;
            }
         }
    }
    else
    {
        ?>
         
       <h1>Register</h1>
         
       <p>Please enter your details below to register.</p>
         
        <form method=»post» action=»register.php» name=»registerform» id=»registerform»>
        <fieldset>
            <label for=»username»>Username:</label><input type=»text» name=»username» id=»username» /><br />
            <label for=»password»>Password:</label><input type=»password» name=»password» id=»password» /><br />
            <label for=»email»>Email Address:</label><input type=»text» name=»email» id=»email» /><br />
            <input type=»submit» name=»register» id=»register» value=»Register» />
        </fieldset>
        </form>
         
        <?php
    }
    ?>
     
    </div>
    </body>
    </html>

    Итак, не так много нового PHP, который мы еще не изучили в этом разделе. Давайте просто взглянем на этот SQL-запрос и посмотрим, сможем ли мы выяснить, что он делает.

    1
    $registerquery = mysql_query(«INSERT INTO users (Username, Password, EmailAddress) VALUES(‘».$username.»‘, ‘».$password.»‘, ‘».$email.»‘)»);

    Итак, здесь мы добавляем пользователя в нашу базу данных. На этот раз вместо извлечения данных мы вставляем их; поэтому мы сначала указываем, в какие столбцы вводим данные (не забывайте, что наш UserID будет увеличиваться автоматически). В области VALUES() мы сообщаем, что помещать в каждый столбец; в этом случае наши переменные, которые пришли из ввода пользователя. Итак, давайте попробуем; Как только вы зарегистрируетесь в новой форме регистрации, вот что вы увидите в Личном кабинете.

    Мы почти в конце этого раздела, но есть еще одна вещь, в которой мы нуждаемся, прежде чем мы закончим, — способ выхода пользователя из своих учетных записей. Это очень легко сделать (к счастью для нас); создайте новый logout.php именем logout.php и введите в него следующее.

    1
    2
    <?php include «base.php»;
    <meta http-equiv=»refresh» content=»0;index.php»>

    В этом мы сначала сбрасываем наш глобальный массив $_SESSION , а затем полностью уничтожаем сессию.

    И это конец этого раздела и конец кода PHP. Давайте теперь перейдем к нашему последнему разделу.

    Я не собираюсь объяснять многое в этом разделе — если вы не понимаете HTML / CSS, я очень рекомендую, чтобы из множества отличных учебников на этом сайте вы могли начать. Создайте новый файл с именем style.css и введите в него следующее; это будет стилизовать все страницы, которые мы создали до сих пор.

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    * {
        margin: 0;
        padding: 0;
    }
    body {
        font-family: Trebuchet MS;
    }
    a {
        color: #000;
    }
    a:hover, a:active, a:visited {
        text-decoration: none;
    }
    #main {
        width: 780px;
        margin: 0 auto;
        margin-top: 50px;
        padding: 10px;
        border: 1px solid #CCC;
        background-color: #EEE;
    }
    form fieldset { border: 0;
    form fieldset p br { clear: left;
    label {
        margin-top: 5px;
        display: block;
        width: 100px;
        padding: 0;
        float: left;
    }
    input {
        font-family: Trebuchet MS;
        border: 1px solid #CCC;
        margin-bottom: 5px;
        background-color: #FFF;
        padding: 2px;
    }
    input:hover {
        border: 1px solid #222;
        background-color: #EEE;
    }

    Теперь давайте посмотрим на несколько скриншотов того, как должен выглядеть наш финальный проект:

    Форма входа.

    Членская зона.

    Регистрационная форма.

    Вот и все! Теперь у вас есть личный кабинет, который вы можете использовать на своем сайте. Я вижу, как многие люди качают головами и кричат ​​на мониторы, что для них это бесполезно — вы правы. Но я надеюсь, что любой новичок в PHP научился основам использования базы данных и сеансов для хранения информации. Жизненно важные навыки для создания любого веб-приложения.