我不是专业人士,但我非常了解PHP,我是Codeigniter的新手。
正在浏览这些教程:http://net.tutsplus.com/articles/news/codeigniter-from-scratch-day-5-crud/
好的,所以我有一个列出用户的页面,点击用户名将转到编辑页面,该页面的URL为:index.php / users / edit / 1(其中1是用户ID)< / p>
在编辑页面上是一个表单,这个表单包含几个部分,每个部分都填充在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 / 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-&gt; form_validation-&gt; run()== FALSE)部分,如果表单包含数据,它会传递并重定向到index,如果我离开将其命名为空白或者没有正确处理编辑页面,或者我不知道,有些东西是对的..我认为它是因为页面正在使用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
答案 0 :(得分: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);
}
}
}
答案 1 :(得分:0)
$this->load->view('pages/users_edit');
在您的函数update()中,在验证之后加载视图,但不要将任何数据变量传递给它。因此,您没有可以在视图文件中访问的任何变量..
您必须以与函数edit()中相同的方式设置变量:
$this->load->view('template/template', $data);
目前没有设置变量$ data_user,所以你不能循环它并使用它..