Обработка больших форм

Серверное программирование
Аватара пользователя
yurecnt
Администратор
Сообщения: 135
Зарегистрирован: 17 дек 2014, 14:02
Откуда: Нижий Тагил
Контактная информация:

Обработка больших форм

Сообщение yurecnt » 12 окт 2015, 09:45

Лень - двигатель прогресса, иногда заказчики требуют создать большие анкеты, но когда стандартным способом создаешь большую анкету - и стандартно ее обрабатываешь - это очень муторно, прописывать переменным все значения POST, потом составлять SQL-запрос с внесением этих данных, или - обновление данных...
А не дай бог в процессе эволюции сайта надо будет добавить еще ряд полей или убрать - начинается гемор с поиском переменных, правкой SQL-запросов и так далее... Тут решил это дело автоматизировать, тупо меняем форму в html - нажимаем submit и готово.
Можно было наверстать две функции, либо один класс... в общем - первые шаги в ООП... Вот и получилось это:

Код: Выделить всё

<?php
class set_mysql {
var $massiv;
      function add($tab) {
            $arr=$this->massiv;
            foreach ($arr as $key => $value) {
                  if ($key!='ok'){
                        $tabs.='`' . mysql_real_escape_string($key) . '`, ';
                        $val.='"' . mysql_real_escape_string($value) . '", ';
                  }
            }
            $tabs=substr($tabs, 0, strlen($tabs)-2);
            $val=substr($val, 0, strlen($val)-2);
            mysql_query('insert into `' . $tab . '` (' . $tabs . ') VALUES (' . $val . ')');
      }
 
      function update($tab, $id) {
            $arr=$this->massiv;
            foreach ($arr as $key => $value) {
                  if ($key!='ok')   $res.='`' . mysql_real_escape_string($key) . '` = "' . mysql_real_escape_string($value) . '", ';
            }
            $res=substr($res, 0, strlen($res)-2);
            mysql_query('UPDATE `' . $tab . '` SET ' . $res . ' WHERE `id` = "' . $id . '"' );
      }
}
//Работа:
$set_mysql = new set_mysql;
$set_mysql->massiv = $_POST;//Что пихаем в БД
$set_mysql->add('pages');//Тупое добавление
$set_mysql->update('pages', ID);//Обновление данных по ID
?>


Данным классом предусматривается нажатие SUBMIT с именем ok, именно значение этой кнопки - игнорируется, так как нет смысл ее писать в БД. Поля в форме должны совпадать с именами полей в таблице... Разумеется - это простой вариант обработки больших форм, однако - надо подразумевать, что если еще и картинки грузим - то у нас с этим - нихрена не выйдет.

Аватара пользователя
yurecnt
Администратор
Сообщения: 135
Зарегистрирован: 17 дек 2014, 14:02
Откуда: Нижий Тагил
Контактная информация:

Re: Обработка больших форм

Сообщение yurecnt » 13 окт 2015, 06:00

Оффтоп... как то один раз дебажил Битрикс, где есть функция "смена решения", выбираешь новый дизайн, нажимаешь "Пыщь" и оно устанавливается, но не тут то было, обновление шло с помощью хитро-выепанного SQL-запроса, который генерировал пхп скрипт. В итоговом SQL-запросе я не нашел ни одной ковычки. Длина запроса - была несколько страниц формата А4, следовательно - искать баг - было очень трудоемко. Баг был в том, что попало пустое значение, следовательно SQL-запрос вылетел в ошибку... Пришлось думать, как исправить, пришлось править код, чтобы ставил ковычки, баг был побежден... с тех пор ни когда не забываю про ковычки в запросе.
На поиск и исправление бага ушло 15 минут....


Вернуться в «PHP»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость

cron