用户
 找回密码
 入住 CI 中国社区
搜索
查看: 5526|回复: 15
收起左侧

[HELP] 做"修改记录"功能时,怎么实现表单验证??

[复制链接]
发表于 2010-6-14 16:58:35 | 显示全部楼层 |阅读模式
我要做一个"修改记录"的功能。要修改的东西从数据库里select出来,放进view页面里

PHP复制代码
$data['info']=$this->mail_model->get_data($user_mail);
 
$this->load->view('info_view',$data);
复制代码


info_view这边,


HTML复制代码
<form method="POST" action="<?php echo base_url();?>index.php/start/edit">
<input maxLength="50" size="35" name="word" value="<?  echo $info->name; ?>"><?php echo form_error('name'); ?>
</form>
复制代码


edit这边,
PHP复制代码
$this->form_validation->set_rules('name', '姓名', 'valid_email');
 
  if ($this->form_validation->run() == FALSE)
  {
   $this->load->view('info_view');
  }
  else
  {
    $this->load->view('formsuccess');
  }
复制代码



如果输入错了,再回到info_view时,过去echo $info->name;的东西就没了。。。。

怎么办呢???

谢谢~~~

评分

参与人数 1威望 +2 收起 理由
Hex + 2 有代码高亮,加分

查看全部评分

 楼主| 发表于 2010-6-14 17:21:40 | 显示全部楼层
急急急呀~~~~
 楼主| 发表于 2010-6-14 17:47:51 | 显示全部楼层
帮帮忙~~~
发表于 2010-6-14 20:37:32 | 显示全部楼层
你要做的其实就是粘性表单而已,只要把思路理清很容易的
首先是toupdate方法,从数据库查询你要修改的数据data['名称']返回到指定的view里
接着就是表单验证提交,view提交到update方法,update方法里面处理提交过来的验证信息,如果验证不通过,你就应该把页面提交过来的数据全部放到数组里面,再以和toupdate方法里相同的data['名称']返回view
在view写个判断输出就行了,CI的验证表单里也有一个粘性表单的方法,你自己看一下吧,不过我一般都是这样用
发表于 2010-6-14 20:53:09 | 显示全部楼层
PHP复制代码
 
<?php
class yanzheng extends Controller{
    function yanzheng(){
       pareng::Controller();
   }
 
   function toupdate($id=0){  //查询数据返回页面
        $result = this->model->getdate($id);
        $data['result']=$result;
        $this->load->view('update',$data);
   }
 
   function update($id=0){  //修改方法
        $name = $this->input->post('name');
         $age = $this->input->post('age');
        $rules['name']="required";
        $rules['age']="required";
        $this->validation->set_message('required'.'%s can not be empty');
        $this->validation->set_rules($reules);
        if(this->validation->run()==false){  //验证不通过,将数据存入result数组返回页面
        $data['validationerror']=$this->validation->error_string;
        $result[]=array('name'=>$name,'age'=>$age);
        $data['result']=$result;
        $this->load->view('update',$data);
 
         }
         else{
             $this-model->update($id,$name,$age);
        }
   }
}
?>
 
 
复制代码


我也初学者,如有更好方法,欢迎楼下指点我一下 哈哈
发表于 2010-6-14 21:30:41 | 显示全部楼层
本帖最后由 suxiaolu 于 2010-6-14 21:35 编辑

set_value()
http://codeigniter.org.cn/user_g ... ml#repopulatingform
 楼主| 发表于 2010-6-14 22:34:41 | 显示全部楼层
恩,再把所有数据用post或data的方法回传回来,这样有点太复杂了吧,这里还包括很多隐藏的元素。

感觉这样不太好,反而比过去直接用php写麻烦了。也增加了以后读程的困难。

ci应该有更好的办法吧


set_value()是可以用,但是过去那个view里还是有$info->name啥的信息,还是会报错
发表于 2010-6-15 00:07:53 | 显示全部楼层
支持地板,set_value()支持所有post data,我写过一堆注册条目的表单,就是用set_value()保存表单值
建议楼主阅读表单验证和表单辅助手册,全篇看完就找到解决方案了
发表于 2010-6-15 01:44:01 | 显示全部楼层
我的那个思路本来就是php最直白的传值,至于隐藏的值你不取出来就是了,用了这么久也没发现什么不妥
   另一个方法就是楼上的ci自带的set_value(),至于你报错,那是你没正确的使用而已,多看看手册再多试试你就知道了,我用ci到现在都是一步步尝试后才弄清了一些方法的使用.
 楼主| 发表于 2010-6-16 16:55:11 | 显示全部楼层
恩,我看过手册,可不太明白set_value()怎么用。

比如
我的写法<input maxLength="50" size="35" name="word" value="<?  echo $info->name; ?>">

在哪加个set_value()呢?直接在echo $info->name;后面写个set_value()吗?

可如果这样的话,$this->load->view('info_view');回来的时候,set_value()的值是可以出来,但是还是会报找不到$info->name;的值呀???

呵,我比较笨~~  

谢谢楼上的老师们~~

8楼的老师,关于set_value()实际用于项目的例子有吗?

本版积分规则