【问题标题】:How can I keep variable value if validation fails in codeigniter如果在codeigniter中验证失败,我如何保持变量值
【发布时间】:2018-12-18 15:46:35
【问题描述】:

我想验证一个表单,以确保在这种情况下用户在描述字段中输入的内容是正确的。

但是,

在这里,我通过从 function 1

获取值来将值传递给 function 2

函数 2 首次加载时,它会获取数据并显示值(OK)

但是当函数 2 重新提交验证和提交数据时,这些 valitable 会变为空并抛出错误 Message: Undefined variable: query (ERROR)

我不知道该怎么做,呵呵。我只是一个新手 PHP 程序员。

这是我目前所拥有的:

功能1

public function ask()
{
$this->load->model('MainM');
$this->load->library('form_validation');
$this->form_validation->set_rules('index', 'AL Index', 'trim|required|min_length[7]|max_length[7]');
if($this->form_validation->run() == FALSE) {
        $this->load->view('enterindex');
    }else{
        $query = null; //emptying in case 
        $index = $this->input->post("index"); //getting from post value
        $query = $this->db->get_where('tbl_reg', array('reg_index' => $index));         
        $count = $query->num_rows(); //counting result from query           
        if ($count == 1) {
        $data['query'] = $this->MainM->getregdata($index);  
        $result = $this->load->view('submitques',$data);
    }else{
        $data = array();
        $data['error'] = 'error';
        $this->load->view('enterindex', $data);
    }   
}

功能2

public function submitq()
{
$this->load->library('form_validation');
$this->form_validation->set_rules('yourq', 'Question', 'required|min_length[7]'); 
    if($this->form_validation->run() == FALSE) {            
        $this->load->view('submitques',$data);
    } else {        
     //insert the submitq form data into database
        $data = array(
            'reg_id' => $this->input->post('reg_id'),
            'ques' => $this->input->post('yourq'),
            'call' => "yes",
            'status' => "New",
            'date' => date('Y-m-d H:i:s')
        );
            if ($this->db->insert('tbl_ques', $data))                   
        {
            // success
           $this->session->set_flashdata('success_msg', 'Your Submission is success');
           redirect('main/submitq');
        }
        else
        {
            $this->load->view('submitques', $data);
        }     
    }   

}

【问题讨论】:

  • $_POST 数据在刷新后不会保留,这就解释了为什么在重新加载时你会丢失它。鉴于此,如果您重新加载,您有两个选择:找出一种重新发布(通过 POST)数据的方法或处理submitq 正在重新加载而不运行form_validation 的事实。话虽如此,您到底想做什么?看起来您正在尝试将工作分配给两种方法,但不清楚您是如何尝试的
  • @Javier Larroulet 谢谢朋友,那我试试看。有什么建议吗?
  • 这将有助于准确了解您要编排的内容。使用您提供的代码,我可以猜测有一个视图通过一个表单将数据传递给ask(),然后您显示另一个视图,然后通过另一个表单将数据(可能)传递给submitq。是这样吗?您需要具体(并显示视图)
  • @user3766509 其实是我先回答,你为什么接受下面的复制粘贴回答?

标签: php html codeigniter codeigniter-3 codeigniter-2


【解决方案1】:

实际上你有 $data 变量放在 else 部分所以这就是为什么出现这个错误你需要在循环之前定义。

public function submitq()
{
    $this->load->library('form_validation');
    $this->form_validation->set_rules('yourq', 'Question', 'required|min_length[7]'); 
// define here before check condtions
    $data = array(
        'reg_id' => $this->input->post('reg_id'),
        'ques' => $this->input->post('yourq'),
        'call' => "yes",
        'status' => "New",
        'date' => date('Y-m-d H:i:s')
    );
    if($this->form_validation->run() == FALSE) {            
        $this->load->view('submitques',$data);
    } else {        
        //insert the submitq form data into database
            if ($this->db->insert('tbl_ques', $data))                   
        {
            // success
            $this->session->set_flashdata('success_msg', 'Your Submission is success');
            redirect('main/submitq');
        }
        else
        {
            $this->load->view('submitques', $data);
        }     
    }   

}

【讨论】:

    【解决方案2】:

    如果您希望在false 条件下使用已发布的$data 变量,您可以将其移到验证块之外:

    public function submitq()
    {
        $this->load->library('form_validation');
        $this->form_validation->set_rules('yourq', 'Question', 'required|min_length[7]'); 
        $data = array(
            'reg_id' => $this->input->post('reg_id'),
            'ques' => $this->input->post('yourq'),
            'call' => "yes",
            'status' => "New",
            'date' => date('Y-m-d H:i:s')
        );
        if($this->form_validation->run() == FALSE) {            
            $this->load->view('submitques',$data);
        } else {        
            //insert the submitq form data into database
                if ($this->db->insert('tbl_ques', $data))                   
            {
                // success
                $this->session->set_flashdata('success_msg', 'Your Submission is success');
                redirect('main/submitq');
            }
            else
            {
                $this->load->view('submitques', $data);
            }     
        }   
    
    }
    

    【讨论】:

      【解决方案3】:

      试试这个代码:

      首先将表单库添加到config/autoload.php

      $autoload['libraries'] = array('database','form_validation');
      

      html代码

      这是查看文件login.php

        <?php echo form_open('action_controller_name', array('class' => '', 'enctype' => 'multipart/form-data', 'role' => 'form', 'name' => 'myform', 'id' => 'myform')); ?>
        <div class="form-group">
            <label class="control-label" for="mobile">Mobile-No</label>
            <input type="text" name="mobile" value="" placeholder="Enter Mobile No" id="mobile" class="form-control" /> 
            <label class="error"><?php echo form_error('mobile'); ?></label>
        </div>
        <div class="form-group">
            <label class="control-label" for="password">Password</label>
            <input type="password" name="password" value="" placeholder="Password" id="password" class="form-control" /> 
            <label class="error"><?php echo form_error('mobile'); ?></label>
        </div>
        <input type="submit" value="Login" class="btn btn-gray" id="submit" /> 
        <a class="forgotten" href="<?php echo base_url('login/forgot_password'); ?>" style="font-size: 13px;">Forgot Password</a> 
        <?php
        echo form_close();
        ?>
      

      我的动作控制器

      public function action_controller_name() {
              $this->load->helper(array('form'));  // Load Form Library
              $this->load->library('form_validation'); // Load Form Validaton Library
              $this->form_validation->set_rules('mobile', 'mobile', 'required', array('required' => 'Please Enter Mobile Number.'));
              $this->form_validation->set_rules('password', 'Password', 'required', array('required' => 'Please Enter passsword.'));
              if ($this->form_validation->run() === TRUE) {  // Check validation Run
                  // Your Login code write here
              } else {
                  $this->load->view('login', $this->data);
              }
          }
      

      试试这个代码。如果codeigniter验证失败,你可以保留变量值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-24
        • 1970-01-01
        • 2013-06-18
        • 1970-01-01
        • 1970-01-01
        • 2017-10-22
        相关资源
        最近更新 更多