[Решено]Проверка Формы

Главные вкладки

Аватар пользователя rudireg rudireg 14 ноября 2011 в 2:07

Привет. Использую 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;
}
?>

Комментарии

Аватар пользователя shp@drupal.org shp@drupal.org 14 ноября 2011 в 9:33

Валидатор точно запускается? А вообще, по-моему, если поле "#required", то валидация на пустое поле происходит автоматически.

Аватар пользователя rudireg rudireg 14 ноября 2011 в 13:03

Ну в обще то да...
если поле "#required", то валидация на пустое поле происходит автоматически.

Тут я согласен
но как сделать так, чтобы не отправлялись данные по пути что в ACTION
если не заполнено поле?

Аватар пользователя G.A. Vinogradov G.A. Vinogradov 14 ноября 2011 в 13:17

Во-первых, ваш валидатор не вызывается.

$form['#validate] []= 'my_form_validate';

Во вторых, не нужно указывать #action
Лучше после того, как форма отработала сделать редирект на request.php

Аватар пользователя G.A. Vinogradov G.A. Vinogradov 14 ноября 2011 в 13:21

Во-первых, ваш валидатор не вызывается.

$form['#validate] []= 'my_form_validate';

Во вторых, не нужно указывать #action
Лучше после того, как форма отработала сделать редирект на request.php

Аватар пользователя rudireg rudireg 14 ноября 2011 в 14:35

G.A. Vinogradov wrote:
Во-первых, ваш валидатор не вызывается.

$form['#validate] []= 'my_form_validate';

Во вторых, не нужно указывать #action
Лучше после того, как форма отработала сделать редирект на request.php

а данные поля передадуться файлу request.php ?
ТОесть файл request.php должен обработать введенные данные

Аватар пользователя G.A. Vinogradov G.A. Vinogradov 14 ноября 2011 в 15:17

rudireg wrote:

а данные поля передадуться файлу request.php ?
ТОесть файл request.php должен обработать введенные данные

Если вы пишете #action = 'request.php' , то request.php ответственный за валидацию и прочее.
Так что думаете, что же вам нужно. Вам обязательно нужен внешний скрипт? Неужели нельзя данные из request.php перекинуть в Друпаловский модуль и в нем все обрабатывать?

Аватар пользователя shp@drupal.org shp@drupal.org 14 ноября 2011 в 15:28

Вообще не нужно никакого 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()).