Xwab
Форумыnavigate_nextПрограммирование на PHP

Создание регистрации на сайте
Сообщения
wapmorgan

Здравствуйте! Сейчас мы попробуем реализовать самую простую регистрацию на сайте с помощью PHP + MySQL. Для этого на вашем компьютере должен быть установлен Apache. Принцип работы нашего скрипта изображен ниже.

01 Июн 2010, 18:38
wapmorgan

1. Начнем с создания таблички users в базе. Она будет содержать данные пользователя (логин и пароль). Зайдем в phpmyadmin (если вы создаете базу на своем ПК http://localhost/phpmyadmin/). Создаем таблицу users, в ней будет 3 поля.
Далее устанавливаем
id INT auto_increment //Поле Тип Дополнительно
login VARCHAR 15 //Поле Тип
password VARCHAR 15 //Поле Тип Длины/Значение
Сохраняем.

01 Июн 2010, 18:38
wapmorgan

2.Необходимо соединение с этой таблицей. Давайте создадим файл bd.php. Его содержание:
<?php
$db = mysql_connect ("ваш MySQL сервер","логин к этому серверу","пароль к этому серверу");
mysql_select_db ("имя базы, к которой подключаемся",$db);
?>

В моем случае это выглядит так:
<?php
$db = mysql_connect ("localhost","user","1234");
mysql_select_db ("mysql",$db);
?>
Сохраняем bd.php.
Отлично! У нас есть таблица в базе, соединение к ней. Теперь можно приступать к страничке, на которой пользователи будут оставлять свои данные.

01 Июн 2010, 18:38
wapmorgan

3. Создаем файл reg.php с содержанием (все комментарии внутри):
<html>
<head>
<title>Регистрация</title>
</head>
<body>
<h2>Регистрация</h2>
<form action="save_user.php" method="post">
<!--**** save_user.php - это адрес обработчика. То есть, после нажатия на кнопку "Зарегистрироваться", данные из полей отправятся на страничку save_user.php методом "post" ***** -->
<p>
<label>Ваш логин:<br></label>
<input name="login" type="text" size="15" maxlength="15">
</p>
<!--**** В текстовое поле (name="login" type="text") пользователь вводит свой логин ***** -->
<p>
<label>Ваш пароль:<br></label>
<input name="password" type="password" size="15" maxlength="15">
</p>
<!--**** В поле для паролей (name="password" type="password") пользователь вводит свой пароль ***** -->
<p>
<input type="submit" name="submit" value="Зарегистрироваться">
<!--**** Кнопочка (type="submit") отправляет данные на страничку save_user.php ***** -->
</p></form>
</body>
</html>

01 Июн 2010, 18:39
wapmorgan

4. Создаем файл, который будет заносить данные в базу и сохранять пользователя. save_user.php(комментарии внутри):
<?php
if (empty($_POST['login']) or empty($_POST['password'])) //если пользователь не ввел логин или пароль, то выдаем ошибку и останавливаем скрипт
{
exit ('Вы ввели не всю информацию, вернитесь назад и заполните все поля!');
}

// подключаемся к базе
include ('bd.php') ; // файл bd.php должен быть в той же папке, что и все остальные, если это не так, то просто измените путь

// обрабатываем пришедший логин и пароль
$login = htmlspecialchars(mysql_real_escape_string(trim($_POST['login'])));
$password = htmlspecialchars(mysql_real_escape_string(trim($_POST['password'])));
// проверка на существование пользователя с таким же логином
$count_users = mysql_result(mysql_query("SELECT COUNT(*) FROM users WHERE login='$login'",$db),0);
if ($count_users > 0) {
exit ('Извините, введённый вами логин уже зарегистрирован. Введите другой логин.');
}
// если такого нет, то сохраняем данные
$result = mysql_query ("INSERT INTO users (login,password) VALUES('$login','$password')");
// Проверяем, есть ли ошибки
if ($result2 == TRUE)
{
echo 'Вы успешно зарегистрированы! Теперь вы можете зайти на сайт. <a href="index.php">Главная страница</a>';
}
else {
echo 'Ошибка! Вы не зарегистрированы.';
}
?>


__________
посл.ред. 01 Июн 2010, 20:34; всего 2 раз(а) 01 Июн 2010, 18:39
wapmorgan

5. Теперь наши пользователи могут регистрироваться! Далее необходимо сделать "дверь для входа на сайт" уже зарегистрированным пользователям. index.php (комментарии внутри) :
<?php
// вся процедура работает на сессиях. Именно в ней хранятся данные пользователя, пока он находится на сайте. Очень важно запустить их в самом начале странички!!!
session_start();
?>
<html>
<head>
<title>Главная страница</title>
</head>
<body>
<h2>Главная страница</h2>
<form action="testreg.php" method="post">

<!--**** testreg.php - это адрес обработчика. То есть, после нажатия на кнопку "Войти", данные из полей отправятся на страничку testreg.php методом "post" ***** -->
<p>
<label>Ваш логин:<br></label>
<input name="login" type="text" size="15" maxlength="15">
</p>


<!--**** В текстовое поле (name="login" type="text") пользователь вводит свой логин ***** -->

<p>

<label>Ваш пароль:<br></label>
<input name="password" type="password" size="15" maxlength="15">
</p>

<!--**** В поле для паролей (name="password" type="password") пользователь вводит свой пароль ***** -->

<p>
<input type="submit" name="submit" value="Войти">

<!--**** Кнопочка (type="submit") отправляет данные на страничку testreg.php ***** -->
<br>
<!--**** ссылка на регистрацию, ведь как-то же должны гости туда попадать ***** -->
<a href="reg.php">Зарегистрироваться</a>
</p></form>
<br>
<?php
// Проверяем, пусты ли переменные логина и id пользователя
if (empty($_SESSION['login']) or empty($_SESSION['id']))
{
// Если пусты, то мы не выводим ссылку
echo "Вы вошли на сайт, как гость<br><a href='#'>Рта ссылка доступна только зарегистрированным пользователям</a>";
}
else
{

// Если не пусты, то мы выводим ссылку
echo "Вы вошли на сайт, как ".$_SESSION['login']."<br><a href='http://tvpavlovsk.sk6.ru/'>Рта ссылка доступна только зарегистрированным пользователям</a>";
}
?>
</body>
</html>
В файле index.php мы выведем ссылочку, которая будет открыта только для зарегистрированных пользователей. В этом и заключается вся суть скрипта - ограничить доступ к каким-либо данным.

01 Июн 2010, 18:40
wapmorgan

6. Остался файл с проверкой введенного логина и пароля. testreg.php (комментарии внутри):
<?php
session_start(); // вся процедура работает на сессиях. Именно в ней хранятся данные пользователя, пока он находится на сайте. Очень важно запустить их в самом начале странички!!!
if (empty($_POST['login']) or empty($_POST['password'])) //если пользователь не ввел логин или пароль, то выдаем ошибку и останавливаем скрипт
{
exit ('Вы ввели не всю информацию, вернитесь назад и заполните все поля!');
}

// подключаемся к базе
include ('bd.php') ; // файл bd.php должен быть в той же папке, что и все остальные, если это не так, то просто измените путь

// обрабатываем пришедший логин и пароль
$login = htmlspecialchars(mysql_real_escape_string(trim($_POST['login'])));
$password = htmlspecialchars(mysql_real_escape_string(trim($_POST['password'])));

$result = mysql_query("SELECT * FROM users WHERE login='$login'",$db); //извлекаем из базы все данные о пользователе с введенным логином
$myrow = mysql_fetch_array($result);
if (empty($myrow['pass']))
{
//если пользователя с введенным логином не существует
exit ("Извините, введённый вами login или пароль неверный.");
}
else {
//если существует, то сверяем пароли
if ($myrow['pass']==$password) {
//если пароли совпадают, то запускаем пользователю сессию! Можете его поздравить, он вошел!
$_SESSION['login']=$myrow['login'];
$_SESSION['id']=$myrow['id']; //эти данные очень часто используются, вот их и будет "носить с собой" вошедший пользователь
echo 'Вы успешно вошли на сайт! <a href='index.php'>Главная страница</a>';
}
else {
//если пароли не сошлись

exit ('Извините, введённый вами login или пароль неверный.');
}
}
?>


__________
посл.ред. 01 Июн 2010, 20:38; всего 1 раз 01 Июн 2010, 18:41
wapmorgan

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

Все проверил, работает исправно!

Автор: Стороженко Евгений (отредактировал и опубликовал Максим Шкурупий + мною были некоторые части изменены)

01 Июн 2010, 18:41
НЕЗНАЙКА

Урок скучный правда. И не лучший код. Например, лучше использовать
if(!empty($_POST['login'])) $login = htmlspecialchars($_POST['login']); и далее, чем сначала проверять, потом удалять переменную. ИМХО

01 Июн 2010, 20:09
wapmorgan

Поправил небольшую часть кода.

01 Июн 2010, 20:42
Ответить на тему