Доброго времени ;)
- Не претендую на должность faq'ушника, просто отписал чтобы по кругу не крутить основные моменты.
- Кто желает может прикрутить гору разных проверок, регулярок, и прочего, я попытался описать главное, что как мне показалось некоторым людям не понятно.
Поехали...
Содержание:
- Что должно быть подготовлено для комфортного продолжения работы
- Форма регистрации
- Скрипт обработчик - пробный
- Файл подключения к БД
- Скрипт обработчик - продолжение
- Чтобы не отвлекаться и постоянно не лазить в phpmyadmin или ему подобные заранее создадем базу данных, пользователя к ней и таблицу `users`
- файлы index.html , reg.php , connect.php - в кодировке UTF-8 whitout BOM (UTF-8 без BOM)
Форма регистрации - файл index.html
- Не буду ничего усложнять, для простоты понимания достаточно будет и этого:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Регистрация пользователя</title>
</head>
<body>
<center>
<form name="registration" action="reg.php" method="POST">
<table>
<tr>
<td>Введите имя пользователя:</td>
<td><input name="username" type="text"></td>
</tr>
<tr>
<td>Введите пароль:</td>
<td><input name="userpass" type="password"></td>
</tr>
<tr>
<td>Подтвердите пароль:</td>
<td><input name="againpass" type="password"></td>
</tr>
<tr>
<td><input name="go" type="submit" value=" Регистрация "></td>
<td><input name="clear" type="reset" value=" Очистить поля "></td>
</tr>
</table>
</form>
</center>
</body>
</html>
Здесь у нас 3 поля для ввода данных - имя пользователя, пароль и его подтверждение. Я поместил все это в таблицу <table> и отцентровал при помощи <center>. Наша форма будет отправлять данные файлу обработчику reg.php методом POST. Соответственно там мы должны будем принять данные из суперглобального массива $_POST[] , где введенная в каждое поле информация будет соответствовать атрибуту name="" этого поля.
-------------------------------------------------------------------------
Пример:
<input name="username" type="text">
После отправки формы введенные данные будут доступны по ключу username
echo $_POST['username']; //выведет на экран введенные ранее данные в поле где name="username"
-------------------------------------------------------------------------
Для проверки работоспособности нашей формы, в файл reg.php мы поместим следующий код:
<?php
echo '<b>Имя пользователя:</b> '. $_POST['username'].'<br>';
echo '<b>Пароль пользователя:</b> '. $_POST['userpass'].'<br>';
echo '<b>Подтвержденеие:</b> '. $_POST['againpass'].'<br>';
?>
Так мы наглядно увидим как это все передается посредством php. НО ведь нам нужно не увидеть данные, а сохранить их в БД для последующего использования. НО прежде чем что-то куда-то сохранять нам нужно соответствующим образом обработать полученые от пользователя данные, ведь не все пользователи белые и пушистые, могут и попробовать навредить вашему сайту.
Скрипт обработчик - файл reg.php
- начнем с того что удаляем все содержимое оставляем только:
<?php
?>
- Не буду громоздить жутких проверок и прочего, ограничусь следующими требованиями к обработчику:
1. Имя пользователя должно быть заполненно
2. Пароль должен соответствовать его подтверждению
- Получается что мы должны отправить пользователя обратно на страницу ввода данных если:
1. Он не заполнил поле "Имя пользователя"
2. Не соответствует подтверждение, ранее введенному паролю (тем самым спасаем пользователя от случайной опечатки при вводе)
Приступим: - файл reg.php
<?php
header('Content-Type: text/html; charset=utf-8');
if(!empty($_POST['username']))
{
$username = $_POST['username'];
if(!empty($_POST['userpass']))
{
$userpass = $_POST['userpass'];
if(!empty($_POST['againpass']) && ($_POST['againpass'] == $_POST['userpass']))
{
echo '<b>Имя пользователя:</b> '. $username.'<br>';
echo '<b>Пароль пользователя:</b> '. $userpass.'<br>';
}
else
{
echo 'Подтверждение пароля введено не корректно.';
exit();
}
}
else
{
echo 'Пароль не введен.';
exit();
}
}
else
{
echo 'Имя введено не корректно.';
exit();
}
?>
- В итоге теперь, если ввести все данные корректно, то мы увидим логин и пароль, если же что-то не введем или же введем неверное подтверждение, то скрипт останавливается и пишет нам текст ошибки. Теперь нам необходимо сохранить корректно введеные данные в БД. В первую очередь потребуется подключение к БД.
Файл подключения к БД - файл connect.php
- В и в рабочем проекте и в примере использую mysqli , предпологаю что БД с таблицей у вас уже есть
<?php
$sqlhost = 'localhost'; // по умолчанию почти всегда это localhost
$sqluser = 'myscript'; // имя пользователя для подключения к БД
$sqlpass = 'qwerty1'; // пароль
$sqldata = 'mysite'; // и имя базы данных
$link = mysqli_connect($sqlhost, $sqluser, $sqlpass, $sqldata);
if (!$link)
die ('Ошибка подключения '. mysqli_connect_errno() . mysqli_connect_error());
?>
- Вернемся к нашему обработчику
- Нам необходимо обработать данные и сохранить их в БД
файл reg.php
<?php
header('Content-Type: text/html; charset=utf-8');
if(!empty($_POST['username']))
{
$username = $_POST['username'];
if(!empty($_POST['userpass']))
{
$userpass = $_POST['userpass'];
if(!empty($_POST['againpass']) && ($_POST['againpass'] == $_POST['userpass']))
{
include 'connect.php'; // подключаем наш файл соединения с БД
$name = mysqli_real_escape_string($link, $username); //экранируем все неблагоприятные для БД символы
$pass = md5($userpass); //создаем хэш пароля
$queryInto = "INSERT INTO `users` (name, pass) VALUES ('".$name."', '".$pass."')"; //составляем запрос
$resultInto = mysqli_query($link, $queryInto) or die ('Ошибка: '.mysqli_error($link)); //отправляем запрос, в случае ошибки видим ошибку соответственно
header('location: http://test.ru/'); //отправляем пользователя на страницу ввода данных и очищаем $_POST
}
else
{
echo 'Подтверждение пароля введено не корректно.';
exit();
}
}
else
{
echo 'Пароль не введен.';
exit();
}
}
else
{
echo 'Имя введено не корректно.';
exit();
}
?>
Итак, если после нажатия кнопки регистрация видим чистую форму, значит пользователь успешно добавлен в БД. Собственно на этом все. Прочие проверки и исключения все уже вешают на свой вкус и в зависимости от надобности в них.
_____________
[FAQ]Регистрации пользователей, сохранение в БД
---------------------------------------------------------------------------
Выходя из ванной, вышел из нее два раза