Не работает валидация

Вопросы об установке, настройке и работе самого фреймворка

Не работает валидация

Сообщение Agasfer » 08 мар 2010, 12:49

В общем вот код контроллера:
Код: Выделить всё

class Add extends Controller {
    function Add(){
        parent::Controller();
        $this->load->helper(array('form', 'url'));
        $this->load->library('validation');
        $this->validation->set_error_delimiters('<div class="error">', '</div>');
    }
    function index(){

        $rules=array('Name'=>"trim|required|callback_Name_Check|xss_clean",
                     'Authors'=>"trim|required|xss_clean",);
        $this->get_instance()->validation->set_rules($rules); 
        $fields=array('Name'=>'Name',
                      'Authors'=>'Authors');
        $this->validation->set_fields($fields);
        if($this->validation->run()){
            $view_to_show=array('name'=>'success',
                                'data'=>array('variant'=>'1'));
            $this->load->view('layout', $view_to_show);
        }
        else{
            $view_to_show=array('name'=>'AddForm',
                                'data'=>NULL);
            $this->load->view('layout', $view_to_show);
        }
    }

    function Name_Check($str){
        if (isnull($str)){
            $this->validation->set_message('Введите название книги');
            return FALSE;
        }
        $str=toupper($str);
        $this->load->model('books');
        $res=$this->books->NameSearch($str);
        if ($res==TRUE) return TRUE;
        else {

            $msg='Найдены следующие ссылки:\n';
            foreach ($res->result as $row)
                $msg.'<a href="http://eng_books.ua/index.php/show/".<?php echo $row->ID?>\n';
            $this->validation->set_message($msg);
            return TRUE;
        }
    }
}


вот код вьюшки:
Код: Выделить всё

<form id="addform" method="post" action="http://eng_books.ua/index.php/add">
<table  class="table">
    <tr>
        <td>Название</td>
        <td><input type="text" id="Name" size="50px" value=<?php echo $this->validation->Name;?>></input></td>
    </tr>
    <tr>
        <td><?=$this->validation->Name_error;?></td>
    </tr>
    <tr>
        <td>Авторы</td>
        <td><input type="text" id="Authors" size="50px" value=<?php echo $this->validation->Authors;?>></input></td>
    </tr>
    <tr>
        <td><?=$this->validation->Authors_error;?></td>
    </tr>
    <tr>
        <td>Категория</td>
        <td><input type="select" id="Category" size="50px"/></td>
    </tr>
    

    <tr>
        <td colspan="2"><input type="submit" value="Загрузить"</td>
    </tr>
</table>
</form>


проблема заключается в том, что валидация в любом случае возвращает пустую форму. Без перезаполнения и без вывода ошибок. Подскажите где пофиксить пожалуйста.
Agasfer
 
Сообщения: 5
Зарегистрирован: 08 мар 2010, 12:09

Re: Не работает валидация

Сообщение snake.nf » 08 мар 2010, 14:29

Вот здесь точно две ошибки, при том не имеющие к CodeIgniter ни какого отношения :)

Код: Выделить всё

    function Name_Check
($str){
        if (isnull($str)){
            $this->validation->set_message('Введите название книги');
            return FALSE;
        }
        $str=toupper($str);
 


Может в них проблема.

Ещё сильно смущает этот фрагмент:
Код: Выделить всё

if ($res==TRUE) return TRUE;
       else {
           $msg='Найдены следующие ссылки:\n';
           foreach ($res->result as $row)
                $msg.'<a href="http://eng_books.ua/index.php/show/".<?php echo $row->ID?>\n';
            $this->validation->set_message($msg);
            return TRUE;
        }


Интересно если if сработат, то что будет в $msg?
Аватара пользователя
snake.nf
 
Сообщения: 40
Зарегистрирован: 16 фев 2010, 11:36

Re: Не работает валидация

Сообщение Agasfer » 08 мар 2010, 14:48

к сожалению дело не в этих ошибках. Я исключил из правил валидации свою функцию и результат остался тот же. А этот фрагмент
Код: Выделить всё
if ($res==TRUE) return TRUE;
       else {
           $msg='Найдены следующие ссылки:\n';
           foreach ($res->result as $row)
                $msg.'<a href="http://eng_books.ua/index.php/show/".<?php echo $row->ID?>\n';
            $this->validation->set_message($msg);
            return TRUE;
        }

он еще в процессе разработки и не факт что рабочий :)
Еще одно наблюдение интересное. Если не закрыть тег <form> во вьюшке, то валидация выдает ошибки даже если поля были заполнены ... И опять же не перезаполняет их.
Agasfer
 
Сообщения: 5
Зарегистрирован: 08 мар 2010, 12:09

Re: Не работает валидация

Сообщение michail1982 » 08 мар 2010, 16:37

с ходу <a> не закрыт в последнем отрывке кода

добавлено:
Код: Выделить всё
<input type="submit" value="Загрузить" 
во вьюхе тоже не мешало-бы закрыть
и вообще просмотрите разметку...сверьтеьс с W3scool
Аватара пользователя
michail1982
 
Сообщения: 533
Зарегистрирован: 25 ноя 2008, 15:36

Re: Не работает валидация

Сообщение Agasfer » 08 мар 2010, 19:28

все пофиксил, все позакрывал. Не помогло. :(
Agasfer
 
Сообщения: 5
Зарегистрирован: 08 мар 2010, 12:09

Re: Не работает валидация

Сообщение michail1982 » 08 мар 2010, 19:42

А что это за конструкция?
Код: Выделить всё
$this->get_instance()->validation->set_rules($rules);  

сверьтесь с маном
Аватара пользователя
michail1982
 
Сообщения: 533
Зарегистрирован: 25 ноя 2008, 15:36

Re: Не работает валидация

Сообщение Agasfer » 09 мар 2010, 00:44

Эта конструкция тоже самое что
Код: Выделить всё
$this->validation->set_rules() 

только не выдает ошибку о том что функция применена не к объекту.
Agasfer
 
Сообщения: 5
Зарегистрирован: 08 мар 2010, 12:09

Re: Не работает валидация

Сообщение Agasfer » 09 мар 2010, 13:09

Господа, ошибку отрыл дело было в следующем
Код: Выделить всё
<input type="text" id="Name" size="50px" value=<?php echo $this->validation->Name;?>></input>

валидация не понимает идентификацию полей через id, посему нужен следующий вариант
Код: Выделить всё
<input type="text" name="Name" size="50px" value=<?php echo $this->validation->Name;?>></input>

всем спасибо за помощь.
Agasfer
 
Сообщения: 5
Зарегистрирован: 08 мар 2010, 12:09


Вернуться в Общие вопросы по фреймворку

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0