Codeigniter验证表单不起作用

时间:2014-12-26 14:19:28

标签: forms codeigniter validation

我的登录操作具有相同的实现,并且正在运行,但是在我的联系表单上它不是,并且我没有错误消息只是重新路由到主页。 奇怪的是,如果在我的控制器中我实现了这样的索引函数:

public function index() {      
   $this->myprocess();      
}

和我使用

的观点
<?php 
   $attributes = array('class' => 'form-contact', 'id' => 'myform2');
   echo form_open('contact',$attributes);
?>

而不是调用我的函数myprocess所有的验证工作,但没有用于没有我的页眉页脚等的表单。

下面这就是我希望我的代码能够工作的方式,我希望你能帮助我。

我的控制员:

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

class contact extends CI_Controller {

   function __construct()
   {
        parent::__construct();
        $this->load->model('contact_m');
    }

    public function index() 
   {      
        $data = array('title' => 'Contact', 'main_content' => 'contact_v');
        $this->load->view('template', $data);

    }

    public function myprocess(){      


        $this->form_validation->set_rules('dfname', 'Name', 'required|trim|xss_clean|max_length[40]');          
        $this->form_validation->set_rules('dfemail', 'Email', 'required|trim|xss_clean|valid_email|max_length[50]|callback__verifyemail');          
        $this->form_validation->set_rules('dfmsg', 'dfmsg', 'trim|xss_clean');

        $this->form_validation->set_error_delimiters('<br /><span class="error">', '</span>');

        if ($this->form_validation->run() == FALSE) // validation hasn't been passed
        {
            $this->load->view('contact_v');
        }
        else 
        {
          $form_data = array(
                            'dfname' => set_value('dfname'),
                            'dfemail' => set_value('dfemail'),
                            'dfmsg' => set_value('dfmsg')
                            );

          if ($this->contact_m->SaveForm($form_data) == TRUE) 
          {
            redirect('contact/success');  
          }
          else
          {
            echo 'An error occurred saving your information. Please try again later';
          }
        }
  }

    function success()
    {
            echo 'this form has been successfully submitted with all validation being passed. All messages or logic here. Please note
            sessions have not been used and would need to be added in to suit your app';
    }

    public function verifyemail(){
        $name = $this->input->post('dfName');
        $pass = $this->input->post('dfemail');

        if($this->contact_m->email_exist($name,$pass)){ 
            if ($this->session->userdata('site_lang') == 'portuguese')
            {
                $this->form_validation->set_message('_verifyuser','Usuario Inexistente!');
            }else{
                $this->form_validation->set_message('_verifyuser','User Not Found!');
            }
            $this->index();
            return false;  

        }else{                           
            return true;            
        }
    }
}    

?>

我的观点:

    <div class="container">
    <div class="row">
        <div class=" col-md-4 col-md-offset-4">
            <?php echo br(2)?>
            <div class="account-wall drop-shadow">

            <?php 
                $title = $this->my_library->my_title($this->session->userdata('site_lang'),FORM_CONTACT);
                echo '<h1 class="text-center login-title">'.  $title. '</h1>';
                echo br(1)
            ?>

                <?php 
                    $attributes = array('class' => 'form-contact', 'id' => 'myform2');
                    echo form_open('contact/myprocess',$attributes);
                ?>

                <p>
                    <label for="dfname">Name</span></label>
                    <?php echo form_error('dfname'); ?>
                    <input id="dfname" type="text" class="form-control" placeholder="Name" name="dfname" maxlength="40" value="<?php echo set_value('dfname'); ?>" autofocus />
                    <?php echo br(1)?>
                </p>
                <p>
                    <label for="dfemail">Email</span></label>
                    <?php echo form_error('dfemail'); ?>
                    <input id="dfemail" type="text" class="form-control" placeholder="Email" name="dfemail" maxlength="50" value="<?php echo set_value('dfemail'); ?>"  />
                    <?php echo br(1)?>
                </p>
                <p>
                    <label for="dfmsg">Message</label>
                    <?php echo form_error('dfmsg'); ?>
                    <?php echo form_textarea( array( 'name' => 'dfmsg', 'rows' => '4', 'cols' => '43', 'value' => set_value('dfmsg') ) )?>
                    <?php echo br(1)?>
                </p>
                <p>
                    <?php echo form_submit( 'submit', 'Submit'); ?>
               </p>
                 <?php form_close();?>
            </div>  
        </div>

    </div>
</div>
<?php echo br(5)?> 

2 个答案:

答案 0 :(得分:0)

用于验证的回调函数需要前缀名称的下划线:

public function _verifyemail()

你需要调用过程函数:

public function index() 
   {      
        $data = array('title' => 'Contact', 'main_content' => 'contact_v');
        if($this->input->post())
           $this->myprocess();
        $this->load->view('template', $data);

    }

答案 1 :(得分:0)

所以这些天来,检查我的所有代码并重新编写所有代码后,我发现了问题。  由于某种原因,这条线路无法正常工作:echo form_close();所以我的第一张表格在写完之后就开始弄乱我的验证了。