如果在 codeigniter 中验证失败,如何保留变量值

How can I keep variable value if validation fails in codeigniter

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

但是,

在这里,我通过从 函数 1

获取值来将值传递给 函数 2

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

但是当函数 2 重新提交验证和提交数据时,这些有价值的数据变得空洞,并抛出错误 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);
        }     
    }   

}

如果您希望在 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);
        }     
    }   

}

实际上你有 $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);
        }     
    }   

}

尝试使用此代码:

首先将表单库添加到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);
        }
    }

试试这个 code.You 如果在 codeigniter 中成功验证失败,可以保留变量值。