Привет. Использую Drupal 7
Создаю простую форму, пользователь должен написать имя и нажать кнопку отправить.
После данные формы передаются файлу request.php методом POST.
Хочу чтобы данные формы не отправлялись если поле с именем не заполнено.
Решил использовать валидацию поля.
Но если поле с именем не заполнять и нажать кнопку ОТПРАВИТЬ, все равно отправляет данные на страницу request.php, и идет переход на страницу request.php.
Как сделать так, что бы не происходила отправка данных если валидация не прошла успешно?
Ниже код формы который пишу в template.php
<?php
//Создаю форму
function my_form($form, &$form_state)
{
$form = array();
$form['#method'] = 'post';
$form['#action'] = url('request.php');
$form['name'] = array(
'#type' => 'textfield',
'#title' => t('Your name'),
'#size' => '30',
'#maxlenth' => '30',
'#required' => TRUE,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('SEND'),
);
return $form;
}
//Проверка поля с именем
function my_form_validate($form, &$form_state) {
$name = $form_state['values']['name'];
if (empty($name)) {
form_set_error('name', t('Enter your name.'));
}
}
//Функция отображдения формы на странице
function render_my_form() {
$out = '<div id="form_class">';
$out .= drupal_render(drupal_get_form('my_form'));
$out .= '</div>';
return $out;
}
?>
Комментарии
Валидатор точно запускается? А вообще, по-моему, если поле "#required", то валидация на пустое поле происходит автоматически.
Ну в обще то да...
если поле "#required", то валидация на пустое поле происходит автоматически.
Тут я согласен
но как сделать так, чтобы не отправлялись данные по пути что в ACTION
если не заполнено поле?
Во-первых, ваш валидатор не вызывается.
$form['#validate] []= 'my_form_validate';
Во вторых, не нужно указывать #action
Лучше после того, как форма отработала сделать редирект на request.php
Во-первых, ваш валидатор не вызывается.
$form['#validate] []= 'my_form_validate';
Во вторых, не нужно указывать #action
Лучше после того, как форма отработала сделать редирект на request.php
а данные поля передадуться файлу request.php ?
ТОесть файл request.php должен обработать введенные данные
Если вы пишете #action = 'request.php' , то request.php ответственный за валидацию и прочее.
Так что думаете, что же вам нужно. Вам обязательно нужен внешний скрипт? Неужели нельзя данные из request.php перекинуть в Друпаловский модуль и в нем все обрабатывать?
Вообще не нужно никакого request.php. Всю обработку формы нужно делать в сабмиттерах формы (их может быть несколько), а валидацию - в валидаторах.
И, кстати,
<?php
function render_my_form() {
$out = '<div id="form_class">';
$out .= drupal_render(drupal_get_form('my_form'));
$out .= '</div>';
return $out;
}
?>
тоже лишнее. Хватит просто
<?php echo drupal_get_form('my_form') ?>
(css-класс форме можно добавить в my_form()).