Что не так с form_validation? - PullRequest
       1

Что не так с form_validation?

0 голосов
/ 03 апреля 2012

Helo,

Так что у меня есть небольшая проблема с form_validation в Codeigniter, вот контроллер -

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Records extends CI_Controller {

 public function index()
 {
   $this->load->helper(array('form', 'url'));
   $this->load->library('form_validation');  
    $this->load->helper('url');   
    $this->load->view('includes/header'); 
  $this->load->view('products');
  $this->load->view('includes/footer');
 }

 public function addRecord() {  
    $this->load->helper(array('form', 'url'));  
    $this->load->helper('url');    
    $query = $this->db->get_where('users', array('uname' => $this->session->userdata('username')));
    foreach($query->result_array() as $row) {
      $data = array(
        'username' => $row['uname'],
        'email' => $row['email'],
        'name' => $row['name'],
        'description' => $row['description'],
        'picture' => $row['picture'],
        'gender' => $row['gender'],
      );      
    }    
    if($this->session->userdata('logged_in')) {
      $this->load->view('includes/header'); 
      $this->load->view('my_records', $data);
      $this->load->view('includes/footer');
    }
    else {
      redirect('/home', 'refresh');
    }    
  }

  public function postRecord() {
    $this->lang->load('form_validation', 'latvian');
   $this->load->library('form_validation');    
    $this->load->model('records');
    $this->load->helper(array('form', 'url'));    
    if(!$this->session->userdata('logged_in')) redirect('/home', 'refresh');                

    $this->form_validation->set_rules('message', 'Ziņa', 'required|trim|min_length[5]|max_length[250]');

    $query = $this->db->get_where('users', array('uname' => $this->session->userdata('username')));    
    foreach($query->result_array() as $row) {
      $data = array(
        'username' => $row['uname'],
        'email' => $row['email'],
        'name' => $row['name'],
        'description' => $row['description'],
        'picture' => $row['picture'],
        'gender' => $row['gender'],
      );      
    }  
    // If doesn't pass validation, redirect's back with errors.
  if ($this->form_validation->run() == FALSE)
  {                                   
      $this->load->helper('url');  
      $this->load->view('includes/header'); 
    $this->load->view('my_records', $data);
    $this->load->view('includes/footer');
  }
  // If everything is correct add's user.
  else
  {
      $this->load->view('includes/header');   
      $this->load->view('my_records', $data);
    $this->load->view('includes/footer');       
  }  
  }

} ?> 

и просмотр -

<div class="list-products">
       <div>
         <?php if(validation_errors()) { ?><div class="error-submit"><p><?php echo validation_errors(); ?></p></div><?php } ?>       
              <form class="fix-this form" method="post" action="/savieno/records/postRecord">
          <div class="formfield">
            <span class="profile">Your message:</span>
            <textarea id="message" name="message" class="with-label" rows="10" cols="10" placeholder="your message."></textarea>
          </div>
          <div class="formfield">
            <input type="submit" id="submit" name="postRecord" value="Pievienot" class="fix-this" />
          </div>
              </form>
            </div> 

При запуске, он дал мне ошибку, которая не может найти функцию set_message (), но я добавил form_validation перед помощником формы, и теперь он работает, но опять-таки есть проблема, потому что он не отображает коды ошибок формы.Это просто не отображается, я установил сообщение об ошибке, и это должно работать, но это не так.В чем может быть проблема?

1 Ответ

0 голосов
/ 03 апреля 2012

На ваш взгляд, вам не нужно:

<?php if(validation_errors()) { ?><div class="error-submit"><p><?php echo validation_errors(); ?></p></div><?php } ?>

Вы можете использовать только:

<?php echo validation_errors('<div class="error-submit">', '</div>'); ?>

Нет необходимости в операторе if. Если взглянуть на это, это может решить вашу проблему.

В качестве примечания, в вашем контроллере нет необходимости закрывать тег PHP, и на самом деле рекомендуется оставлять его незамеченным.

Да, и вы могли бы, если хотите, также создать конструкцию для:

function __construct() {
    parent::__construct();
    $query = $this->db->get_where('users', array('uname' => $this->session->userdata('username')));
    foreach($query->result_array() as $row) {
$data = array(
            'username' => $row['uname'],
            'email' => $row['email'],
        'name' => $row['name'],
        'description' => $row['description'],
            'picture' => $row['picture'],
        'gender' => $row['gender'],
        );      
} 
}

Хотя, я думаю, было бы лучше (архитектура MVC) просто сделать этот запрос доступным в модели ( что-то ), подобной этой:

 $this->load->model('dude');
 $result = $this->dude->get_dude_where('$this->session->userdata('username'));
 foreach($result as $row) {
     $data = $result['result_array'];
 }

Но для этого необходимо настроить функцию модели для передачи / возврата $ query-> result_array ().

В любом случае, я надеюсь, что это решило вашу проблему с form_validation.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...