Добавление данных в таблицу базы из AjaxForm и FormIT
Всем привет. Делаю сейчас компонент, в котором пользователи добавляют свои блоги и на них могут подписываться. Застопорился на моменте когда нужно добавлять данные. Решил что через AjaxForm и FormIt надёжнее.
Вообщем делал следующим образом. Вызвал сниппет с такими параметрами:
В параметр hooks добавил сниппет TicketsCommunityHooksBlog с таким содержимым:
Вообщем делал следующим образом. Вызвал сниппет с такими параметрами:
{'!AjaxForm' | snippet : [
'snippet' => 'FormIt',
'form' => '@FILE components/ticketscommunity/form.tpl',
'redirectTo' => 16,
'hooks' => 'email,TicketsCommunityHooksBlog',
'emailSubject' => 'Добавление нового блога "[[+name]]"',
'emailTo' => 'admin@site.com',
'validate' => 'alias:required',
'validationErrorMessage' => 'В форме содержатся ошибки!',
'successMessage' => 'Сообщение успешно отправлено'
]}
В параметр hooks добавил сниппет TicketsCommunityHooksBlog с таким содержимым:
<?php
$modx->addPackage('ticketscommunity', $modx->getOption('core_path').'components/ticketscommunity/model/');
$request = $modx->newObject('TicketsCommunityBlog');
$request->set('name', $hook->getValue('name'));
$request->set('logo', $hook->getValue('logo'));
$request->set('title', $hook->getValue('title'));
$request->set('description', $hook->getValue('description'));
$request->set('keywords', $hook->getValue('keywords'));
$request->set('introtext', $hook->getValue('introtext'));
$request->set('content', $hook->getValue('content'));
$request->set('alias', $hook->getValue('alias'));
$request->set('uri', $hook->getValue('uri'));
$request->set('createdby', $hook->getValue('createdby'));
$request->save();
return true;
Данные из формы сохраняются в базу, но заметил что если alias писать один и тот же с разными регистрами типа Test и test, они будут добавляться. Может кто подсказать как можно проверять в базе дубли и выдавать сообщение об ошибке через jGrowl? Комментарии: 4
Я бы на вашем месте не об этом думал, а о безопасности. Тут во всю идет обсуждение об SQL-injection, а Вы вообще все в базу записываете, даже без какой-либо проверки. Ломанут Ваш сайт, без проблем.
Я отфильтровал это дело через htmlspecialchar(). А какого рода проверки делать? Что проверять?
Я отфильтровал это дело через htmlspecialchar().Вообще-то, эта функция ничего не фильтрует и не проверяет.
А какого рода проверки делать?Вот это хотя бы прочтите — Фильтрация данных $_GET и $_POST
Что проверять?Проверять нужно данные которые Вы получаете через форму.
P.S. Надеюсь меня тут не забанят за ссылки :)
FormIt начиная с версии 2.2.9 «all fields will automatically have html_entities applied», т.е. всё подчищено. Просто данные надо брать не через
$_POST['name']
а через $hook->getValue('name');
Подроднее здесь
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.