Heim >Backend-Entwicklung >PHP-Tutorial >ThinkPHP自动验证的问题
thinkphp在model中定义了自动验证之后,使用$this->display(模板)之后,之前页面输入的所有东西就没有了,请问在thinkphp中有什么方法可以让以前输入的东西还在,并且聚焦到错误的输入框内。
给你个思路
如果你用的ajax,那当$create()表单验证失败时,用getError()方法获取错误信息,将之前验证时传过来的参数加上错误信息返回过去,ajax那里设置回调函数对信息进行处理。
如果不是ajax的话,可以考虑在模板中使用session值作为错误信息,没有时写空字符串,验证失败时将错误信息写入对应session,返回后模板将进行显示,验证成功后注意清除对应session。
聚焦的话如果多个填错你打算聚到哪个?
给你个思路
如果你用的ajax,那当$create()表单验证失败时,用getError()方法获取错误信息,将之前验证时传过来的参数加上错误信息返回过去,ajax那里设置回调函数对信息进行处理。
如果不是ajax的话,可以考虑在模板中使用session值作为错误信息,没有时写空字符串,验证失败时将错误信息写入对应session,返回后模板将进行显示,验证成功后注意清除对应sessio……
所有的出错框的背景色显示为红色,聚焦从上到下,从左到右的第一个。。
引用 1 楼 Anew_G 的回复:给你个思路
如果你用的ajax,那当$create()表单验证失败时,用getError()方法获取错误信息,将之前验证时传过来的参数加上错误信息返回过去,ajax那里设置回调函数对信息进行处理。
如果不是ajax的话,可以考虑在模板中使用session值作为错误信息,没有时写空字符串,验证失败时将错误信息写入对应sessi……
这些用js控制呀
thinkphp在model中定义了自动验证之后,使用$this->display(模板)之后,之前页面输入的所有东西就没有了,请问在thinkphp中有什么方法可以让以前输入的东西还在,并且聚焦到错误的输入框内。
thinkphp
模板页面用jquery的Ajax方法提交到action,action中做判断,根据不同的错误返回不同的值,末班页面根据不同的返回值,输出不同的错误提示,且定位到指定的输入框。
如果需要详细解决方案,请直接回复我。
引用 楼主 shaozengwei 的回复:thinkphp在model中定义了自动验证之后,使用$this->display(模板)之后,之前页面输入的所有东西就没有了,请问在thinkphp中有什么方法可以让以前输入的东西还在,并且聚焦到错误的输入框内。
thinkphp
模板页面用jquery的…… 刚才点错了,不好意思。。。
还想追问你一个问题,是thinkphp的ajax上传的问题,在百度上查是说,在页面上加一个iframe然后加几个input框,可是我照的网上说的加完之后,没有反应。后台可以接收到上传 的文件。还是继续使用ajaxReturn返回json数据。能不能贴一下源码。。。
如果需要详细解决方案,请直接回复我。 请贴一下源码。。
你用js就可以实现,提交触发事件。
引用 5 楼 nowphp 的回复:如果需要详细解决方案,请直接回复我。请贴一下源码。。
$.post("{:U('index/index/check')}", {name:name}, function(result){ if(result == -1){ alert('输入名字不存在'); return false; }else if(result == -2){ alert('输入名字不合法'); return false; } });
function check(){ $name=$_POST['name']; $map['name']=$name; $result=M('user')->where($map)->find(); if($result){ echo -1;exit; } if(!isAble($name)){ echo -2;exit; }}
$('#id_input').focus();
上面的第一个alert应该说是已经存在
引用 7 楼 shaozengwei 的回复:
引用 5 楼 nowphp 的回复:如果需要详细解决方案,请直接回复我。请贴一下源码。。
JavaScript code
?
1234567891011
$.post("{:U('index/index/check')}", {name:name}, function(result){ …… 聚焦这个问题,是不知道哪个控件出错了,所以不知道聚焦到哪个控件而且我是要提交一个表单。。需要上传视频。
可以贴出你的代码,让我们look一下
可以贴出你的代码,让我们look一下
<form method="post" action="__URL__/uploadVideo" enctype="multipart/form-data" id="upload" target="ajaxUpload"> <input type="hidden" name="ajax"/> <input type="file" name="newico"/> <input type="submit" name="submit" value="submit"/> </form><iframe name="ajaxUpload" src="" frameborder="0" SCROLLING="no" style="display:none" id="ajaxUpload"> <input type="hidden" name="_AJAX_SUBMIT_" value="1"/> <input type="hidden" name="_uploadFormId" value="upload"/> <input type="hidden" name="_uploadFileResult" value="result"/> <input type="hidden" name="_uploadResponse" value="uploadComplete"/> <input type="hidden" name="_uploadReplace" value="1"/> <input type="hidden" name="_uploadFileType" value="jpg,gif,png,swf" /> <input type="hidden" name="_uploadSavePath" value="/Public/Images/user/"/> <input type="hidden" name="_uploadSaveRule" value="time"/> <input type="hidden" name="_uploadFileSize" value="20480"/> </iframe>
public function uploadVideo(){ //dump($_POST); $info = $this->upload('temp'); } public function upload($module = '', $path = '', $thumb = '', $width = '', $height = '') { $module = $module = ""?'temp':$module; switch ($module){ case 'temp':$path = C(ATTACHDIR) . '/temp/' . $path; break; case 'storehouse':$path = C(ATTACHDIR) . '/storehouse/' . $path; break; case 'shop':$path = C(ATTACHDIR) . '/shop/' . $path; break; case 'trader': $path = C(ATTACHDIR) . '/trader/' . $path; break; case 'group': $path = C(ATTACHDIR) . '/group/' . $path; break; case 'my': $path = C(ATTACHDIR) . '/avatar/' . $path; break; default:$path = C(ATTACHDIR) . '/file/' . $path; } if (!is_dir($path)) @mkdir($path); import("ORG.Net.UploadFile"); $upload = new UploadFile(); $upload->maxSize = C(ATTACHSIZE); $upload->allowExts = explode(',', strtolower(C(ATTACHEXT))); $upload->savePath = $path; $upload->saveRule = 'uniqid'; //$upload->allowTypes=array('jpg'); //empty($thumb)?$upload->thumb = C(ATTACH):$upload->thumb = $thumb; //empty($width)?$upload->thumbMaxWidth = C(THUMBMAXWIDTH):$upload->thumbMaxWidth = $width; //empty($height)?$upload->thumbMaxHeight = C(THUMBMAXHEIGHT):$upload->thumbMaxHeight = $height; if (!$upload->upload()){ if($this->isAjax()){ $this->ajaxReturn(array("errorMsg"=>$upload->getErrorMsg()),'uploadError',2); }else{ return $this->error($upload->getErrorMsg()); } }else{ if($this->isAjax()){ $this->ajaxReturn(array('info' => 'info'),'info',1); }else{ return $upload->getUploadFileInfo(); } } }
问题已经解决。做一个static方法就可以了。结贴