[英]Codeigniter form post and validation
我不是專業人士,但我知道我的PHP方式,我是Codeigniter的新手。
正在瀏覽這些教程: http : //net.tutsplus.com/articles/news/codeigniter-from-scratch-day-5-crud/
好的,所以我有一個列出用戶的頁面,點擊用戶名將轉到編輯頁面,該頁面的URL為:index.php / users / edit / 1(其中1是用戶ID)
在編輯頁面上是一個表單,這個表單包含幾個部分,每個部分都是從DB中的不同表填充的。 所以我的Controller編輯如下:
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 / users / update
到目前為止,我對此頁面的控制器是:
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();
}
}
現在,我只是測試用戶“name”的驗證,其中form input = name id = name
我認為我沒有正確處理if($ this-> form_validation-> run()== FALSE)部分,如果表單包含數據,它會傳遞並重定向到索引,如果我將名稱留空則不正確處理編輯頁面,或者我不知道,有些東西是對的..我認為它是因為頁面正在使用post數組重新加載,而不像我在函數edit()中那樣傳遞$ data。
回到表單頁面,它應該顯示validation_errors,它顯示:
該名稱字段是必需的。
但是,對於應該預先填充的其他字段,這是正確的,它顯示PHP錯誤:
A PHP Error was encountered
Severity: Notice
Message: Undefined variable: userUserName
Filename: pages/users_edit.php
Line Number: 50
您可以在編輯功能中進行驗證,而不是使用更新功能,這樣,您的數據仍可用於您的視圖,如果驗證有錯誤,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);
}
}
}
$this->load->view('pages/users_edit');
在函數update()中,在驗證之后加載視圖,但不要將任何數據變量傳遞給它。 因此,您沒有可以在視圖文件中訪問的任何變量。
您必須以與函數edit()中相同的方式設置變量:
$this->load->view('template/template', $data);
目前沒有設置變量$ data_user,所以你不能循環它並使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.