Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
 Аватар для Serj190492
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830

Обработчик формы

17.08.2016, 13:03. Показов 2693. Ответов 41
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здравствуйте!

Есть в проекте форма, её обработчик. Если всё, что нужно, подключать именно в этих файлах - форма работает, всё добавляется.

Пробую внедрить форму на сайт - всё ломается, форма при нажатии кнопки никак не реагирует. только java в консоль (в браузере по F12 которая) выдаёт
Code
1
2
jquery.min.js:16 Uncaught Invalid JSON: <br />
<b>Fatal error</b>:  Class 'C_Base' not found in <b>C:\OpenServer\OpenServer\domains\algoritm.96.lt\controllers\C_New.php</b> on line <b>7</b><br />
Понимаю, что java не видит родительский класс, но почему - не понимаю.
Вот так было:
Форма:
Кликните здесь для просмотра всего текста
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
<form action="templates/process_form.php" class="TTWForm" method="post" novalidate=""
     style="width: 700px;">
 
          <fieldset title="Основная информация"><legend>Основная информация</legend>
 
               <div id="field1-container" class="field f_100">
                    <label for="field1">
                         Наименование
                    </label>
                    <input type="text" name="name" id="field1" required="required">
               </div>
 
и т.д.


templates/process_form.php:
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
<?php
 
require_once '../config.php';
require_once '../models/M_MSQL.php';
 
 
$form = new ProcessForm();
$form->field_rules = array(
    'name'=>'required',
    'adres'=>'required',
    'inn'=>'required',
    'phone'=>'required',
    'mail'=>'email|required',
    'director'=>'',
    'glavbuh'=>'',
    'date_start'=>'',
    'expiries'=>'',
    'its'=>'',
    'login'=>'',
    'password'=>'',
    'programm_1'=>'',
    'reg_nomer_1'=>'',
    'programm_2'=>'',
    'reg_nomer_2'=>'',
    'programm_3'=>'',
    'reg_nomer_3'=>''
);
$form->validate();
 
 
 
class ProcessForm
{
    public $field_rules;
    public $error_messages;
    public $fields;
    private $error_list;
    private $is_xhr;
 
 
    function __construct()
    {
        $this->error_messages = array(
            'required' => 'Поле не должно быть пустым!',
            'mail' => 'Введите корректный email!',
            'number' => 'Введите числовое значение!',
            'url' => 'Please enter a valid URL',
            'pattern' => 'Пожалуйста, исправьте это значение!',
            'min' => 'Please enter a value larger than the minimum value',
            'max' => 'Please enter a value smaller than the maximum value'
        );
 
        $this->field_rules = array();
        $this->error_list = '';
        $this->fields = $_POST;
        $this->is_xhr = $this->xhr();
    }
 
    function validate()
    {
        if (!empty($this->fields))
        {
            //Validate each of the fields
            foreach ($this->field_rules as $field => $rules)
            {
                $rules = explode('|', $rules);
 
                foreach ($rules as $rule)
                {
                    $result = null;
 
                    if (isset($this->fields[$field]))
                    {
                        $param = false;
 
                        if (preg_match("/(.*?)\[(.*?)\]/", $rule, $match))
                        {
                            $rule = $match[1];
                            $param = $match[2];
                        }
 
                        $this->fields[$field] = $this->clean($this->fields[$field]);
 
                        //if the field is a checkbox group create string
                        if (is_array($this->fields[$field]))
                            $this->fields[$field] = implode(', ', $this->fields[$field]);
 
                        // Call the function that corresponds to the rule
                        if (!empty($rule))
                            $result = $this->$rule($this->fields[$field], $param);
 
                        // Handle errors
                        if ($result === false)
                            $this->set_error($field, $rule);
                    }
                }
            }
 
            if (empty($this->error_list))
            {
                if ($this->is_xhr)
                    echo json_encode(array('status' => 'success'));
 
                $this->process();
            }
            else
            {
                if ($this->is_xhr)
                    echo json_encode(array('status' => 'invalid', 'errors' => $this->error_list));
                else echo $this->error_list;
            }
        }
    }
 
    function process(){
 
        $db = M_MSQL::Instace();
        //Информация о контрагенте
        if(!empty($_POST['name'])) $name = $_POST['name'];
        if(!empty($_POST['adres'])) $adres = $_POST['adres'];
        if(!empty($_POST['inn'])) $inn = $_POST['inn'];
        if(!empty($_POST['phone'])) $phone = $_POST['phone'];
        if(!empty($_POST['mail'])) $mail = $_POST['mail'];
        if(!empty($_POST['director'])) $director = $_POST['director'];
        if(!empty($_POST['glavbuh'])) $glavbuh = $_POST['glavbuh'];
        if(!empty($_POST['login'])) $login = $_POST['login'];
        if(!empty($_POST['password'])) $password = $_POST['password'];
 
        $add_contragents = array(
            'name' => $name,
            'adres' => $adres,
            'inn' => $inn,
            'telephone' => $phone,
            'mail' => $mail,
            'director' => $director,
            'glavbuh' => $glavbuh,
            'login' => $login,
            'password' => $password
        );
 
        $id_contragent = $db->Insert('contragents', $add_contragents); //вставляем запись и получаем ИД
 
        //Информация о договоре с контрагентом
        if(!empty($_POST['date_start'])) $date_start = $_POST['date_start'];
        if(!empty($_POST['expiries'])) $expiries = $_POST['expiries'];
        $is_its = null;
        if(!empty($_POST['date_start'])) $is_its = ($_POST['its'] == 'Да') ?  1 : 0;
 
        if($is_its){
            $add_contract = array(
                'id_contragent' => $id_contragent,
                'date_start' => $date_start,
                'expiries' => $expiries,
                'is_its' => $is_its
            );
            $db->Insert('contracts', $add_contract);
        }
        else{
            $add_contract1 = array(
                'id_contragent' => $id_contragent,
            );
            $db->Insert('contracts', $add_contract1);
        }
 
        //Информация о ПП контрагента
        if(!empty($_POST['programm_1'])) $programm_1 = $_POST['programm_1'];
        if(!empty($_POST['reg_nomer_1'])) $reg_nomer_1 = $_POST['reg_nomer_1'];
        if(!empty($_POST['programm_2'])) $programm_2 = $_POST['programm_2'];
        if(!empty($_POST['reg_nomer_2'])) $reg_nomer_2 = $_POST['reg_nomer_2'];
        if(!empty($_POST['programm_3'])) $programm_3 = $_POST['programm_3'];
        if(!empty($_POST['reg_nomer_3'])) $reg_nomer_3 = $_POST['reg_nomer_3'];
 
        if($programm_1 && $reg_nomer_1){
            $add_product1 = array(
                'id_contragent' => $id_contragent,
                'reg_nomer' => $reg_nomer_1,
                'name' => $programm_1
            );
            $db->Insert('products', $add_product1);
        }
        if($programm_2 && $reg_nomer_2){
            $add_product2 = array(
                'id_contragent' => $id_contragent,
                'reg_nomer' => $reg_nomer_2,
                'name' => $programm_2
            );
            $db->Insert('products', $add_product2);
        }
        if($programm_3 && $reg_nomer_3){
            $add_product3 = array(
                'id_contragent' => $id_contragent,
                'reg_nomer' => $reg_nomer_3,
                'name' => $programm_3
            );
            $db->Insert('products', $add_product3);
        }
 
        return true;
 
    }
 
    function set_error($field, $rule)
    {
        if ($this->is_xhr)
        {
            $this->error_list[$field] = $this->error_messages[$rule];
        }
        else $this->error_list .= "<div class='error'>$field: " . $this->error_messages[$rule] . "</div>";
    }
 
    function xhr()
    {
        return (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') ? true : false;
    }
 
    /** Validation Functions */
    function required($str, $val = false)
    {
 
        if (!is_array($str))
        {
            $str = trim($str);
            return ($str == '') ? false : true;
        }
        else
        {
            return (!empty($str));
        }
    }
 
    function email($str)
    {
        return (!preg_match("/^(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){255,})(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){65,}@)(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22))(?:\\.(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-[a-z0-9]+)*\\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-[a-z0-9]+)*)|(?:\\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\\]))$/iD", $str)) ? false : true;
    }
 
    function number($str)
    {
        return (!is_numeric($str)) ? false : true;
    }
 
    function min($str, $val)
    {
        return ($str >= $val) ? true : false;
    }
 
    function max($str, $val)
    {
        return ($str <= $val) ? true : false;
    }
 
    function pattern($str, $pattern)
    {
        return (!preg_match($pattern, $str)) ? false : true;
    }
 
    function clean($str)
    {
        $str = is_array($str) ? array_map(array("ProcessForm", 'clean'), $str) : str_replace('\\', '\\\\', strip_tags(trim(htmlspecialchars((get_magic_quotes_gpc() ? stripslashes($str) : $str), ENT_QUOTES))));
        return $str;
    }
}
В таком варианте форма работала.

Как сделал:

В html-коде формы поставил action="".
Файл process_form.php разобрал на модель и вызов методов модели, т.е.

M_ProcessForm.php
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
 
class M_ProcessForm extends C_Base
{
    public $field_rules;
    public $error_messages;
    public $fields;
    private $error_list;
    private $is_xhr;
    private static $instance;
 
    public static function Instance(){
        if(self::$instance == null)
            self::$instance = new M_ProcessForm();
        return self::$instance;
    }
ДАЛЬШЕ ВСЁ ТО ЖЕ, ЧТО И БЫЛО РАНЬШЕ


С помощью site.ru/?c=new ($_GET['c'] == 'new') вызываю класс C_New, в котором идет вызов этой модели и её методов:
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?php
 
class C_New extends C_Base
{
    //
    // Конструктор.
    //
    function __construct()
    {
    }
 
    //
    // Виртуальный обработчик запроса.
    //
    protected function OnInput()
    {
        parent::OnInput();
        $this->title = $this->title . ' :: Новая статья';
 
        $form = M_ProcessForm::Instance();
        $form->field_rules = array(
            'name'=>'required',
            'adres'=>'required',
            'inn'=>'required',
            'phone'=>'required',
            'mail'=>'email|required',
            'director'=>'',
            'glavbuh'=>'',
            'date_start'=>'',
            'expiries'=>'',
            'its'=>'',
            'login'=>'',
            'password'=>'',
            'programm_1'=>'',
            'reg_nomer_1'=>'',
            'programm_2'=>'',
            'reg_nomer_2'=>'',
            'programm_3'=>'',
            'reg_nomer_3'=>''
        );
        $form->validate();
    }
 
    //
    // Виртуальный генератор HTML.
    //
    protected function OnOutput()
    {
        //$vars = array('title_article' => $this->title_article, 'content' => $this->content);
        $this->content = $this->Template('templates/add_form.php');
        parent::OnOutput();
    }
}


Ну а дальше - всё, что написал вначале -- нет реакции, ошибка про класс из jav'ы
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.08.2016, 13:03
Ответы с готовыми решениями:

Обработчик формы методом класса
Доброго дня. Делаю авторизацию на сайте. В action тега form указываю адрес, на котором в роутере висит метод класса, отвечающий за...

Обработчик формы. список
Помогите люди) Как изменить обработчик формы, а то последняя переменная(name=&quot;vibor&quot;) передает пустое значение. &lt;form...

Форма и обработчик формы
Здравствуйте! Подскажите, пожалуйста, в чем проблема? есть форма &lt;form method=&quot;post&quot; action=&quot;&quot;&gt; ...

41
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
17.08.2016, 13:09
Serj190492, а файл то с классом подключаете?

почитайте про автозагрузку классов и пространства имен
1
 Аватар для Serj190492
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
17.08.2016, 14:16  [ТС]
Cra3y, файл index.php:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
require_once 'controllers/autoload.php';
require_once 'config.php';
 
switch ($_GET['c']){
    case 'new':
        $class = new C_New();
        break;
    case 'editor':
        $class = new C_Editor();
        break;
    case 'edit':
        $class = new C_Edit();
        break;
    default:
        $class = new C_Index();
        break;
}
 
$class->Request();
файл autoload.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
function __autoload($classname)
{
    $path = explode('_', $classname);
    switch ($path[0])
    {
        case 'M':
            include ('models/'.$classname.'.php');
            break;
        case 'C':
            include ('controllers/'.$classname.'.php');
    }
}
Добавлено через 18 минут
Cra3y, не, я еще слабо вник в ООП, чтобы понять namespace...)
Я PHP - то месяц изучаю (и то с перерывами)
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
17.08.2016, 14:18
Цитата Сообщение от Serj190492 Посмотреть сообщение
C_Base
Этот класс существует?
1
 Аватар для Serj190492
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
17.08.2016, 14:23  [ТС]
Да. Все остальные
Цитата Сообщение от Para bellum Посмотреть сообщение
Этот класс существует?
Да.

Вот скрин папки controllers:

При этом, остальные классы (выделенные синим) работают с базовым (C_Base) нормально...
0
 Аватар для Serj190492
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
17.08.2016, 14:24  [ТС]
Да и C_New работал, пока я форму в него не добавил...
0
 Аватар для Serj190492
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
17.08.2016, 14:31  [ТС]
Перешёл на другой комп... Вроде в файлах осталось всё так же, но изменилась ошибка в консоли... См. скрин
Миниатюры
Обработчик формы  
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
17.08.2016, 14:32

Не по теме:

А что Вы домен на картинке замазали, он же виден в ошибке, в первом сообщении?


И посмотрите в консоли, на какой адрес идёт запрос при отправке формы?
1
 Аватар для Serj190492
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
17.08.2016, 14:34  [ТС]
Цитата Сообщение от Para bellum Посмотреть сообщение
на какой адрес идёт запрос
как посмотреть?
Цитата Сообщение от Para bellum Посмотреть сообщение
А что Вы домен на картинке замазали
привычка прятать) Можно и не замазывать)
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
17.08.2016, 14:42
Цитата Сообщение от Serj190492 Посмотреть сообщение
как посмотреть?
В консоли, во вкладке Network или Сеть.
1
 Аватар для Serj190492
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
17.08.2016, 14:49  [ТС]
Para bellum, Вот. Всё, что было во вкладке Network. Как я понял, java возвращает статус succes, но он дальше никак не обрабатывается...
Миниатюры
Обработчик формы   Обработчик формы   Обработчик формы  

0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
17.08.2016, 14:57
Адрес запроса правильный. Но проблема с "Fatal error" вроде решилась после переноса на другой компьютер?
На первом прав не было, видимо, на доступ к файлу с классом C_Base.

На втором уже всё возвращается, только после JSON идёт HTML. Покажите, как Вы JSON возвращаете?
Цитата Сообщение от Serj190492 Посмотреть сообщение
java
JavaScript, а не Java, только.
1
 Аватар для Serj190492
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
17.08.2016, 15:02  [ТС]
Цитата Сообщение от Para bellum Посмотреть сообщение
Покажите, как Вы JSON возвращаете?
JavaScript вообще не знаю, форма сгенерирована онлайн.
А JSON возвращает как я понимаю как раз JavaScript?
0
 Аватар для Serj190492
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
17.08.2016, 15:03  [ТС]
Вот все скрипты...
Вложения
Тип файла: rar js.rar (11.0 Кб, 0 просмотров)
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
17.08.2016, 15:06
Цитата Сообщение от Serj190492 Посмотреть сообщение
А JSON возвращает как я понимаю как раз JavaScript?
Нет, видите, там, в консоли, что с сервера возвращается:
Code
1
{"status":"success"}
Это JSON. Его PHP возвращает.
1
 Аватар для Serj190492
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
17.08.2016, 15:12  [ТС]
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$form = M_ProcessForm::Instance();
        $form->field_rules = array(
            'name'=>'required',
            'adres'=>'required',
            'inn'=>'required',
            'phone'=>'required',
            'mail'=>'email|required',
            'director'=>'',
            'glavbuh'=>'',
            'date_start'=>'',
            'expiries'=>'',
            'its'=>'',
            'login'=>'',
            'password'=>'',
            'programm_1'=>'',
            'reg_nomer_1'=>'',
            'programm_2'=>'',
            'reg_nomer_2'=>'',
            'programm_3'=>'',
            'reg_nomer_3'=>''
        );
        $form->validate();
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
class M_ProcessForm extends C_Base
{
    public $field_rules;
    public $error_messages;
    public $fields;
    private $error_list;
    private $is_xhr;
    private static $instance;
 
    public static function Instance(){
        if(self::$instance == null)
            self::$instance = new M_ProcessForm();
        return self::$instance;
    }
 
    function __construct()
    {
        $this->error_messages = array(
            'required' => 'Поле не должно быть пустым!',
            'mail' => 'Введите корректный email!',
            'number' => 'Введите числовое значение!',
            'url' => 'Please enter a valid URL',
            'pattern' => 'Пожалуйста, исправьте это значение!',
            'min' => 'Please enter a value larger than the minimum value',
            'max' => 'Please enter a value smaller than the maximum value'
        );
 
        $this->field_rules = array();
        $this->error_list = '';
        $this->fields = $_POST;
        $this->is_xhr = $this->xhr();
    }
 
    function validate()
    {
        if (!empty($this->fields))
        {
            //Validate each of the fields
            foreach ($this->field_rules as $field => $rules)
            {
                $rules = explode('|', $rules);
 
                foreach ($rules as $rule)
                {
                    $result = null;
 
                    if (isset($this->fields[$field]))
                    {
                        $param = false;
 
                        if (preg_match("/(.*?)\[(.*?)\]/", $rule, $match))
                        {
                            $rule = $match[1];
                            $param = $match[2];
                        }
 
                        $this->fields[$field] = $this->clean($this->fields[$field]);
 
                        //if the field is a checkbox group create string
                        if (is_array($this->fields[$field]))
                            $this->fields[$field] = implode(', ', $this->fields[$field]);
 
                        // Call the function that corresponds to the rule
                        if (!empty($rule))
                            $result = $this->$rule($this->fields[$field], $param);
 
                        // Handle errors
                        if ($result === false)
                            $this->set_error($field, $rule);
                    }
                }
            }
 
            if (empty($this->error_list))
            {
                if ($this->is_xhr)
                    echo json_encode(array('status' => 'success'));
 
                $this->process();
            }
            else
            {
                if ($this->is_xhr)
                    echo json_encode(array('status' => 'invalid', 'errors' => $this->error_list));
                else echo $this->error_list;
            }
        }
    }
 
    function process(){
 
        $db = M_MSQL::Instace();
        //Информация о контрагенте
        if(!empty($_POST['name'])) $name = $_POST['name'];
        if(!empty($_POST['adres'])) $adres = $_POST['adres'];
        if(!empty($_POST['inn'])) $inn = $_POST['inn'];
        if(!empty($_POST['phone'])) $phone = $_POST['phone'];
        if(!empty($_POST['mail'])) $mail = $_POST['mail'];
        if(!empty($_POST['director'])) $director = $_POST['director'];
        if(!empty($_POST['glavbuh'])) $glavbuh = $_POST['glavbuh'];
        if(!empty($_POST['login'])) $login = $_POST['login'];
        if(!empty($_POST['password'])) $password = $_POST['password'];
 
        $add_contragents = array(
            'name' => $name,
            'adres' => $adres,
            'inn' => $inn,
            'telephone' => $phone,
            'mail' => $mail,
            'director' => $director,
            'glavbuh' => $glavbuh,
            'login' => $login,
            'password' => $password
        );
 
        $id_contragent = $db->Insert('contragents', $add_contragents); //вставляем запись и получаем ИД
 
        //Информация о договоре с контрагентом
        if(!empty($_POST['date_start'])) $date_start = $_POST['date_start'];
        if(!empty($_POST['expiries'])) $expiries = $_POST['expiries'];
        $is_its = null;
        if(!empty($_POST['date_start'])) $is_its = ($_POST['its'] == 'Да') ?  1 : 0;
 
        if($is_its){
            $add_contract = array(
                'id_contragent' => $id_contragent,
                'date_start' => $date_start,
                'expiries' => $expiries,
                'is_its' => $is_its
            );
            $db->Insert('contracts', $add_contract);
        }
        else{
            $add_contract1 = array(
                'id_contragent' => $id_contragent,
            );
            $db->Insert('contracts', $add_contract1);
        }
 
        //Информация о ПП контрагента
        if(!empty($_POST['programm_1'])) $programm_1 = $_POST['programm_1'];
        if(!empty($_POST['reg_nomer_1'])) $reg_nomer_1 = $_POST['reg_nomer_1'];
        if(!empty($_POST['programm_2'])) $programm_2 = $_POST['programm_2'];
        if(!empty($_POST['reg_nomer_2'])) $reg_nomer_2 = $_POST['reg_nomer_2'];
        if(!empty($_POST['programm_3'])) $programm_3 = $_POST['programm_3'];
        if(!empty($_POST['reg_nomer_3'])) $reg_nomer_3 = $_POST['reg_nomer_3'];
 
        if($programm_1 && $reg_nomer_1){
            $add_product1 = array(
                'id_contragent' => $id_contragent,
                'reg_nomer' => $reg_nomer_1,
                'name' => $programm_1
            );
            $db->Insert('products', $add_product1);
        }
        if($programm_2 && $reg_nomer_2){
            $add_product2 = array(
                'id_contragent' => $id_contragent,
                'reg_nomer' => $reg_nomer_2,
                'name' => $programm_2
            );
            $db->Insert('products', $add_product2);
        }
        if($programm_3 && $reg_nomer_3){
            $add_product3 = array(
                'id_contragent' => $id_contragent,
                'reg_nomer' => $reg_nomer_3,
                'name' => $programm_3
            );
            $db->Insert('products', $add_product3);
        }
 
        return true;
 
    }
 
    function set_error($field, $rule)
    {
        if ($this->is_xhr)
        {
            $this->error_list[$field] = $this->error_messages[$rule];
        }
        else $this->error_list .= "<div class='error'>$field: " . $this->error_messages[$rule] . "</div>";
    }
 
    function xhr()
    {
        return (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') ? true : false;
    }
 
    /** Validation Functions */
    function required($str, $val = false)
    {
 
        if (!is_array($str))
        {
            $str = trim($str);
            return ($str == '') ? false : true;
        }
        else
        {
            return (!empty($str));
        }
    }
 
    function email($str)
    {
        return (!preg_match("/^(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){255,})(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){65,}@)(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22))(?:\\.(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-[a-z0-9]+)*\\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-[a-z0-9]+)*)|(?:\\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\\]))$/iD", $str)) ? false : true;
    }
 
    function number($str)
    {
        return (!is_numeric($str)) ? false : true;
    }
 
    function min($str, $val)
    {
        return ($str >= $val) ? true : false;
    }
 
    function max($str, $val)
    {
        return ($str <= $val) ? true : false;
    }
 
    function pattern($str, $pattern)
    {
        return (!preg_match($pattern, $str)) ? false : true;
    }
 
    function clean($str)
    {
        $str = is_array($str) ? array_map(array("ProcessForm", 'clean'), $str) : str_replace('\\', '\\\\', strip_tags(trim(htmlspecialchars((get_magic_quotes_gpc() ? stripslashes($str) : $str), ENT_QUOTES))));
        return $str;
    }


Добавлено через 2 минуты
Это весь код обработчика. Где там возврат JSONa?
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
17.08.2016, 15:24
Цитата Сообщение от Serj190492 Посмотреть сообщение
Где там возврат JSONa?
77 и 84 строка. И на будущее: как сделано в 141-146 строках, делать не нужно. Это плохая практика.
1
 Аватар для Serj190492
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
17.08.2016, 15:31  [ТС]
Цитата Сообщение от Para bellum Посмотреть сообщение
77 и 84 строка
Так, где возврат понял... Что с ним не так?)
Цитата Сообщение от Para bellum Посмотреть сообщение
делать не нужно
А как тогда принимать такие данные?
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
17.08.2016, 15:44
Цитата Сообщение от Serj190492 Посмотреть сообщение
Что с ним не так?
Нет, там всё в порядке. По идее, валидатор не должен возвращать никакого HTTP-отклика. Но пока отложим это.
В каком файле содержится первый вод из этого сообщения #16? И что содержится в нём после
PHP
1
$form->validate();
?
1
 Аватар для Serj190492
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
17.08.2016, 15:51  [ТС]
Только сейчас заметил -- всё записывается в БД.
Только в форме, если всё верно, должна скрыться форма и появится сообщение Succes!

Цитата Сообщение от Para bellum Посмотреть сообщение
В каком файле содержится первый вод из этого сообщения #16? И что содержится в нём после
не совсем понял... первый что?

Если имеется ввиду, где находится сам код $form->validate(); и что после него, тогда:
Это код из файла C_New.php
Вот весь код из него:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php
/**
 * контроллер добавления статьи
 * Обработка данных из формы идёт в файле process_form.php
 */
class C_New extends C_Base
{
    //
    // Конструктор.
    //
    function __construct()
    {
    }
 
    //
    // Виртуальный обработчик запроса.
    //
    protected function OnInput()
    {
        parent::OnInput();
        $this->title = $this->title . ' :: Новая статья';
 
        $form = M_ProcessForm::Instance();
        $form->field_rules = array(
            'name'=>'required',
            'adres'=>'required',
            'inn'=>'required',
            'phone'=>'required',
            'mail'=>'email|required',
            'director'=>'',
            'glavbuh'=>'',
            'date_start'=>'',
            'expiries'=>'',
            'its'=>'',
            'login'=>'',
            'password'=>'',
            'programm_1'=>'',
            'reg_nomer_1'=>'',
            'programm_2'=>'',
            'reg_nomer_2'=>'',
            'programm_3'=>'',
            'reg_nomer_3'=>''
        );
        $form->validate();
    }
 
    //
    // Виртуальный генератор HTML.
    //
    protected function OnOutput()
    {
        //$vars = array('title_article' => $this->title_article, 'content' => $this->content);
        $this->content = $this->Template('templates/add_form.php');
        parent::OnOutput();
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.08.2016, 15:51
Помогаю со студенческими работами здесь

Обработчик циклической формы =)
Есть форма для обновления статистики, которая выводится циклом из бд Идея тут в том, чтобы вставлять в бд новые записи сразу по всем...

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

обработчик формы
Podskajite kto znaet. v forme na html najata klavisha enter.kak v obrabotchike na php yznat ob etom?

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

Обработчик формы
Помогите разобраться с обработчиком формы. Как же они достали меня( Голову сломал. Ошибки не вижу. Сообщение на почту с данными не отсылает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru