_ne_scaju_
Всем привет, возник такой вопрос, я не когда не задумывался об этом, теперь решил спросить у знающих.
Есть форма вида:HTML:
<form action=«/adminuser/banned/10» method=«POST»> <div class=«form-group»> <input type=«text» class=«form-control input-sm» value=«<?=$user[‘user_login’];?>» disabled> </div> <div class=«form-group»> <select name=«type_ban» class=«form-control input-sm»> </select> </div> <div class=«form-group»> <select name=«end_ban» class=«form-control input-sm»> </select> </div> <div class=«form-group»> <input type=«text» name=«comment_ban» placeholder=«причина бана» class=«form-control input-sm»> </div> <div class=«row»> <div class=«col-xs-6 col-sm-6 col-md-6»> <input type=«submit» class=«btn btn-outline-success» value=«забанить»> </div> </div> </form>у формы есть поля option в которых описаны value, каким образом можно проверять значение value что его изменять нельзя, т.е. когда тестировал перед вставкой данных в базу, я изменил значение одного из value с помощью инспектора браузера, и в базу улетело значение которое я установил в value, а по логике там начальное значение которое по сути изменять нельзя. Как предотвратить изменение значения value?
Второй вопрос заключается в не понимании как проверить поля option на пустоту. Когда делаю проверку:PHP:
$this -> error = ‘Поле обязательно к заполнению’; return false; }проверка не срабатывает из-за того что находится значение option у которого даже нет value:
т.е. если я отправлю форму, то значение «Время бана» по сути и запишется так как это значение string (строка). Так как проверить значение на пустоту исключив первый option который без value?
MouseZver
PHP:
‘type_ban’ => [ ‘filter’ => FILTER_CALLBACK, ‘options’ => function ( int $value ): int | bool { { return $value; } return false; } ], ‘end_ban’ => [ ‘filter’ => FILTER_CALLBACK, ‘options’ => function ( int $value ): int | bool { { return $value; } return false; } ], ‘comment_ban’ => FILTER_DEFAULT ] );http://htmlbook.ru/html/input/required
_ne_scaju_
круть спасибо, сейчас применю проверю))
miketomlin
Если «словари» хранятся в БД, то соответственно по БД проверяешь.
— Добавлено —
И форму тоже по данным из БД формируешь.
_ne_scaju_
переменная $value от куда, что это само поле value?
miketomlin
Читай доки по FILTER_CALLBACK
Это значение поля. Полями обычно называют «именованные» контролы, т.е. целиком раскрывающиеся списки в данном случае.
_ne_scaju_
я не понял, как оно туда попала, эта переменная $value т.е. если я использую этот кусок кода в контроллере. а в модели проверяю эти поля, как я этот $value отдам в функцию FILTER_CALLBACK
_ne_scaju_
у меня не выходит, сижу думаю что-не так делаю, как это поле $value передать в эту функцию калбека, если это и есть поле name=»type_ban'», при вызове калбек функции как мы отдаем еще раз поле я не пойму, не буду я же писать вместо $value -> $_POST[‘…’]
Мои действия в контроллере создал этот массив данных формы:
PHP:
if ($_SERVER[‘REQUEST_METHOD’] == ‘POST’) { $rulles = [ ‘type_ban’ => [ ‘filter’ => FILTER_CALLBACK, ‘options’ => function($value) { return $value; } return false; } ], ‘end_ban’ => [ ‘filter’ => FILTER_CALLBACK, ‘options’ => function($value) { return $value; } return false; } ], ‘comment_ban’ => FILTER_DEFAULT ]; # получаем переменные и фильтруем их # проверяем форму после отправки на правильность заполнения if (!$this -> model -> checkFormBanedExists($filter)) { $this -> view -> message(‘error’, $this -> model -> error); } }далее в модели пытаюсь проверить все поля:
PHP:
public function checkFormBanedExists($post) { # проверяем поле html в форме, если имя для поля input изменено выводим ошибку $this -> error = ‘Изменять поля ввода в режиме разработчика запрещено!!!’; return false; } if ($post[‘type_ban’])) { $this -> error = ‘выбери тип бана’; return false; } return true; }опять же в контроллере вызываю функцию из модели, если есть ошибки показываю их, но при любом раскладе я не могу получить значения все время ошибку кидает, что же я не так сделал?
MouseZver
Ты умудрился сломать синтаксис пхп, при этом ошибки игноришь. Поздравляю, я отписываюсь отсюда.
P.s: выучи получаемый результат с filter_input_array, а не городить isset дубляжем, который умеет принимать mixed vars
_ne_scaju_
знаю что можно было записать в одну строку isset() в некоторых случая мне это не нужно, вот так и решил написать)
укажи мне где я допустил ошибку, или сломал синтаксис, спасибо.
_ne_scaju_
вида типа:
PHP:
# проверяем поле html в форме, если имя для поля input изменено выводим ошибку $this -> error = ‘Изменять поля ввода в режиме разработчика запрещено!!!’; return false; }
Drunkenmunky
PHP:
<pre> <?php ); { { echo ‘type: ‘.$_POST[‘type_ban’].‘<br>’; } else { echo ‘нет такого типа<br>’; } { echo ‘end: ‘.$_POST[‘end_ban’].‘<br>’; } else { echo ‘не тот конец<br>’; } } ?>
_ne_scaju_
все работает спасибо, вот пример того что получилось:
PHP:
public function checkFormBanedExists($data) { # массив значений для полей по умолчанию $options = [ ‘type’ => [‘0’, ‘1’, ‘2’], ‘end’ => [’10’, ’30’, ’60’, ‘180’], ]; # проверяем поле html в форме, если имя для поля input изменено выводим ошибку $this -> error = ‘Изменять поля ввода в режиме разработчика запрещено!!!’; return false; $this -> error = ‘Тип бана обязателен’; return false; $this -> error = ‘Время бана обязательно’; return false; }else { $this -> error = ‘Причина бана обязательна’; return false; } } return true; }можно конечно было не создавать переменную массива а сразу передавать его вот так но это на любителя:
PHP:Два вопроса одним махом решены, всем спасибо за обсуждения.
_ne_scaju_
дополняю запись, добавил проверку, если пользователь не подтвердил email что банить такое нельзя.
PHP:
public function checkFormBanedExists($banned_uid, $data) { # массив значений для полей по умолчанию $options = [ ‘type’ => [‘0’, ‘1’, ‘2’], ‘end’ => [’10’, ’30’, ’60’, ‘180’], ]; # получаем данные о конкретном пользователе (по его uid) $user = $this -> getUserById($banned_uid); # проверяем поле html в форме, если имя для поля input изменено выводим ошибку $this -> error = ‘Изменять поля ввода в режиме разработчика запрещено!!!’; return false; } elseif ($user[‘status’] != 1) { $this -> error = ‘Пользователь не подтвердил свою почту, банить запрещено!!!’; return false; } else { $this -> error = ‘Тип бана обязателен’; return false; $this -> error = ‘Время бана обязательно’; return false; } $this -> error = ‘Причина бана обязательна’; return false; } } return true; }
_ne_scaju_
Изменил структуру проверок, исправляюсь, если пользователь не подтвердил email, банить в этом случае такого пользователя нельзя.
PHP:
public function checkFormBanedExists($banned_uid, $data) { # массив значений для полей по умолчанию $options = [ ‘type’ => [‘0’, ‘1’, ‘2’], ‘end’ => [’10’, ’30’, ’60’, ‘180’], ]; # получаем данные о конкретном пользователе (по его uid) $user = $this -> getUserById($banned_uid); # проверяем поле html в форме, если имя для поля input изменено выводим ошибку $this -> error = ‘Изменять поля ввода в режиме разработчика запрещено!!!’; return false; } else { $this -> error = ‘Тип бана обязателен’; return false; } $this -> error = ‘Время бана обязательно’; return false; } $this -> error = ‘Причина бана обязательна’; return false; } if ($user[‘status’] != 1) { $this -> error = ‘Пользователь не подтвердил свою почту, банить запрещено!!!’; return false; } } return true; }
Похожие записи:
- Код крестики-нолики с использованием c #
- как установить лимит на сообщения
- Функция batch_recursive_count_if с уровнем распаковки для произвольной вложенной итерируемой реализации произвольного типа в C ++
- Программа расчета небоскребов для размера NxN, версия 2 (с использованием функции отслеживания с возвратом)
- Вывод имени изображения из бд в форму