2016-07-27 41 views
0

我正在嘗試使用PHP codeigniter實現用戶註冊,因爲我爲它創建了模型,視圖和控制器。PHP Codeigniter - 嚴重性:控制器和視圖的通知

我面對一些小的錯誤即

A PHP Error was encountered 
Severity: Notice 
Message: Undefined variable: errors 
Filename: register_user.php 

我已經定義users.php變量錯誤,那麼也是爲什麼它是坡平了未定義的變量錯誤。

下面是users.php(控制器)

function register(){ 
     if($_POST){ 

      $config=array(
       array(
        'field'=>'username', 
        'label'=>'Username', 
        'rules'=>'trim|required|min_length[3]|is_unique[users.username]' 
       ), 
       array(
        'field'=>'password', 
        'label'=>'Password', 
        'rules'=>'trim|required|min_length[5]' 
       ), 
       array(
        'field'=>'password2', 
        'label'=>'Password confirmed', 
        'rules'=>'trim|required|min_length[5]|matches[password]' 
       ), 
       array(
        'field'=>'email', 
        'label'=>'Email', 
        'rules'=>'trim|required|is_unique[users.email]|valid_email' 
       ) 
       ); 
      $this->load->library('form_validation'); 
      $this->form_validation->set_rules($config); 
      if($this->form_validation->run() == FALSE){ 
       $data['errors']=validation_errors(); 
      }else{ 
        $data=array(
        'username'=>$_POST['username'], 
        'password'=>$_POST['password'], 
        'user_type'=>$_POST['user_type'], 
        ); 
       $this->load->model('user'); 
       $userid=$this->user->create_user($data); 
       $this->session->set_userdata('userID',$userid); 
       $this->session->set_userdata('user_type'.$_POST['user_type']); 
       redirect(base_url().'posts'); 
      } 
     } 
     $this->load->helper('form'); 
     // $this->load->view('header'); 
     $this->load->view('register_user'); 
     // $this->load->view('footer'); 
    } 


Below is user.php (model) 

    function create_user($data){ 
     $this->db->insert('users',$data); 
    } 


Below is register_user.php (View) 

    <?php if($errors){ ?> 
<div style="background:red; color:white;"> 
    <?php echo $errors ?> 
</div> 

<?php } ?> 

<?php echo form_open(base_url().'users/register'); ?> 
    <p>Username: <?php 
       $data_form=array(
        'name'=>'username', 
        'size'=>50, 
        'style'=>'border:1px solid black', 
        'id'=>'username' 
        ); 
       echo form_input($data_form);     
       ?> 
    </p> 

<p> 
    <?php echo form_label('Email','email')?>: <?php 
                $data_form=array(
                 'name'=>'email', 
                 'size'=>50, 
                 'style'=>'border:1px solid black', 
                 'id'=>'email' 
                 ); 
                echo form_input($data_form); 
                ?> 
</p> 

    <p><?php echo form_label('Password','password')?>: <?php 
      $data_form=array(
       'name'=>'password', 
       'size'=>50, 
       'style'=>'border:1px solid black', 
       'id'=>'password' 
       ); 
      echo form_password($data_form);     
                 ?> 
    </p> 

<p> 
    <?php echo form_label('Password Confirmed','password2')?>: <?php 
                $data_form=array(
                 'name'=>'password2', 
                 'size'=>50, 
                 'style'=>'border:1px solid black', 
                 'id'=>'password2' 
                 ); 
                echo form_password($data_form); 
                ?> 
</p> 

    <p> 
     <?php echo form_label('User Type','user_type')?>:<?php 
        $options=array(
         ''=>'--', 
         'admin'=>'Admin', 
         'author'=>'Author', 
         'user'=>'User', 
        ); 
        $js='onchange="alert(\'hi\');" style="border:1px solid black"'; 
        echo form_dropdown('user_type',$options,'',$js); 
     ?> 
    </p> 
    <p><?php echo form_submit('','Register'); ?></p> 
<?php echo form_close(); ?> 

請我出去。

+0

你把這個'register_user.php'放在任何文件夾裏? – Poonam

回答

1

的誤差結算給你什麼錯誤是一個暗示:

下面的錯誤意味着變量完全不存在並且沒有設置任何地方。

通知消息:未定義的變量:錯誤的文件名:register_user PHP

什麼,你正在做的是檢查視圖裏面的變量$errors,但該變量不存在。爲什麼這個變量不存在? 。

因爲你所定義的$data['errors'],但你從來沒有它傳遞給視圖:看你行:

$this->load->view('register_user'); 

它需要象下面這樣:

$this->load->view('register_user',$data); 

和內連如果變量不存在,則可以通過在視圖內使用isset()來檢查變量是否已設置,所以它需要像這樣在register_user.php之內:

<?php if(isset($errors)){ ?> 
<div style="background:red; color:white;"> 
    <?php echo $errors; ?> 
</div> 

<?php } ?> 

還有一件事。裏面笨考慮使用CodeIgniter的輸入類:

$this->input->post('username'); // for $_POST 
$this->input->get('username'); // for $_GET 
$this->input->cookie('cookie_name'); 
$this->input->server(); 

,而不是使用$_POST$_GET

隨着笨指南指出:

Input類有兩個目的:

  1. 它預 - 處理全局輸入數據的安全性。
  2. 它提供了一些輔助方法來獲取輸入數據並對其進行預處理。
+0

我完成了上述步驟,它適用於我。 謝謝辛格先生 真的很感謝你的支持:) –

+0

你可能會覺得有趣的一點是,在它返回'form_validation-> run()'之前,''將$ _POST'重置爲新處理(驗證)的數據。所以,在run()返回後,使用'input-> post()'沒有任何好處。全局輸入始終是在構建「輸入」類時進行預處理的 - 這總是自動發生。而且由於OP直接訪問已成功驗證過的'$ _POST'項,所以比調用'input-> post()'更安全,效率更高。但在其他任何情況下,我都同意使用'input'類是最好的。 – DFriend

相關問題