Здраствуйте!
Я пишу свою первую статью на Хабре.
Немного обо мне… Я из Украины, мне 18 лет, обычный студент, учусь на менеджера, увлекаюсь веб-программированием.
С недавных пор подрабатываю фрилансером. Основная моя специализация — это верстка. Но недавно мне дали заказ, где надо было встроить на сайт скрипт регистрации. Скачивать готовые решения я счел неинтересным и решил написать сам.
Эта статья, естественно, будет интересна лишь новичкам в области php программирования. Если для вас эта статья покажеться слишком «ламерской», прошу не критиковать, ибо и хочу попасть на хобру с целью повышения своей квалификации :)
Итак…
Сначало скрипт был задуман тремя php файлами. Можно было бы, конечно одним, но тогда получилась бы сильная путаница. Ну и в дальнейшем все можно изменить. Суть не в этом. Итак, 3 файла: главная страница с формой регистрации и авторизации (Ну и приветствия в случае успешной авторизации)., страница регистрации и страница авторизации.
Через пару минут кодинга пришлось добавить файл, в котором будет происходить соединение с базой данных. Через некоторое время я решил отдельно вынести файл с данными соединения mysql. А в конце написал инсталяционный файл. Всего — 6 файлов.
index.php
Как видите, здесь мы создаем 2 формы для регистрации и авторизации, а так же перенаправление, на случай, если не настроена база данных и альтернативное садержимое для авторизированных пользователей (в данном случае предложение выйти из акаунта).
instal.php
Сюда мы попадаем в случае, если БД не настроена для нашего скрипта. Указываються необходимые параметры, создаеться таблица, данные записуються в файл db.php. Тоесть, изначально файла db.php быть на сервере не должно.
connect.php
В этом файле происходит соединение с сервером базы данных и подключение к БД. В дальнейшем он будет включен в файлы avt.php и reg.php.
здесь происходит обработка данных при регистрации нового пользователя. В любом случае пользователю выдаеться сообщение и через секунду он перенаправляеться на index.php.
Здесь происходит авторизация пользователя.
Вот и все. Конечно, этот скрипт требует доработки (Шифровка пароля в БД с помощью md5, проверка на специальные символы (", ', < ...), дополнительные поля при регистрации, напоминание пароля по email-у, активизация учетной записи по email-у и т.д.). Но этот скрипт закладывает основу для понимания связки PHP и mySQL, и новичкам в этой области будет интересно.
По последок… Уверяю, что скрипт я писал сам и текст набирал тоже сам. Любые совпадения участков када с другими скриптами — случайны :)
Я пишу свою первую статью на Хабре.
Немного обо мне… Я из Украины, мне 18 лет, обычный студент, учусь на менеджера, увлекаюсь веб-программированием.
С недавных пор подрабатываю фрилансером. Основная моя специализация — это верстка. Но недавно мне дали заказ, где надо было встроить на сайт скрипт регистрации. Скачивать готовые решения я счел неинтересным и решил написать сам.
Эта статья, естественно, будет интересна лишь новичкам в области php программирования. Если для вас эта статья покажеться слишком «ламерской», прошу не критиковать, ибо и хочу попасть на хобру с целью повышения своей квалификации :)
Итак…
Сначало скрипт был задуман тремя php файлами. Можно было бы, конечно одним, но тогда получилась бы сильная путаница. Ну и в дальнейшем все можно изменить. Суть не в этом. Итак, 3 файла: главная страница с формой регистрации и авторизации (Ну и приветствия в случае успешной авторизации)., страница регистрации и страница авторизации.
Через пару минут кодинга пришлось добавить файл, в котором будет происходить соединение с базой данных. Через некоторое время я решил отдельно вынести файл с данными соединения mysql. А в конце написал инсталяционный файл. Всего — 6 файлов.
index.php
<?php
if(!include("db.php"))
{
Header('location: instal.php');
}
?>
<html>
<head>
<title>Скрипт регистрации</title>
</head>
<body>
<?
if (isset($_GET['exit'])) {
setcookie("login", "");
setcookie("password", "");
}else{
if(isset($_COOKIE['login'])){
include_once("connect.php");
$query = mysql_query("SELECT password FROM users WHERE login='{$_COOKIE['login']}'");
$row = mysql_fetch_assoc($query);
if(md5($row[password])==$_COOKIE['password'])
{
echo(" <h1>С возвращением, {$_COOKIE['login']}!</h1>
<input type=\"button\" value=\"Выйти\" onClick=\"document.location='?exit'\">
</body>
</html>");
exit();
}
}
}
?>
<h1>Регистрация</h1>
<table>
<form action="reg.php" method="POST">
<tr>
<td>Имя</td>
<td><input type="text" name="login" ></td>
</tr>
<tr>
<td>Пароль</td>
<td><input type="password" name="password" ></td>
</tr>
<tr>
<td>Повторите пароль</td>
<td><input type="password" name="password2"></td>
</tr>
<tr>
<td>Email</td>
<td><input type="text" name="email"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="OK" name="submit" ></td>
</tr>
</form>
</table>
<br><br>
<h1>Авторизация</h1>
<table>
<form action="avt.php" method="POST">
<tr>
<td>Имя</td>
<td><input type="text" name="login"></td>
</tr>
<tr>
<td>Пароль</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td colspan="2"> <input type="submit" value="OK" name="submit"></td>
</tr>
</form>
</table>
</body>
</html>
Как видите, здесь мы создаем 2 формы для регистрации и авторизации, а так же перенаправление, на случай, если не настроена база данных и альтернативное садержимое для авторизированных пользователей (в данном случае предложение выйти из акаунта).
instal.php
<html>
<head>
<title>Инсталяция</title>
<style>
p.green {
color:green;
}
p.red {
color:red;
}
</style>
</head>
<body>
<h1>Инсталяция</h1>
<?php
if (isset($_POST['domen']))
{
$query=@mysql_connect($_POST['domen'],$_POST['user'],$_POST['password']);
if (!$query){
echo( "<P class=\"red\"> В настоящий момент сервер базы данных не доступен, проверьте правильность введенных данных.</P>" );
}else{
echo("<P class=\"green\">Соединение с базой данных установлено...</P>");
mysql_query("CREATE DATABASE {$_POST['name']}");
if(!@mysql_select_db("{$_POST['name']}")){
echo( "<P class=\"red\"> Не удалось создать базу данных \"{$_POST['name']}\".</P>" );
}else{
echo( "<P class=\"green\"> База данных \"{$_POST['name']}\" создана...</P>" );
$query="CREATE TABLE `{$_POST['name']}`.`users` (
`id` INT NOT NULL DEFAULT '0',
`login` TEXT NOT NULL ,
`password` TEXT NOT NULL ,
`email` TEXT NOT NULL
) ENGINE = InnoDB CHARACTER SET cp1250 COLLATE cp1250_general_ci;
";
if(!mysql_query($query)){
echo( "<P class=\"red\"> Не получилось создать таблицу \"users\".</P>" );
}else{
echo( "<P class=\"green\"> Таблица \"users\" создана...</P>" );
$w=fopen("db.php", "w");
fwrite($w,'<?php $dblocation="'.$_POST['domen'].'"; $dbname="'.$_POST['name'].'"; $dbuser="'.$_POST['user'].'"; $dbpasswd="'.$_POST['password'].'"; ?>');
fclose($w);
if(!is_readable("db.php")){
echo( "<P class=\"red\"> Не получилось создать файл db.php.</P>" );
}else{
echo( "<P class=\"green\"> Файл db.php создан...</P>" );
echo( "<P class=\"green\"> Для окончания установки <b>НАСТОЯТЕЛЬНО</b> рекомендуется из корневой дериктории сайта удалить файл <b>instal.php</b></P>" );
echo( "<P> <a href=\"index.php\">Все, готово?</a></P>" );
exit();
}
}
}
}
}
?>
<table>
<form action="instal.php" method="POST">
<tr>
<td>Домен (обычно localhost)</td>
<td><input type="text" name="domen" ></td>
</tr>
<tr>
<td>Имя базы данных</td>
<td><input type="text" name="name" ></td>
</tr>
<tr>
<td>Пользователь</td>
<td><input type="text" name="user"></td>
</tr>
<tr>
<td>Пароль</td>
<td><input type="text" name="password"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="OK" name="submit" ></td>
</tr>
</form>
</table>
</body>
</html>
Сюда мы попадаем в случае, если БД не настроена для нашего скрипта. Указываються необходимые параметры, создаеться таблица, данные записуються в файл db.php. Тоесть, изначально файла db.php быть на сервере не должно.
connect.php
<?php
include_once("db.php");
$dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);
if (!$dbcnx)
{
echo( "<P> В настоящий момент сервер базы данных не доступен, поэтому корректное отображение страницы невозможно. </P>" );
exit();
}
if (!@mysql_select_db($dbname, $dbcnx))
{
echo( "<P> В настоящий момент база данных не доступна, поэтому корректное отображение страницы невозможно. .</P>" );
exit();
}
?></code>
В этом файле происходит соединение с сервером базы данных и подключение к БД. В дальнейшем он будет включен в файлы avt.php и reg.php.
<b>reg.php</b>
<code><?
include_once("connect.php");
if (isset($_POST['submit']))
{
echo('<html>
<head>
<title>Скрипт регистрации</title>
<META HTTP-EQUIV="refresh" CONTENT="1;URL=index.php">
</head>
<body>');
if(empty($_POST['login']))
{
echo 'Вы не ввели логин';
}
elseif(empty($_POST['password']))
{
echo 'Вы не ввели пароль';
}
elseif(empty($_POST['password2']))
{
echo 'Вы не ввели подтверждение пароля';
}
elseif($_POST['password'] != $_POST['password2'])
{
echo 'Введенные пароли не совпадают';
}
elseif(empty($_POST['email']))
{
echo 'Вы не ввели E-mail';
}
else
{
$login = $_POST['login'];
$password = $_POST['password'];
$password2 = $_POST['password2'];
$email = $_POST['email'];
$query = "SELECT `id`
FROM `users`
WHERE `login`='{$login}'
";
$sql = mysql_query($query) or die(mysql_error());
if (mysql_num_rows($sql) > 0)
{
echo 'Такой логин уже существует';
}
else
{
$result=MYSQL_QUERY("SELECT COUNT(*) FROM users");
$cntrc=mysql_fetch_row($result);
$id=$cntrc[0];
$query = "INSERT INTO users(id, login , password , email )
VALUES ('$id', '$login', '$password', '$email')";
$result = mysql_query($query) or die(mysql_error());;
echo 'Регистрация прошла успешно';
}
}
echo("</body>
</html>");
}
?>
здесь происходит обработка данных при регистрации нового пользователя. В любом случае пользователю выдаеться сообщение и через секунду он перенаправляеться на index.php.
avt.php
<?php
include_once("connect.php");
if(isset($_POST['login']))
{
$login = $_POST['login']; //Имя пользователя, введенное в форму
$password = $_POST['password']; // Пароль введенный в форму
//Запрос из базы данных по проверки существования в базе введенного пользователя
//с введенным паролем
$query = "SELECT id, login, password
FROM users
WHERE login ='{$login}' AND password='{$password}'
LIMIT 1";
$sql = mysql_query($query) or die(mysql_error()); //Выполняется запрос
echo('<html>
<head>
<title>Скрипт регистрации</title>
<META HTTP-EQUIV="refresh" CONTENT="1;URL=index.php">
</head>
<body>');
if (mysql_num_rows($sql) == 1){
setcookie("login", $login);
setcookie("password", md5($password));
echo 'Авторизация прошла успешно';
}else {
echo 'Неправильное имя или пароль';
}
echo("</body>
</html>");
}
?>
Здесь происходит авторизация пользователя.
Вот и все. Конечно, этот скрипт требует доработки (Шифровка пароля в БД с помощью md5, проверка на специальные символы (", ', < ...), дополнительные поля при регистрации, напоминание пароля по email-у, активизация учетной записи по email-у и т.д.). Но этот скрипт закладывает основу для понимания связки PHP и mySQL, и новичкам в этой области будет интересно.
По последок… Уверяю, что скрипт я писал сам и текст набирал тоже сам. Любые совпадения участков када с другими скриптами — случайны :)