保留用户在表单中输入的数据

时间:2014-01-13 10:57:42

标签: codeigniter

我正在使用codeigniter。以下是我的注册页面的代码。  

控制器

function register()
     {
         $this->load->library('form_validation');
      $this->form_validation->set_rules('first_name', 'First Name',     'trim|required');
          $this->form_validation->set_rules('last_name', 'Last Name', 'trim|required');
          $this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[4]|is_unique[users.username]');
          $this->form_validation->set_rules('user_email', 'Email', 'trim|required|valid_email|is_unique[users.user_email]');
          $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[4]|max_length[32]');
           $this->form_validation->set_rules('ans_1', 'Security answer 1', 'required');      
              $this->form_validation->set_rules('ans_2', 'Security answer 2',     'required'); 
          if($this->form_validation->run() == FALSE) { 
            //not validated - reload the view and display errors 
               $this->load->database();

            $this->load->model('user'); 
            $data['ques'] = $this->user->get_que();
            $this->load->view('register',$data); 

          } 
            else { 
             $this->load->database();

            $this->load->model('user'); 
            //create user 
            $this->user->create_user();
            $this->thank();
            } 
     }



视图

 <!DOCTYPE html> 
<html>
 <head>
   <title> Login</title>
   <link rel="stylesheet" href="http://localhost/cinema/assets/css/form.css">

 </head>
 <body>




            <form action="http://localhost/cinema/login/register" method="post" accept-charset="utf-8" class="username register" >
           <h3>User Registration form:</h3>
            <p><label for="first_name">First Name</label>
                <input type="text" name="first_name" /></p>
             <p><label for="last_name">Last Name</label>
                <input type="text" name="last_name" /></p>

            <p><label for="username">Username</label>
                <input type="text" name="username" /></p>

           <p><label for="user_email">Email</label>
                <input type="text" name="user_email"  /></p>

     <p><label for="password">Password</label>
             <input type="password"   name="password"  /></p>
         <br><font size='4'>Select security question 1:</font>
           <select name="que_1">
        <?php 
            foreach($ques as $que)
        { 
          echo '<option value="'.$que->que_ID.'">'.$que->que.'</option>';
        }
        ?>
        </select><br><br>
         <p><label for="ans_1">Answer:</label>
                <input type="text" name="ans_1"  /></p>
         <br><font size='4'>Select security question 2:</font>
           <select name="que_2">
        <?php 
            foreach($ques as $que)
        { 
          echo '<option value="'.$que->que_ID.'">'.$que->que.'</option>';
        }
        ?>
        </select><br><br>
         <p><label for="ans_2">Answer:</label>
                <input type="text" name="ans_2"  /></p>

         <input type="submit" name="btnSubmit" class="styled-button-8"  style="float:right; margin-right:300px; margin-top:-10px;" value="Sign Up!"
             />
            <font color="red" size="4"><b>
         <?php echo validation_errors(); ?></b></font>
           </form>
 </body>
</html> 

   <br>

我的问题是,如果用户填写无效数据并单击注册按钮,页面将刷新并显示验证错误,但用户输入的数据不会保留在那里。他必须再次填写整个页面形成。我希望在这种情况下保留和显示用户数据。在此先感谢.. :)

4 个答案:

答案 0 :(得分:0)

你可以这样试试。您可以维护会话以在验证检查时显示用户字段数据。我在表单中添加了一个带有会话的示例。

您的观点:

<?php session_start(); ?>
<form action="http://localhost/cinema/login/register" method="post" accept-charset="utf-8" class="username register" >
    <h3>User Registration form:</h3>
    <p><label for="first_name">First Name</label>
        <input type="text" name="first_name" value="<?php echo $_SESSION['first_name']; ?>" /></p>
    <font color="red" size="4"><b>
        <?php echo validation_errors(); ?></b></font>
</form>

您的控制器:

function register() {
    $this->load->library('form_validation');
    $firstName = $this->form_validation->set_rules('first_name', 'First Name', 'trim|required');
    $this->session->set_userdata('first_name', $firstName);
    if ($this->form_validation->run() == FALSE) {
        //redirect to register page
    } else {
        //register user details
        $this->session->unset_userdata('first_name');
    }

答案 1 :(得分:0)

为此,您需要set_value()

输入文件

<input type="text" name="last_name" value='<?php echo set_value('last_name')?>'/>

这将从$ _POST获取值并在验证失败后打印。还将第二个参数作为默认值。

<?php echo set_value('last_name','John')?>

阅读Form Helper班级。

答案 2 :(得分:0)

更好的解决方案是:使用发布数据

<input type="text" name="last_name" value='<?php echo $this->input->post('last_name')?>'/>

使用set_value()时,必须将该字段发送到验证,即使不是必需的。 但是对于Post,你不想做任何额外的工作。

答案 3 :(得分:0)

在你的控制器中放入一个数据数组并将用户输入的值传递给那个。然后如果有表单验证错误将这些数据传递给视图。

在视图中使用CI set_value()方法显示先前输入的值。