2013-04-17 2 views
5

저는 프로가 아니지만 PHP 주위에있는 길을 알고 있습니다. 저는 Codeigniter를 처음 사용합니다.Codeigniter 양식 게시 및 유효성 확인

이 튜토리얼을 통해 진행되고 : http://net.tutsplus.com/articles/news/codeigniter-from-scratch-day-5-crud/

좋아, 그럼 내가 편집 페이지로 이동합니다 사용자 이름을 클릭하여 사용자를 나열하는 페이지, 해당 페이지의 존재의 URL을 가지고 : 사용자/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(); 
     } 

    } 

, 난 그냥 사용자에 대한 검증을 테스트하고 있습니다 "이름"여기서 폼 입력 = 이름 아이디 = 이름

내가 처리하고 있지 않다 생각하는 경우 ($ this-> form_validation-> run() == FALSE) 올바르게 양식의 일부가 데이터를 포함하고 있으면 통과하고 페이지로 리디렉션됩니다. 이름을 비워두면 편집 페이지가 제대로 처리되지 않거나 잘 모릅니다. 뭔가 잘못되었습니다. 페이지가 post 배열을 사용하여 다시로드되고 function edit()에서했던 것처럼 $ 데이터를 전달하지 않습니다. 다시는 VALIDATION_ERRORS을 표시해야하는 양식 페이지에

, 그 전시 : 이름 필드가 필요

.

이는 보여주는 PHP 오류, 미리 입력해야하는 필드의 나머지 그러나, 올바른 : 유효성 검사 후) 함수 업데이트 (내부

A PHP Error was encountered 

Severity: Notice 

Message: Undefined variable: userUserName 

Filename: pages/users_edit.php 

Line Number: 50 
+0

예,이와 양식 페이지를로드 할 = "name"> – Mark

+0

"serUserName"변수를 정의했는지 확인하십시오. '$ data_user'에있는 – Suleman

+0

의 경우, 한 사용자의 데이터를 수신 한 경우에는 루프하지 마십시오. –

답변

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

당신 뷰를로드하지만 데이터 변수에 PASS하지 마십시오. 당신이 당신의 뷰 파일에 액세스 할 수있는 모든 변수 ... 당신은 당신의 기능 편집()에서 귀하의 변수를 같은 방식으로 설정해야

을하지 않아도 :

$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

페이지를 편집 할 때 사용자 데이터로 컨트롤러 -> EDIT() 함수를로드합니다. 폼을 전송할 때 컨트롤러 -> UPDATE() 함수로 보내면 해당 사용자 데이터는 설정되지 않습니다. 그것 접근 : :) – Svetoslav

1

업데이트 기능을 사용하는 대신 편집 기능에서 유효성 검증을 수행 할 수 있습니다. 유효성 검사에 오류가 있으면 codeigniter가 필드를 다시 채우는 작업을 담당하게됩니다. <입력 ID = "이름"클래스 = "inputLong"유형 = "텍스트"값 = "마크"이름 : 유효성 검사가 정상이라면, 당신은 당신의 다음 단계

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); 
     } 
    } 
}