PHP

Обработчик формы регистрации для сайта на php

Доброго времени суток, уважаемые. Сегодня, как я и обещал, реализуем обработчик формы регистрации для сайта на php. Хочу напомнить, что это продолжение публикации по созданию формы регистрации для своего сайта. Много говорить не будем, а немного вспомним, как мы создавали скрытый блок div для вывода ошибок ввода в поля формы. Так вот, давайте для начала и реализуем скрипт проверки правильности ввода данных. Я сейчас представлю код готового скрипта проверки, а затем разберем, как всегда, все по полочкам.

JavaScript проверка ввода данных в форму регистрации

Код JS
$(function(){
var field = new Array("login", "password",
"confirmpass",
 "keystring", "email");
 //поля обязательные
 $(".formreg").submit(function()
  {
  // обрабатываем отправку формы
  var error=0;
  // индекс ошибки
  $(".formreg").find(":input").each(function()
   {
   // проверяем каждое поле в форме
   for(var i=0;i<field.length;i++){
    // если поле присутствует в списке обязательных
    if($(this).attr("name")==field[i]){
     //проверяем поле формы на пустоту
     if(!$(this).val()){
     // если в поле пусто
     $(this).css('border', 'red 1px solid');
     // устанавливаем рамку красного цвета
     error=1;// определяем индекс ошибки
     }
     else{
     $(this).css('border', 'gray 1px solid');
     // устанавливаем рамку обычного цвета
     }
     }
     }
     })
     //провека совпадения паролей
     var pas1 = $("#pas1").val();
     var pas2 = $("#pas2").val();
     if(pas1!=pas2){
     error=3;
     $("#pas1").css('border', 'red 1px solid');
     // устанавливаем рамку красного цвета
     $("#pas2").css('border', 'red 1px solid');
     // устанавливаем рамку красного цвета
     }
     if(error==0){
      // если ошибок нет, то отправляем данные
      return true;
      }
      else{
      var err_text = "";
      if(error==1)
      err_text="<p class='messageserror'>Пожалуйста, заполните все обязательные поля!
      Отмеченные знаком <strong>*</strong>.
       Неправильно заполненные поля выделены красным бордюром.
        Пожалуйста, будьте внимательней!</p>";
        if(error==3)  err_text="
        Пароли не совпадают, проверьте не включена клавиша 'CapsLосk'";
        $("#messenger").html(err_text);
        $("#messenger").fadeIn("slow");
        return false;
        //если в форме встретились ошибки , не  позволяем отослать данные на сервер.
        }  
        })
        });

Вот такой вот простенький скрипт проверки, или, можно сказать, валидации формы регистрации для сайта. В комментариях я по максимуму все описал, где, что и как происходит. Не будем на этом останавливаться, идем дальше. А сейчас создадим таблицу в базе данных mysql, как создавать таблицы в phpmyadmin можно посмотреть здесь. А мы определим какие поля нам необходимо создать для реализации формы регистрации.

Поля таблицы формы регистрации на сайте

1. Конечно id:

2. Поле таблицы для хранения логина, так его и назовем - "login":

3. Пароль - "password":

4. Поле для хранения ссылки на аватар (при условии, что вы используете поле загрузки);

5. Поле хранения email адреса регистрации;

6. Поле для хранения даты регистрации.

Вот структуру таблицы создали, а теперь переведем все это в язык sql и сделаем такой запрос к базе данных mysql

Код SQL
--
-- Структура таблицы `user`
--
 
CREATE TABLE IF NOT EXISTS `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `login` varchar(55) NOT NULL,
  `password` varchar(255) NOT NULL DEFAULT '',
  `avatar` varchar(255) NOT NULL DEFAULT '',
  `email` varchar(60) NOT NULL,
  `reg_date` varchar(32) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=51 ;

У вас должна получится вот такая вот простенькая таблица под названием "user". Я уже говорил, что вещи нужно называть своими именами, вот и таблицу назовем соответственно - user.

И так проверка перед отправкой есть, таблица в бд есть, пожалуй самое время приступить к обработке данных формы php скриптом. Так мы и поступим. Для начала создадим отдельный файл php и назовем его, скажем, reg_add.php. Помните, я говорил при создании формы, куда вписывать путь к обработчику? Напомню: вписываем его здесь.

Код HTML
<form class="formreg" action="обработчик.php" method="post" enctype="multipart/form-data"></form>
// вместо обработчик.php прописываем так
<form class="formreg" action="reg_add.php" method="post" enctype="multipart/form-data"></form>

Ничего сложного. Далее определимся какие поля и как необходимо обработать.

1. Поле "LOGIN" - уберем все теги и скрипты, мало ли кто, что написать придумает, уберем лишние пробелы;

2. Поле "EMAIL" - проверим регулярным выражением на правильность ввода;

3. Поле "PASSWORD" - Проделаем тоже самое, что и с 1, но зашифруем его и добавим реверс;

4. Загрузка файла "FUPLOAD" - обработаем изображение на проверку формата и сделаем ему оптимизацию, подгоним под необходимый размер и ужмем его для интернет страниц;

Всего 4 поля нам неоходимо обработать в php. Давайте, наверное, начнем с самого начала, а именно с подключения к базе и передаче параметров POST.

Давайте приведу пример, как это должно выглядеть на самом деле.

Код 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    (isset($_POST['email'])) { $email = $_POST['email']; if ($email == '') {    unset($email);} }
//заносим введенный пользователем e-mail, если он    пустой, то уничтожаем переменную
 if    (empty($login) or empty($password) or empty($email))
            //добавим    переменную с e-mail адресом
            //если    пользователь не ввел логин или пароль, то выдаем ошибку и останавливаем    скрипт
            {
            exit    ("Вы ввели не всю информацию, вернитесь назад и заполните все    поля!");
            //останавливаем    выполнение сценариев
            }
            if    (!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $email))
            //проверка    е-mail адреса регулярными выражениями на корректность
            {exit    ("Неверно введен е-mail!");}
// Обработка кода капчи
session_start();
if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] !=  $_POST['keystring'])
{
exit ("<html><head><meta http-equiv='Refresh' content='5; URL=страница регистрации.php'>
</body></html>
Защитный код из 7 цифр введен неверно, пожалуйста, будьте внимательней!
Вы будете перемещены обратно на страницу регистрации через 5 секунд.
Если не хотите ждать, нажмите на ссылку <a href="index.php">
 Вернуться
 </a>");
  //останавливаем выполнение сценариев
}
?>

Все просто. Далее обработаем переменные php функциями.

Код PHP
<?php
//если логин и пароль введены,то обрабатываем их, чтобы теги и скрипты не работали, мало ли что люди могут ввести
$login = stripslashes($login);
$login = htmlspecialchars($login);
$password = stripslashes($password);
$password = htmlspecialchars($password);
//удаляем лишние пробелы
$login = trim($login);
$password = trim($password);
 
// дописываем новое********************************************
 
//добавляем проверку на длину логина и пароля
if (strlen($login) < 5 or strlen($login) > 15) {
exit ("Логин должен состоять не менее чем из 5 символов и не более чем из 15.");
//останавливаем выполнение сценариев
}
if (strlen($password) < 6 or strlen($password) > 15) {
exit ("Пароль должен состоять не менее чем из 6 символов и не более чем из 15.");
 //останавливаем выполнение сценариев
}
if (empty($_FILES['fupload']['name']))
{
//если переменной не существует (пользователь не отправил изображение),
то присваиваем ему заранее приготовленную картинку с надписью "нет аватара"
$avatar = "avatars/net-avatara.jpg";
//можете нарисовать net-avatara.jpg или взять в исходниках
}
else
{
//иначе - загружаем изображение пользователя
$path_to_90_directory = 'avatars/';
//папка, куда будет загружаться начальная картинка и ее сжатая копия   
if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)|(gif)|(GIF)|(png)|(PNG)$/',$_FILES['fupload']['name']))
//проверка формата исходного изображения
     {         
        $filename = $_FILES['fupload']['name'];
        $source = $_FILES['fupload']['tmp_name'];  
        $target = $path_to_90_directory . $filename;
        move_uploaded_file($source, $target);
//загрузка оригинала в папку $path_to_90_directory
    if(preg_match('/[.](GIF)|(gif)$/', $filename)) {
    $im = imagecreatefromgif($path_to_90_directory.$filename) ;
    //если оригинал был в формате gif, то создаем изображение в этом же формате.
     Необходимо для последующего сжатия
    }
    if(preg_match('/[.](PNG)|(png)$/', $filename)) {
    $im = imagecreatefrompng($path_to_90_directory.$filename) ;
    //если оригинал был в формате png, то создаем изображение в этом же формате.
    Необходимо для последующего сжатия
    }
    if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename)) {
        $im = imagecreatefromjpeg($path_to_90_directory.$filename);
         //если оригинал был в формате jpg, то создаем изображение в этом же формате.
         Необходимо для последующего сжатия
    }
//СОЗДАНИЕ КВАДРАТНОГО ИЗОБРАЖЕНИЯ И ЕГО ПОСЛЕДУЮЩЕЕ СЖАТИЕ
// Создание квадрата 90x90
// dest - результирующее изображение
// w - ширина изображения
// ratio - коэффициент пропорциональности
$w = 90; 
// квадратная 90x90. Можно поставить и другой размер.
// создаём исходное изображение на основе
// исходного файла и определяем его размеры
$w_src = imagesx($im);
//вычисляем ширину
$h_src = imagesy($im);
//вычисляем высоту изображения
         // создаём пустую квадратную картинку
         // важно именно truecolor!, иначе будем иметь 8-битный результат
         $dest = imagecreatetruecolor($w,$w);
         // вырезаем квадратную серединку по x, если фото горизонтальное
         if ($w_src>$h_src)
         imagecopyresampled($dest, $im, 0, 0,
                          round((max($w_src,$h_src)-min($w_src,$h_src))/2),
                          0, $w, $w, min($w_src,$h_src), min($w_src,$h_src));
         // вырезаем квадратную верхушку по y,
         // если фото вертикальное (хотя можно тоже серединку)
         if ($w_src<$h_src)
         imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w,
         min($w_src,$h_src), min($w_src,$h_src));
         // квадратная картинка масштабируется без вырезок
         if ($w_src==$h_src)
         imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $w_src);
         $date=time();
         //вычисляем время в настоящий момент.
imagejpeg($dest, $path_to_90_directory.$date.".jpg");
//сохраняем изображение формата jpg в нужную папку,
 именем будет текущее время. Сделано,
  чтобы у аватаров не было одинаковых имен.
//почему именно jpg? Он занимает очень мало места + уничтожается анимирование
gif изображения, которое отвлекает пользователя.
Не очень приятно читать его комментарий, когда
краем глаза замечаешь какое-то движение.
$avatar = $path_to_90_directory.$date.".jpg";
//заносим в переменную путь до аватара.
$delfull = $path_to_90_directory.$filename;
unlink ($delfull);
//удаляем оригинал загруженного изображения, он нам больше не нужен.
Задачей было - получить миниатюру.
}
else
         {
         //в случае несоответствия формата, выдаем соответствующее сообщение   
exit ("Аватар должен быть в формате <strong>JPG,GIF или PNG</strong>"); //останавливаем выполнение сценариев
         }
//конец процесса загрузки и присвоения переменной $avatar адреса загруженной авы
}
$password = md5($password);
//шифруем пароль
$password = strrev($password);
// для надежности добавим реверс
$password = $password."здесь любой набор символов и цифр например "2fggi4lj";
//Если этот пароль будут взламывать методом подбора у себя
на сервере этой же md5,то явно ничего хорошего не выйдет.
 Но советую ставить другие символы, можно в начале
 строки или в середине.
//При этом необходимо увеличить длину поля password в базе.
 Зашифрованный пароль может получится гораздо большего размера.
// дописали новое********************************************
// Далее идет все из первой части статьи,но необходимо дописать изменение в запрос к базе.
// подключаемся к базе
include ("путь к файлу с подключением к бд.php");// например файл bd.php
 должен быть в той же папке, что и все остальные, если это не так,
 то просто измените путь
// проверка на существование пользователя с таким же логином
$result = mysql_query("SELECT id FROM user WHERE login='$login'",$db);
$myrow = mysql_fetch_array($result);
if (!empty($myrow['id'])) {
exit ("Извините, введённый вами логин уже зарегистрирован. Введите другой логин.");
 //останавливаем выполнение сценариев
}
// если такого нет, то сохраняем данные
$reg_date = date("d-m-Y в H:i");
$result2 = mysql_query ("INSERT INTO user (login,password,avatar,email,reg_date) VALUES('$login','$password','$avatar','$email','$reg_date')");
?>

Теперь все эти примеры занесем в один файл, который создали reg_add.php. Вот и все, у нас теперь работает форма регистрации для своего сайта.
Теги:
форма, регистрация
Добавлено: 02 Мая 2018 14:38:24 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...