[Iws] Диалоговые окна - lesson 05


Диалоговые окна. Обработка информации на сервере. База данных «training». Повторение имени в БД. Обработка информация на сервере.

1. Обработка информации из формы на сервере. См.  Диалоговые окна - lesson 02, Диалоговые окна - lesson 03 и Диалоговые окна - lesson 04 Вспомним как происходит обработка информации, полученной из формы mdw: Ввод в форму производится на ПК пользователя (далее просто ПК); После нажатия «Ok (условно)» информация обрабатывается на ПК на JavaScript (jQuery - Ajax); Далее AJAX отправляет информацию на сервер; На сервере информация обрабатывается на PHP и сохраняется в БД; После чего обработанная информация (или ее часть) возвращается назад на ПК для дальнейшего использования, и обрабатывается на JavaScript; 2. База данных «training». См. Общие понятия - lesson 05 База данных MySQL Откроем MySQL WorkBench и для работы создадим БД с именем «training» (без кавычек).  В ней создадим таблицу z_user_reg - для регистрации пользователей (в первой строке сокращения расшифрованы): id – Data Type - INT Primary Key - PK Not Null - NN Unique - UQ Auto Increment - AI; name – VARCHAR (30) NN UQ; mail – VARCHAR (50) NULL; pass - – VARCHAR (15) NN; Создать эту таблицу можно выполнив один скрипт SQL, для этого: нажимаем ctrl+t откроется панель для ввода скрипта; вводим скрипт SQL: CREATE TABLE `training`.`z_user_reg` ( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(30) NOT NULL, `mail` VARCHAR(50) NULL DEFAULT NULL, `pass` VARCHAR(15) NOT NULL, PRIMARY KEY (`id`), UNIQUE INDEX `id_UNIQUE` (`id` ASC), UNIQUE INDEX `name_UNIQUE` (`name` ASC)); нажимаем ctrl+enter; обновляем SCHEMAS в Navigator (кнопка обновления справа от слова SCHEMAS); Все. Должна быть создана наша таблица. Кстати скрипт SQL можно сохранить, что Вам и будет предложено сделать при закрытии панели. Если внимательно рассмотреть скрипт SQL можно в нем разобраться самостоятельно (немного английского и интернета), я специально разбил его по строкам. Создадим еще одну таблицу - z_save_mdw - для сохранения информации из mdw (см. картинку): CREATE TABLE `training`.`z_save_mdw` (`id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(45) DEFAULT NULL, `mail` varchar(45) DEFAULT NULL, `text` varchar(45) DEFAULT NULL, `img` varchar(45) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `id_UNIQUE` (`id`)) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COMMENT=`name, mail, text, image`; В таблицу z_user_reg введем данные: name: iuraf mail: iuraf@iuraf.ru pass: 1234 Важно! Чтобы информация сохранилась в базе не забудьте нажать «Apply» 3. Проверка повторения имени пользователя в БД. Тот, кто внимательно читает может заменить, я пропустил операцию проверки повторения имени пользователя в БД. Файл «_mdw_txt_check_user_base.php» мы создали вместе с проектом, но он пуст. Введем в него такую программу: require_once $_SERVER[`DOCUMENT_ROOT`] . `/_library/_common/_base_funk_class.php`; // подключили библиотеку работы с БД            $base = new _base_funk_class( $param_connect_base ); // создали подключение к БД            $table = `z_user_reg`; // таблица для подключения $where = `name = "` . $_POST[`_fld_name`] . `"`; // условие для SQL запроса if ( $base->check_fields( $table, $where ) ) { // получили поле, если успех echo 1; // возвращаем имя пользователя недоступно } else { echo 0; // возвращаем имя пользователя доступно } Для работы с БД мы будем использовать написанную мной библиотеку `/_library/_common/_base_funk_class.php` содержимое описано подробно в самой библиотеке. В БД в таблице «z_user_reg», которой мы будем искать повторения, пользователь iuraf уже есть (см. пункт 2). Можно проверить. Проверка производится в функции «валидация текстовых полей - validation_fields» в файле _mdw_txt.js с помощью функции AJAX - $.post 4. Обработка информация на сервере, сохранение в БД и возврат в функцию управления данными mdw. Вернемся к файлу «_user_ajax_data.php» в который передаются данные mdw. Напомню, что мы должны сделать в этом файле: Сохранить поля name, mail, text, image в таблице `z_save_mdw` базы данных «training»; сохраняем данные в переменных php: создадим глобальную переменную $_SESSION[`name`] и запишем в нее значение из поля name; отправляем mail админу с текстом «Привет админ!» и картинкой; формируем сообщение на экран в объекте «$_data_mess_after_close»; возвращаем объекте «$_data_mess_after_close» назад в JS (в функцию управление данными mdw) и отладочную информацию. 4.1 Подготовка полученных данных для использования. Технически мы передаем один JS объект с именем form_data, соответственно получаем на сервере PHP объект $form_data: `_fld_name` => string - переменная `_fld_mail` => string - переменная `_fld_pass` => string - переменная `_fld_text_area` => string - переменная `_fld_captcha` => string - переменная `param_save_img` => string - объект `param_user_extra` => string - объект Первые пять переменных это поля формы mdw, а остальные две переменных это объекты, сами содержащие переменные. Для удобства использования мы разделим объект $form_data на 3 объекта: $form_data param_save_img param_user_extra собственно, изначально до передачи так и было – мы переменные param_save_img и param_user_extra добавили к form_data (см функцию управление данными mdw в файле _mdw_txt.js). $form_data = get_form_data(); // получим данные формы (без `лишних` переменных) $param_save_img = (array) json_decode( $_POST[`param_save_img`] ); // получим параметры сохранения img $param_user_extra = (array) json_decode( $_POST[`param_user_extra`] ); // получим дополнительные параметры $tmp_image = $_FILES[`_fld_input_img`]; //получили картинку во временную папку (temp); см. Картинку в цветных рамках выделены переменные отладки: красная - var_dump( $form_data ); желтая - var_dump( $param_save_img ); голубая - var_dump( $param_user_extra ); малиновый - var_dump( $image ); зеленая - var_dump( $_data_mess_after_close ); 4.2 Если пользователь ввел картинку сохраняем файл image в папку. Для сохранения image в папку подключим библиотеку «_mdw_txt_save_img.php» передав в нее необходимые параметры: if ( $tmp_image[`error`] === 0 ) { require_once $_SERVER[`DOCUMENT_ROOT`] . `/_library/_mdw_txt/_mdw_txt_save_img.php`; $res_save_image_folder = save_image_in_folder( $tmp_image, $param_save_img ); } Функция сохранит файл в соответствии с заданными параметрами «$param_save_img» и вернет результат в объекте: $res_save_image_folder =[ name => имя img, path => папка сохранения ]; При ошибке возвращается - false 4.3 Сохранить поля «name, mail, text, image» в таблице «z_save_mdw» в базе данных «training». Теперь нам нужно сохранить поля формы в БД. Для этого ищем в библиотеке «_base_funk_class» функцию «ДОБАВИТЬ ЗАПИСЬ» в описании Вы найдете параметры, передаваемые в функцию. Для удобства создадим функцию и при вызове передадим ей необходимые параметры: // сохраним поля в БД function save_field_in_BD( $table, $form_data, $res_save_image_folder ) { // подключим библиотеку работы с БД require_once $_SERVER[`DOCUMENT_ROOT`] . ` / _library/_common/_base_funk_class.php`; $base = new _base_funk_class( null );            $fields = [ `name` => $form_data[`_fld_name`], `mail` => $form_data[`_fld_mail`], `text` => $form_data[`_fld_text_area`], `img` => $res_save_image_folder[`name`] ];            return $base->save_fields( $table, $fields ); } Вызываем эту функцию: $res_save_field_in_BD = save_field_in_BD( `z_save_mdw`, $form_data, $res_save_image_folder ); // сохраним поля в БД. Результат id / false Результат в переменной $res_save_field_in_BD: Успех – id записи; Ошибка – false; 4.4 Отправим mail админу с картинкой. sendmail — агент передачи почты (MTA — mail transfer agent). Чтобы мы могли отправлять mail не сервера, а с ПК, на котором мы пишем и отлаживаем программу, необходимо использовать программу, которая называется «sendmail». Скачать программу можно из интернета или раздела «Скачать» моего сайта. Устанавливаете программу «sendmail»: Скачиваете архив с программой; Распаковываете программу в папку «c:sendmail»; Изменяете настройки программы в файле «sendmail.ini», я сделал комментарии к параметрам на русском языке; В файл php.ini добавляете раздел: [mail function] ;Forwin32 only SMTP = ;Forwin32 only sendmail_from = sendmail_path = "C:sendmailsendmail.exe -t" Получаем пароль приложения на сервере почты: Прежде чем вносить изменения в sendmail.ini необходимо получить код доступа к серверу, на котором расположен Ваш почтовый ящик. Я приведу пример для Яндекса: Войти в свою учетную запись Меню Паспорт Пароли приложений / Создать новый пароль Выберите тип приложения – Почта Введите название пароля для доступа к почте: например – «почта сайта iuraf» Скопируйте пароль и вставьте в «sendmail.ini» Для отправки mail подключим библиотеку «_send_mail.php» передав в нее необходимые параметры: Создадим функцию отправки mail админу и картинкой с побощью библиотеки «_send_mail.php»: function send_mail( $param_user_extra, $form_data, $message, $tmp_image ) { // подключим библиотеку send_mail require_once $_SERVER[`DOCUMENT_ROOT`] . ` / _library/_common/_send_mail.php`;                    $mail_to = $param_user_extra[`mail_to`]; // кому email address $mail_from = $form_data[`_fld_mail`]; // от кого mail $site_from = $param_user_extra[`site_from`]; // с какого сайта return send_mail_admin( $mail_to, $mail_from, $site_from, $message, $tmp_image ); } Вызов функции отправки mail админу и картинкой: $message = "Текст сообщения:" . $form_data[`_fld_text_area`]; $res_send_mail = send_mail( $param_user_extra, $form_data, $message, $tmp_image ); 4.5 создадим сообщение после закрытия mdw. После всех выполненных операций надо сообщить пользователю о результате. В функции «get_data_mess_after_close_default» создадим объект, который будем возвращать в JS наше сообщение: $_data_mess_after_close = [ mess => true, // true - выводить сообщение иначе false res => true, // true - все хорошо иначе false legend_ok => `Сохранение данных из mdw` legend_err => `Ошибка при сохранении данных из mdw` text => null, // текст сообщения icon_ok => `/_library/_mdw_txt/img/icon_ok.gif`, // иконка при успехе icon_err => `/_library/_mdw_txt/img/icon_err.gif` // иконка при ошибке width => null, // null / число - ширина окна сообщения, по умолчанию 450px ]; Затем, с помощью функции «get_data_mess_after_close» сформируем текст сообщения в переменной $_data_mess_after_close[`text`] Вернем информацию в функцию управление данными mdw, предварительно кодировав в JSON: echo (json_encode( $_data_mess_after_close ));   Скачать проект урока