Создание регистрации на сайте на PHP + MySQL

Барин

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

1. Начнем с создания таблички users в базе. Она будет содержать данные пользователя (логин и пароль). Зайдем в phpmyadmin (если вы создаете базу на своем ПК http://localhost/phpmyadmin/). Создаем таблицу users, в ней будет 3 поля.
2.gif

Я создаю ее в базе mysql, вы можете создавать в другой базе. Далее устанавливаем значения, как на рисунке:
3.gif

Нажимаем "сохранить". Итак, таблица у нас есть.

2. Необходимо соединение с этой таблицей. Давайте создадим файл bd.php. Его содержание:

<?php
$db = mysql_connect ("localhost","user","1234");
mysql_select_db ("mysql",$db);
?>

Сохраняем bd.php.
Отлично! У нас есть таблица в базе, соединение к ней. Теперь можно приступать к созданию странички, на которой пользователи будут оставлять свои данные.
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>

4. Создаем файл, который будет заносить данные в базу и сохранять пользователя.save_user.php(комментарии внутри):
<?php
if (isset($_POST['login'])) { $login = $_POST['login']; if ($login == '') { unset($login);} } //заносим введенный пользователем логин в переменную $login, если он пустой, то уничтожаем переменную
if (isset($_POST['password'])) { $password=$_POST['password']; if ($password =='') { unset($password);} }
//заносим введенный пользователем пароль в переменную $password, если он пустой, то уничтожаем переменную
if (empty($login) or empty($password)) //если пользователь не ввел логин или пароль, то выдаем ошибку и останавливаем скрипт
{
exit ("Вы ввели не всю информацию, вернитесь назад и заполните все поля!");
}
//если логин и пароль введены, то обрабатываем их, чтобы теги и скрипты не работали, мало ли что люди могут ввести
$login = stripslashes($login);
$login = htmlspecialchars($login);
$password = stripslashes($password);
$password = htmlspecialchars($password);
//удаляем лишние пробелы
$login = trim($login);
$password = trim($password);
// подключаемся к базе
include ("bd.php");// файл bd.php должен быть в той же папке, что и все остальные, если это не так, то просто измените путь
// проверка на существование пользователя с таким же логином
$result = mysql_query("SELECT id FROM users WHERE login='$login'",$db);
$myrow = mysql_fetch_array($result);
if (!empty($myrow['id'])) {
exit ("Извините, введённый вами логин уже зарегистрирован. Введите другой логин.");
}
// если такого нет, то сохраняем данные
$result2 = mysql_query ("REPLACE INTO users (login,password) VALUES('$login','$password')");
// Проверяем, есть ли ошибки
if ($result2=='TRUE')
{
echo "Вы успешно зарегистрированы! Теперь вы можете зайти на сайт. <a href='index.php'>Главная страница</a>";
}
else {
echo "Ошибка! Вы не зарегистрированы.";
}
?>

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 мы выведем ссылочку, которая будет открыта только для зарегистрированных пользователей. В этом и заключается вся суть скрипта - ограничить доступ к каким-либо данным.

6. Остался файл с проверкой введенного логина и пароля. testreg.php (комментарии внутри):

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

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

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

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

Барин

Участник
Статус
offline
Регистрация
24.06.2016
Сообщения
70
Репутация
33
Делюсь с вами своими полезными знаниями в области веб-программирования. Жду ответов
 

MisterDD

Number #1
Резидент
Статус
offline
Регистрация
07.03.2016
Сообщения
324
Репутация
131
Начнём с того, что копипаст.
Оформлена красиво тема - базара нету
Но знания явно не твои, и думаю что ты далеко только начинающий в этом деле
Но в любом случае - удачи
//запихни скрины под спойлер
 

Барин

Участник
Статус
offline
Регистрация
24.06.2016
Сообщения
70
Репутация
33
да, я начинающий, но знания были получены лично мной с зарубежных источников
 

MisterDD

Number #1
Резидент
Статус
offline
Регистрация
07.03.2016
Сообщения
324
Репутация
131
да, я начинающий, но знания были получены лично мной с зарубежных источников
Данный текст размещён ещё на нескольких ресурсах)
Берём любую часть с темы, копируем, вбиваем в гугле, выдаются те же самые темы, профит ;)
 

bingo_shark

Заблокированные
Статус
offline
Регистрация
09.04.2016
Сообщения
385
Репутация
342
Обратите внимание, если Вы хотите провести сделку с данным пользователем, на то, что он заблокирован.
.умные люди не называют таблицы с данными юзеров именем "users", т.к. при нахождении уязвимости смотрят в первую очередь таблицы с похожими именами. БД нужно называть не палевно, типа "photos" или "directories"
 

MisterDD

Number #1
Резидент
Статус
offline
Регистрация
07.03.2016
Сообщения
324
Репутация
131
.умные люди не называют таблицы с данными юзеров именем "users", т.к. при нахождении уязвимости смотрят в первую очередь таблицы с похожими именами. БД нужно называть не палевно, типа "photos" или "directories"
Либо просто рандомные буквыы и цифры, как это делал я ;)
 

Denis_PH

БАТЮШКА
Эксперт
Статус
offline
Регистрация
07.03.2016
Сообщения
555
Репутация
333
.умные люди не называют таблицы с данными юзеров именем "users", т.к. при нахождении уязвимости смотрят в первую очередь таблицы с похожими именами. БД нужно называть не палевно, типа "photos" или "directories"
Он же для примера так назвал) Хотя...
 

bingo_shark

Заблокированные
Статус
offline
Регистрация
09.04.2016
Сообщения
385
Репутация
342
Обратите внимание, если Вы хотите провести сделку с данным пользователем, на то, что он заблокирован.
Он же для примера так назвал) Хотя...
.по своему опыту сужу. Не было ни одного, слитого мной сайта, с невинным названием БД, в которой хранятся данные юзеров
 

bingo_shark

Заблокированные
Статус
offline
Регистрация
09.04.2016
Сообщения
385
Репутация
342
Обратите внимание, если Вы хотите провести сделку с данным пользователем, на то, что он заблокирован.

Denis_PH

БАТЮШКА
Эксперт
Статус
offline
Регистрация
07.03.2016
Сообщения
555
Репутация
333
Примитивный сайт для того что бы научить делать все правильно
Всему долго будешь учиться)
Для начала выучи html, js и css, а потом уже на серверную часть переходи php, sql
 

Барин

Участник
Статус
offline
Регистрация
24.06.2016
Сообщения
70
Репутация
33
.умные люди не называют таблицы с данными юзеров именем "users", т.к. при нахождении уязвимости смотрят в первую очередь таблицы с похожими именами. БД нужно называть не палевно, типа "photos" или "directories"
это же образец
 

bingo_shark

Заблокированные
Статус
offline
Регистрация
09.04.2016
Сообщения
385
Репутация
342
Обратите внимание, если Вы хотите провести сделку с данным пользователем, на то, что он заблокирован.

MisterDD

Number #1
Резидент
Статус
offline
Регистрация
07.03.2016
Сообщения
324
Репутация
131
.а после того, как видят, что нет "users" на такие таблицы смотрят...
Но скорее все мои бывшие сайты никому не насолили, что бы их пытались взломать
Останусь нейтральным в данном случае
 

bingo_shark

Заблокированные
Статус
offline
Регистрация
09.04.2016
Сообщения
385
Репутация
342
Обратите внимание, если Вы хотите провести сделку с данным пользователем, на то, что он заблокирован.
Но скорее все мои бывшие сайты никому не насолили, что бы их пытались взломать
Останусь нейтральным в данном случае
.тут солить не надо, БД сливают не из-за того, что этот сайт не нравится, а потому что там есть БД, которую можно слить
 

MisterDD

Number #1
Резидент
Статус
offline
Регистрация
07.03.2016
Сообщения
324
Репутация
131
.тут солить не надо, БД сливают не из-за того, что этот сайт не нравится, а потому что там есть БД, которую можно слить
Всё же я сказал про свой случай, значит мне на протяжении 4х лет везло ;)