欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

ThinkPHP自动验证的问题

程序员文章站 2022-06-08 16:44:15
...
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;					}				});	

index/indexAction.class.php
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一下



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方法就可以了。结贴