×

Дополнительные материалы бесплатно предоставляются только зарегистрированным пользователям.

Для скачивания исходных файлов необходимо войти под своим аккаунтом через форму на главной панели.

Для тех кто не зарегистрирован, можно это сделать на вкладке Регистрация.

  • Рубрики
  • Слайдер статей
  • Тест сайта
  • Подписка
  • Сайдбар
  • Прокрутка вверх
  • Как сделать сайт с нуля своими руками (вводная часть)

    1. Причины создания пошаговой инструкции по разработке самописного сайта
    2. Тема создаваемого сайта
    3. В чем будет заключаться монетизация
    4. Функционал
    5. Этапы создания
    6. Текущее состояние создаваемого сайта

    Здравствуйте уважаемый посетитель!

    Наверное, многие задаются вопросом, как можно самому создать сайт для ведения бизнеса в интернете или просто для реализации своих интеллектуальных способностей.

    Причем чтобы такой интернет-ресурс был создан не на каком-нибудь стандартном шаблоне бесплатной СMS (Content management system - система управления контентом) типа WordPress, Drupal, Joomla и т.п., а заточенный под себя, с возможностью обеспечить ему должную безопасность и реализовать все свои индивидуальные потребности.

    Часто такие сайты, созданные под конкретные задачи на основе языка разметки веб-страниц HTML, стилей CSS и других инструментов веб-программирования (PHP, JavaScript и т.п.), называют самописными.

    Этой статьей начинается отдельная рубрика "Как сделать сайт с нуля своими руками", где на реальном примере, с предоставлением исходных материалов (программные коды, файлы и т.п.), будет показано, как действительно можно самостоятельно сделать рабочий сайт.

    По существу, она представляет вводную часть сборника статей по столь интересной и полезной теме. И в общих чертах поясняет некоторые особенности создаваемого сайта.

    И надеюсь, что данный материал поможет многим желающим создать с нуля самописный сайт, который в дальнейшем можно будет самостоятельно поддерживать и развивать.

Самописный сайт своими руками!

Текущее состояние создаваемого сайта

Здесь можно посмотреть текущее состояние тестового самописного сайта, который создается в рамках цикла статей Сделай сайт с нуля своими руками.

Где в дополнительных материалах можно бесплатно скачать исходные файлы сайта с таблицами MySQL.

Вы здесь: Главная → Сборник статей → Формы → Отправляем введенные в форму данные


Автор: / Дата:

Отправляем введенные в форму данные

Здравствуйте уважаемый посетитель!

В предыдущих статьях мы выполнили все необходимые подготовительные мероприятия - сформировали HTML-элементы формы, обеспечили проверку данных на стороне клиента, а затем получили данные в PHP с валидацией формы на стороне сервера. И теперь можем заняться и ее отправкой.

В связи с тем, что при отправке созданной формы онлайн заказа данные должны быть определенным образом сохранены, основное внимание здесь будет уделено взаимодействию формы с базой данных MySQL.

Тем более, что рассмотренный механизм может быть в дальнейшем использован в качестве типового решения и в других подобных случаях. В частности, в этой статье рассмотрим PHP-код, который позволит при отправке формы производить необходимые записи в специально созданную для этого таблицу MySQL.

При этом, для того, чтобы обеспечить достоверность сохраненных данных, в рассматриваемом варианте будет предусмотрена проверка результатов выполнения с выводом соответствующих сообщений в окне браузера.

Содержание


  • Создаем таблицу БД MySQL
  • Формируем функцию записи данных из формы в таблицу MySQL
  • Дополняем скрипт отправки формы записью данных в БД MySQL
  • Проверяем результат отправки формы
  • Исходные файлы сайта

Создаем таблицу БД MySQL


В первую очередь составим таблицу MySQL, в которую будем записывать данные. Очевидно, в этом случае количество полей таблицы должно соответствовать количеству элементов ввода формы из расчета: одно поле таблицы - один элемент ввода формы.

Кроме того, в таблицу необходимо будет добавить еще некоторые поля, предназначенные для фиксирования даты и времени выполнения онлайн заказа. И конечно идентификатор "id", который автоматически будет увеличиваться на единицу при каждом создании новой записи.

В результате общий перечень полей таблицы можно представить в следующем виде:

№ пп Имя поля таблицы Имя поля фомы Данные
1 id - Идентификатор
2 date - Дата оформления заказа
3 time - Время оформления заказа
4 make-date - Дата выполнения заказа
5 client-name Имя Имя
6 client-login Логин Логин
7 marka Марка автомобиля Марка автомобиля
8 model Модель Модель автомобиля
9 year Год выпуска Год выпуска автомобиля
10 vin Последние 6 цифр VIN Последние 6 цифр VIN автомобиля
11 insurance Страховая компания Страховая компания
12 client-email E-mail Почтовый адрес
13 namer-order Вид заказа Вид заказа
14 center-price Цена сервис-центра Цена сервис-центра
15 discount-price Цена со скидкой Цена со скидкой
16 password Пароль Пароль

Рис.1 Перечень полей создаваемой таблицы

После того, как мы определили поля таблицы, теперь можно ее создать. Ранее, этой теме была специально отведена отдельная статья Создаем таблицы MySQL c помощью phpMyAdmin, SQL-команд и в PHP.

Поэтому сейчас на этом подробно останавливаться не будем. Отметим лишь, что при формировании таблицы в зависимости от вида данных будем использовать следующие типы полей: "int", "date", "time" и "varchar" с различными параметрами количества символов.

Ниже показан скриншот структуры созданной таблицы с именем "orders", сделанный в приложении phpMyAdmin.

Для увеличения / уменьшения размера изображения кликните по картинке
Структуры созданной таблицы

Рис.2 Структуры созданной таблицы

Таким образом таблица, в которой в дальнейшем мы сможем сохранять данные при отправке формы, создана.

Формируем функцию записи данных из формы в таблицу MySQL


Ранее нам уже не раз приходилось создавать подобные пользовательские функции. Все они размещались в отдельном файле "functions.php" папки "mysql", созданном специально для этих целей еще на этапе подключения базы данных.

Таким же образом мы поступим и сейчас, разместив в этом файле PHP-код функции, предназначенной для записи данных при отправке формы онлайн заказа.

В данном случае при указании параметров функции будем исходить из того, что передаваемые значения в порядке очередности должны соответствовать значениям полей таблицы. Ниже показан вариант PHP-кода сформированной пользовательской функции, созданной под именем "addOrders".

  1. <?php

  2. //----Функция записи данных при отправке формы онлайн заказа"-------------

  3. function addOrders($date, $time, $make_date, $client_name, $client_login, $marka, $model, $year, $vin, $insurance, $client_email, $namer_order, $center_price, $discount_price, $password) {

  4. global $mysqli;

  5. if (!$mysqli->query("INSERT INTO `orders` (`date`, `time`, `make-date`, `client-name`, `client-login`, `marka`, `model`, `year`, `vin`, `insurance`, `client-email`, `namer-order`, `center-price`, `discount-price`, `password`) VALUES ('$date', '$time', '$make_date', '$client_name', '$client_login', '$marka', '$model', '$year', '$vin', '$insurance', '$client_email', '$namer_order', '$center_price', '$discount_price', '$password')")) {

  6. //print ('Запись не выполнена: Код ошибки: '.$mysqli->errno.' - '.$mysqli->error);

  7. return false;

  8. }

  9. return true;

  10. }

  11. ?>

Рис.3 Функция записи данных при отправке формы онлайн заказа

В представленном коде хорошо видно соответствие локальных переменных, указанных в круглых скобках в качестве аргументов функции $date, $time, $make_date, $client_name, $client_login, $marka, $model, $year, $vin, $insurance, $client_email, $namer_order, $center_price, $discount_price и $password (поз.3), именам полей `date`, `time`, `make-date`, `client-name`, `client-login`, `marka`, `model`, `year`, `vin`, `insurance`, `client-email`, `namer-order`, `center-price`, `discount-price` и `password` (поз.5), в которые с помощью MySQL-команды "INSERT INTO" будут записываться переданные значения локальных переменных. В остальном, работа функции будет происходить аналогично тому, как это было в других подобных случаях.

Так, с помощью условного оператора if в зависимости от результата выполнения, функция завершается либо с возвратом скрипту значения true при успешном выполнении (поз.9), либо false - в случае, если при записи данных возникнут какие-либо проблемы (поз.7).

При этом, неуспешное выполнение записи данных, с помощью функции print() (поз.6) сопровождается выводом на страницу соответствующего сообщения с указанием кода ошибки и строкового ее описания.

Такая возможность вывода информации об ошибке предназначена в первую очередь для отладки программы, либо для случаев выяснения причин возникших проблем с записью данных. Пользователю это совсем не интересно и поэтому в нормальном рабочем состоянии этот фрагмент кода можно закомментировать.

В итоге, мы получили нужную функцию, при вызове которой будет происходить запись полученных из формы данных в соответствующие поля созданной таблицы "orders". И теперь осталось ее применить в скрипте отправки формы.

Дополняем скрипт отправки формы записью данных в БД MySQL


В предыдущей статье мы создали скрипт, с помощью которого получили данные при отправке формы в виде значений PHP-переменных. Поэтому, для того, чтобы записать их в таблицу MySQL, достаточно в этот скрипт добавить код вызова созданной в предыдущем разделе пользовательской функции "addOrders".

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

Ниже показан добавленный к ранее созданным фрагментам код скрипта отправки формы онлайн заказа, обеспечивающий запись данных в базу MySQL (темным фоном обозначены ранее сформированные строки кода, светлым - вновь созданные).

  1. <?php

  2. if (!empty($_POST["righting-button"])) {

  3. $marka = $_POST["marka"];

  4. $marka = check_symbol($marka, "Марка автомобиля", "1", "/^[ A-ZА-ЯЁ]+\z/iu");

  5. $model = $_POST["model"];

  6. $model = check_symbol($model, "Модель", "1", "/^[0-9A-ZА-ЯЁ]+\z/iu");

  7. $year = $_POST["year"];

  8. $year = check_symbol($year, "Год выпуска", "1", "/^[0-9]{4}\z/");

  9. $vin = $_POST["vin"];

  10. $vin = check_symbol($vin, "Последние 6 цифр VIN", "1", "/^[0-9]{6}\z/");

  11. $insurance = $_POST["insurance"];

  12. $insurance = check_symbol($insurance, "Страховая компания", "1", "/^[ 0-9A-ZА-ЯЁ-]+\z/iu");

  13. $order = $_POST["order"];

  14. if ($order == "1") $namer_order = "Набор для самостоятельной маркировки";

  15. if ($order == "2") $namer_order = "Противоугонная маркировка специалистом в сервис-центре";

  16. if ($order == "3") $namer_order = "Маркировка с индивидуальным дизайном";

  17. $namer_order = check_symbol($namer_order, "Вид заказа", "1", "/^[ А-ЯЁ-]+\z/iu");

  18. $center_price = $_POST["center-price"];

  19. $center_price = check_symbol($center_price, "Цена сервис-центра", "0", "/^[0-9]+р\.\z/");

  20. $discount_price = $_POST["discount-price"];

  21. $discount_price = check_symbol($discount_price, "Цена со скидкой", "0", "/^[0-9]+р\.\z/");

  22. $client_name = $_POST["client-name"];

  23. $client_name = check_symbol($client_name, "Имя", "1", "/^[А-ЯЁ]{3,}\z/iu");

  24. $client_email = $_POST["client-email"];

  25. $client_email = check_symbol($client_email, "E-mail", "0", "/^[A-Z0-9._%+-]+@([A-Z0-9-]+\.)+[A-Z]{2,6}\z/i");

  26. $client_login = $_POST["client-login"];

  27. $client_login = check_symbol($client_login, "Логин", "1", "/^[0-9A-Z]{3,}\z/i");

  28. $client_password_1 = $_POST["client-password_1"];

  29. $client_password_1 = check_symbol($client_password_1, "Пароль", "1", "/^[0-9A-Z]{6,}\z/i");

  30. $client_password_2 = $_POST["client-password_2"];

  31. $client_password_2 = check_symbol($client_password_2, "Подтверждение пароля", "1", "/^[0-9A-Z]{6,}\z/i");

  32. if ($client_password_1 != $client_password_2) $GLOBALS['alert'] = $GLOBALS['alert'].'Значения в полях ввода пароля не совпадают';

  33. //echo nl2br($marka. "\n" .$model. "\n" .$year."\n".$vin. "\n" .$insurance. "\n" .$namer_order. "\n" .$center_price. "\n" .$discount_price. "\n" .$client_name. "\n" .$client_email. "\n" .$client_login. "\n" .$client_password_1. "\n" .$client_password_2);

  34. if (!empty($GLOBALS['alert'])) {

  35. $GLOBALS['alert'] = 'Данные из формы не отправлены. Обнаружены следующие ошибки: \n'.$alert;

  36. include "alert.php";

  37. }

  38. else {

  39. $date = date("Y-m-d");

  40. $time = date("H:i:s");

  41. $salt = substr(sha1(mt_rand()),6,22);

  42. $password = crypt($client_password_1, '$2y$10$'.$salt.'$');

  43. $success = addOrders($date, $time, $make_date, $client_name, $client_login, $marka, $model, $year, $vin, $insurance, $client_email, $namer_order, $center_price, $discount_price, $password);

  44. if ($success) $GLOBALS['alert'] = "Вы успешно отправили форму онлайн заказа. Информацию о статусе заявки и порядке получения скидки Вы сможете найти в личном кабинете.";

  45. else

  46. $GLOBALS['alert'] = "Ошибка при отправке формы. Попробуйте еще раз. В случае повторения ошибки, пожалуйста обратитесь к администратору сайта через вкладку Контакты.";

  47. include "alert.php";

  48. }

  49. }

  50. ?>

Рис.4 PHP-код скрипта отправки формы онлайн заказа с записью данных в БД MySQL

Как видно, дополненный фрагмент кода состоит всего из нескольких строк (поз.39÷47). Сначала с помощью встроенной функции PHP date() формируются недостающие значения аргументов, такие как, текущая дата в виде переменной $date (поз.39) и время в виде переменной $time (поз.40).

Кроме того, в целях защиты паролей пользователей, для значения переменной $client_password_1 с помощью функции crypt применено необратимое хеширование (поз.42) с Blowfish-шифрованием и добавлением к параметру алгоритма Blowfish автоматически генерированной уникальной "соли" в виде значения $salt. Которая в свою очередь сформирована извлечением строки из хеша псевдослучайной последовательности длиной в 22 символа с помощью функций substr(), sha1() и mt_rand() (поз.41).

Вообще, хеширование пароля это один из важнейших вопросов защиты учетных записей пользователей, требующий отдельного рассмотрения. Все же пользователи доверяют нам свои персональные данные, и к этому нужно относиться серьезно. Поэтому, сейчас мы не будем на этом останавливаться, а в следующей статье подробно рассмотрим этот и другие варианты хеширования данных.

Остальные параметры функции соответствуют ранее полученным значениям переменных $client_name, $client_login, $marka, $model, $year, $vin, $insurance, $client_email, $namer_order, $center_price и $discount_price.

После того, как определены все параметры, выполняется вызов функции "addOrders" (поз.43). И исходя из возвращенного значения в виде переменной $success, с помощью условного оператора if (поз.44), в глобальную переменную $GLOBALS['alert'] записывается либо текст, соответствующий успешной записи в таблицу MySQL (поз.44), либо информационное сообщение о возникшей проблеме (поз.46).

Таким образом вместе с ранее созданными фрагментами, скрипт отправки формы онлайн заказа полностью готов для выполнения всех необходимых действий с данными, включая:

  • получение в виде значений переменных PHP;
  • валидацию на стороне сервера;
  • запись в базу данных;
  • проверку на успешность записи онлайн заказа
  • вывод информационного сообщения в диалоговом окне браузера о результатах выполнения отправки формы.

И теперь осталось нам только это проверить.

Проверяем результат отправки формы


Проверку отправки формы сделаем в два этапа. Сначала отправим форму с намерено сделанной какой-нибудь ошибкой в коде пользовательской функции записи данных, нарушающей нормальное ее функционирование. А затем проверим отправку формы в рабочем режиме без каких-либо ошибок.

Для первого варианта изменим, к примеру, имя поля "time" на ошибочное "times", как показано в следующей таблице кода пользовательской функции "addOrders". Где строка с изменениями выделена светлым фоном, а имя поля с ошибкой - красным светом. И кроме этого, для вывода кода ошибки в случае проблем записи данных, раскомментируем соответствующую строку кода под номером 6.

  1. <?php

  2. //----Функция записи данных при отправке формы онлайн заказа"-------------

  3. function addOrders($date, $time, $make_date, $client_name, $client_login, $marka, $model, $year, $vin, $insurance, $client_email, $namer_order, $center_price, $discount_price, $password) {

  4. global $mysqli;

  5. if (!$mysqli->query("INSERT INTO `orders` (`date`, `times`, `make-date`, `client-name`, `client-login`, `marka`, `model`, `year`, `vin`, `insurance`, `client-email`, `namer-order`, `center-price`, `discount-price`, `password`) VALUES ('$date', '$time', '$make_date', '$client_name', '$client_login', '$marka', '$model', '$year', '$vin', '$insurance', '$client_email', '$namer_order', '$center_price', '$discount_price', '$password')")) {

  6. print('Запись не выполнена: Код ошибки: '.$mysqli->errno.' - '.$mysqli->error);

  7. return false;

  8. }

  9. return true;

  10. }

  11. ?>

Рис.5 PHP-код функции "addOrders" с внесенной ошибкой

А затем в таком положении отправим форму.

Ниже, на рис.6 показан скриншот формы онлайн заказ с введенными для проверки данными, а на рис.7 полученный результат отправки формы по первому варианту, а именно: с допущенной в коде функции ошибкой в имени поля таблицы MySQL.

Для увеличения / уменьшения размера изображения кликните по картинке
Скриншот формы онлайн заказа с введенными данными

Рис.6 Скриншот формы онлайн заказа с введенными данными

Для увеличения / уменьшения размера изображения кликните по картинке
Результат отправки формы с ошибкой в имени поля таблицы MySQL

Рис.7 Результат отправки формы с ошибкой в имени поля таблицы MySQL

Как видно, после отправки формы в диалоговом окне браузера, как и следовало ожидать, появилось сообщение об ошибке, при которой запись в базу данных не была произведена.

Так как на время проверки в коде функции мы заблаговременно раскомментировали строку 6, предназначенную для отображения результатов отправки формы, то внизу страницы можно будет увидеть код ошибки с ее строковым описанием, как показано на следующем скриншоте.

Для увеличения / уменьшения размера изображения кликните по картинке
Отображение кода ошибки записи данных с ее строковым описанием

Рис.8 Отображение кода ошибки записи данных с ее строковым описанием

В данном случае получено информационное сообщение о том, что запись не выполнена с кодом ошибки 1054. При этом в ее в описании указано, что в списке полей обнаружен неизвестный столбец "times". Что вполне объяснимо, так как ранее мы преднамеренно ввели ошибку в обозначении имени этого поля.

Таким образом мы проверили, как реагирует наш скрипт на отправку формы при наличии проблем с записью данных. Как видно, все отработало должным образом.

И теперь нам осталось проверить второй вариант - отправить форму в нормальном режиме, без внесенных каких-либо ошибок. И посмотреть, будет ли создана новая запись в таблице "orders" и если да, то какие данные в нее будут занесены.

Для этого устраним ранее созданную ошибку в коде пользовательской функции и отправим форму.

Для увеличения / уменьшения размера изображения кликните по картинке
Результат успешной отправки формы

Рис.9 Результат успешной отправки формы

Видно, что в диалоговом окне браузера снова появилось сообщение, но только теперь оно об успешной отправке формы.

При этом, если открыть таблицу "orders", то можно увидеть, что все ранее введенные в форму данные в точном соответствии сохранены в новой записи.

Данные из формы, записанные в таблицу MySQL

Рис.10 Данные из формы, записанные в таблицу MySQL

Исключение составляют всего лишь данные в поле "password", в котором записан не сам пароль, а его хеш, состоящей из значительно большего количества символов.

Таким образом проверен и вариант успешной отправки данных из формы.


В итоге мы создали инструмент в виде PHP-скрипта, с помощью которого можно отправлять форму с записью всех введенных в нее данных.

А вот, что касается хеширования данных пароля, то как было ранее сказано, этот вопрос мы подробно рассмотрим в следующей статье.

Исходные файлы сайта


Знак папкиИсходные файлы сайта с обновлениями, которые были сделаны в данной статье, можно скачать из прилагаемых дополнительных материалов:

  • Файлы каталога www
  • Таблицы базы данных MySQL

Дополнительные материалы бесплатно предоставляются только зарегистрированным пользователям.

Для скачивания исходных файлов необходимо войти под своим аккаунтом через форму на главной панели.

Для тех кто не зарегистрирован, можно это сделать на вкладке Регистрация.

С уважением, Николай Гришин


Комментарии


Если у Вас возникли вопросы, или есть какие-либо пожелания по представлению материала, либо заметили какие-нибудь ошибки, а быть может просто хотите выразить свое мнение, пожалуйста, оставьте свои комментарии. Такая обратная связь очень важна для возможности учитывать в дальнейшем мнение посетителей.

Буду Вам за это очень признателен!

comments powered by HyperComments