2013-04-17 120 views
5

我不是一個職業球員,但知道我周圍的PHP的方式,我是新來的笨。笨形式後和驗證

正在經歷這些教程:http://net.tutsplus.com/articles/news/codeigniter-from-scratch-day-5-crud/

OK,所以我有一個頁面,其中列出的用戶,點擊用戶名稱將進入編輯頁面,該頁面存在的網址:index.php文件/用戶/編輯/ 1(其中1是用戶ID)

在編輯頁面是一種形式,這種形式的包含幾個部分,每個部分被從在DB不同表填充。所以,我對編輯控制器如下:

function edit() { 

     //load model 
     $this->load->model('users_model'); 

     //assign user data from DB 
     $data['data_user'] = $this->users_model->getUser($this->uri->segment(3)); 
     //get users Password, using username from above 
     $data['data_user_password']= $this->users_model->getUserPassword($data['data_user'][0]->UserName); 

     $data['page_content'] = 'pages/users_edit'; 
     $this->load->view('template/template', $data); 
    } 

注意: $data['data_user']包含如姓名,用戶名,電子郵件 $data['data_user_password']含有用戶密碼從不同的表

然後我可以填充表單上的用戶數據users_edit.php,這一切工作正常。 我做訪問這些數據如下:

if (is_array($data_user)) { 
    foreach($data_user as $user) 
    { 
     $userID   = $user->id; 
     $userName  = $user->Name; 
     $userUserName = $user->UserName; 
     $userMail  = $user->Mail; 
     $userDepartment = $user->Department; 
     $userWorkPhone = $user->WorkPhone; 
     $userHomePhone = $user->HomePhone; 
     $userMobile  = $user->Mobile; 

    } 
} 
//user password 
if (is_array($data_user_password)) { 
    foreach($data_user_password as $user) 
    { 
     $userPassword = $user->value; 
    } 
} 

Name: 
<?php echo form_input('name', set_value('name', $userName), 'id="name" class="inputLong"'); ?> 

當我發佈,我將數據發送到:的index.php /用戶/更新

我給這頁控制器到目前爲止是:

function update() { 

     echo '<pre>'; 
     print_r($_POST); 
     echo '</pre>'; 
     //exit(); 

     $this->load->library('form_validation'); 

     $this->form_validation->set_rules('name', 'Name', 'trim|required'); 

     if ($this->form_validation->run() == FALSE) 
     { 
      $this->load->view('pages/users_edit'); 
     } 
     else 
     { 
      $this->index(); 
     } 

    } 

現在,我只是在用戶測試驗證的「名稱」,其中表單輸入=名ID =名稱

我想我不會處理,如果($這個 - > form_validation-> run()== FALSE它的)部分正確,如果表單包含數據,它傳遞和重定向到索引,如果我離開名稱空白,要麼不能正確處理編輯頁面,或者我不知道,什麼心不是正確的。我認爲它是因爲頁面採用接線柱陣列,就像我在功能上編輯並沒有傳遞$數據()被重新加載。

回到表單頁面,它應該顯示VALIDATION_ERRORS,其顯示:

是必需的名稱字段。

這是正確的,但是,應該預先填充的字段的其餘部分,它的顯示PHP錯誤:

A PHP Error was encountered 

Severity: Notice 

Message: Undefined variable: userUserName 

Filename: pages/users_edit.php 

Line Number: 50 
+0

是,表單頁面加載此: <輸入ID =「名稱」級=「inputLong」類型=「文本」值=「馬克」的名字=「name」> – Mark

+0

請確定你已經定義了「serUserName」變量? – Suleman

+0

in'$ data_user',如果您收到一個用戶的數據,則不要循環。 –

回答

0
$this->load->view('pages/users_edit'); 

裏面的功能更新(),您的驗證後,你加載視圖,但您不會將任何數據變量傳遞給它。所以,你沒有,你可以在你的視圖文件訪問任何變量..

你必須以同樣的方式將您的變量在函數編輯():

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

目前還沒有設置變量$ data_user所以你不能循環,並使用它..

+0

我不明白,在視頻教程和用戶指南中:http://ellislab.com/codeigniter/user-guide/libraries/form_validation.html他們不重新加載頁面並將任何數據傳遞給它,在他們說Codeigniter爲你照顧的視頻.. ??這意味着在加載表單之前,我需要重新構造發佈數據的$ data ['data_user']和$ data ['data_user_password']數組,正確嗎? – Mark

+0

當你去編輯頁面時,用你的用戶數據加載Controller - > EDIT()函數..當你提交你的表單時,你發送到Controller - > UPDATE()函數,那裏的用戶數據沒有設置..所以你可以無法訪問它:) .. – Svetoslav

1

你可以做你的驗證你的編輯功能,而不是裏面有一個更新功能,這樣,你的數據仍然可以使用你的看法,如果驗證有錯誤,codeigniter將負責重新填充您的字段。如果驗證是好的,你做你的下一步

function edit() { 

    //load model 
    $this->load->model('users_model'); 

    //assign user data from DB 
    $data['data_user'] = $this->users_model->getUser($this->uri->segment(3)); 
    //get users Password, using username from above 
    $data['data_user_password']= $this->users_model->getUserPassword($data['data_user'][0]->UserName); 

    $data['page_content'] = 'pages/users_edit'; 
    $this->load->view('template/template', $data); 

    //is the form submitted 
    if(form submit){ 
     if ($this->form_validation->run() == TRUE) 
     { 
      $this->index(); 
     } 
     else 
     { 
     $this->load->view('pages/users_edit', $data); 
     } 
    } 
}