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 ));
Скачать проект урока