表单自动填充的问题
本帖最后由 ares333 于 2009-12-12 14:51 编辑如下是用于登陆验证的简单代码,位于admin/start控制器
function login(){
$this->load->view('admin/login',$data);
}
function assess(){
if($_POST['username']=='ares' && $_POST['password']=='123'){
redirect('admin/main');
}else{
$this->login();
}
}
login视图关键代码
<?php echo form_open('admin/start/assess',array('name'=>'myform'));?>
<input name="username" class="editbox4" value="<?php echo set_value('username');?>" size="20">
<input class="editbox4" type="password" size="20" name="password">
<?php echo form_close();?>
访问http://localhost/admin/start/login 填写正确的用户名和错误的密码,显然不会进入admin/main控制器,返回了登录界面,而且用户名被自动填上了,这说明CI能够自动填充表单(<?php echo set_value('username');?>)。但是有一个比较不爽的问题,浏览器的地址栏变成了http://localhost/admin/start/assess,很不爽,我想解决的就是这个地址问题
改进如上代码,只修改了assess()方法
function assess(){
if($_POST['username']=='ares' && $_POST['password']=='123'){
redirect('admin/main');
}else{
redirect('admin/login');
}
}
再次填写正确的用户名和错误的密码,浏览器地址栏变成了理想的http://localhost/admin/start/login,但是CI的自动填充功能失效了,也就是说用户名那个输入框是空的。
有没有办法使表单能够自动填充,而且浏览器地址栏显示http://localhost/admin/start/login ??? 那你只能自己填充表单了,因为 redirect 以后是另外一个请求了,这只能通过 session 存储两个请求之间的数据。当然,你可以改进一下验证类。
一般来说,我建议用 redirect,这样可以避免重复提交的问题。 本帖最后由 ares333 于 2010-3-6 09:16 编辑
首先谢谢你的及时回复,我又考虑了一下,session存储太麻烦,首先要修改index.php,添加session_start()一行,而且也不清楚如果加载了CI原生类库SESSION会不会起冲突,因为我开发后台用的CI原生SEESION。
后来我又考虑了一下,感觉搞代码时间长了容易反映迟钝,吧上面的代码又修改了一下就OK了。
表单自动填充是有前提的,前提就是装载表单视图的控制器函数必须能够接收此表单的$_POST数据,个人感觉。
function login(){
if($this->assess($_POST['username'],$_POST['password']))
redirect('admin/main');
$this->load->view('admin/login',$data);
}
function assess($name='',$pass=''){
if($name=='ares' && $pass=='123'){
return TRUE;
}else{
return FALSE;
}
}
当然这只是原理代码,省去了从数据库读取管理员信息和设置session信息等步骤。
页:
[1]