Давайте теперь реализуем регистрацию. Для
этого сделаем отдельную страницу register.php
.
По заходу на эту страницу, пользователь должен
увидеть форму, в которую он должен вбить
желаемый логин и пароль:
<form action="" method="POST">
<input name="login">
<input name="password" type="password">
<input type="submit">
</form>
По нажатию на кнопку отправки форму логин
и пароль пользователя должны занестись в
базу данных с помощью INSERT
запроса,
вот так:
<?php
if (!empty($_POST['login']) and !empty($_POST['password'])) {
$login = $_POST['login'];
$password = $_POST['password'];
$query = "INSERT INTO users SET login='$login', password='$password'";
mysqli_query($link, $query);
}
?>
Затем пользователь может зайти на страницу авторизации, ввести логин и пароль, под которым он зарегистрировался и авторизоваться.
Реализуйте описанную выше регистрацию. После этого зарегистрируйте нового пользователя и авторизуйтесь под ним. Убедитесь, что все работает, как надо.
Модифицируйте ваш код так, чтобы кроме логина и пароля пользователю нужно было ввести еще и дату своего рождения и email. Сохраните эти данные в базу данных.
Модифицируйте ваш код так, чтобы в базу автоматически сохранялась дата регистрации.
Авторизуем сразу при регистрации
Сейчас наша регистрация сделана таким образом, что пользователь первый раз вбивает логин-пароль регистрируясь, а потом сразу же вбивает их второй раз, желая зайти на сайт.
Это на самом деле не очень удобно и будет раздражать пользователей. Лучше сделать так, чтобы при успешной регистрации сразу же происходила автоматическая авторизация. Для этого сразу после успешной регистрации запишем в сессию пометку об успешной авторизации:
<?php
if (!empty($_POST['login']) and !empty($_POST['password'])) {
$login = $_POST['login'];
$password = $_POST['password'];
$query = "INSERT INTO users SET login='$login', password='$password'";
mysqli_query($link, $query);
$_SESSION['auth'] = true; // пометка об авторизации
}
?>
Модифицируйте ваш код так, чтобы после регистрации пользователь автоматически становился авторизованным.
Добавляем id пользователя в сессию
Пусть кроме пометки об авторизации мы бы
хотели записать в сессию еще и его id
.
В этом случае мы можем получить его с помощью
функции mysqli_insert_id
. Эта функция
получает id
последней вставленной
в данном скрипте записи, то есть как раз
то, что нам нужно.
Реализуем:
<?php
if (!empty($_POST['login']) and !empty($_POST['password'])) {
$login = $_POST['login'];
$password = $_POST['password'];
$query = "INSERT INTO users SET login='$login', password='$password'";
mysqli_query($link, $query);
$_SESSION['auth'] = true;
$id = mysqli_insert_id($link);
$_SESSION['id'] = $id; // пишем id в сессию
}
?>
Запишите при регистрации в сессию еще и id
пользователя.
Скрываем пароль
Поле ввода пароля обычно представляет собой
инпут с типом password
, в котором
введенные символы скрываются под звездочками.
Это сделано для того, чтобы злоумышленник
не мог подсмотреть пароль пользователя через
плечо в момент регистрации.
Сокрытие пароля таким образом конечно хорошо, но есть, однако, проблема - пользователь не видит, что вводит. Он может ошибиться при вводе какого-либо символа и зарегистрироваться не с тем паролем, с которым он хотел. Это будет печально:(, так как он затем не сможет авторизоваться на сайте.
Существует стандартное решение этой проблемы: пользователю показываются два инпута для ввода пароля - в первый инпут он вводит пароль, а во второй инпут - его подтверждение, то есть этот же пароль второй раз:
<form action="" method="POST">
<input name="login">
<input type="password" name="password">
<input type="password" name="confirm">
<input type="submit">
</form>
Задача нашего сайта - проверить, что пароль и его подтверждение совпадают, так как логично, что в этом случае пользователь ввел именно то, что хотел ввести:
<?php
if (!empty($_POST['login']) and !empty($_POST['password']) and !empty($_POST['confirm'])) {
if ($_POST['password'] == $_POST['confirm']) {
// регистрируем
} else {
// выведем сообщение о несовпадении
}
}
?>
Модифицируйте ваш код так, чтобы при отправке формы пароль сравнивался с его подтверждением. Если они совпадают - то продолжаем регистрацию, а если не совпадают - то выводим сообщение об этом.
Проверка логина на занятость
Сейчас наша регистрация имеет одну проблему - новый пользователь нашего сайта может зарегистрироваться под уже существующим логином, что, конечно же, недопустимо.
Для решения проблемы необходимо перед запросом
на добавление нового пользователя в базу
данных, выполнить SELECT
запрос, который
проверит, занят желаемый логин или нет. Если
не занят - регистрируем, если занят - не
регистрируем, а выводим сообщение об этом.
Давайте напишем этот код:
<?php
if (!empty($_POST['login']) and !empty($_POST['password'])) {
$login = $_POST['login'];
$password = $_POST['password'];
$query = "SELECT * FROM users WHERE login='$login'";
$user = mysqli_fetch_assoc(mysqli_query($link, $query));
if (empty($user)) {
$query = "INSERT INTO users SET login='$login', password='$password'";
mysqli_query($link, $query);
$_SESSION['auth'] = true;
} else {
// логин занят, выведем сообщение об этом
}
}
?>
Модифицируйте ваш код так, чтобы при попытке регистрации выполнялась проверка на занятость логина и, если он занят, - выводите сообщение об этом и просите ввести другой логин.