ホームページ  >  記事  >  バックエンド開発  >  ThinkPHP の自動検証の問題

ThinkPHP の自動検証の問題

WBOY
WBOYオリジナル
2016-06-23 14:03:02799ブラウズ

thinkphp がモデルで自動検証を定義した後、$this->display (テンプレート) を使用すると、前のページで入力した内容がすべて消えてしまいます。間違った入力ボックスに注目してください。


ディスカッションへの返信 (解決策)

アイデアを教えてください

ajax を使用している場合、$create() フォームの検証が失敗した場合、getError() メソッドを使用してエラー情報を取得し、前回の検証に合格する 渡されたパラメータとエラー情報を過去に戻し、その情報を処理するために ajax にコールバック関数を設定します。

Ajax ではない場合は、テンプレート内のエラー メッセージとしてセッション値を使用することを検討できます。そうでない場合は、検証が失敗したときに、対応するセッションにエラー メッセージが書き込まれます。テンプレートが表示されます。検証が成功したら、必ず対応するセッションをクリアしてください。

複数の項目を間違って入力した場合、どれに注目しますか?

アイデアを教えてください

ajax を使用している場合、$create() フォームの検証が失敗した場合、 getError() メソッドを使用してエラー情報を取得し、前の検証中に渡されたパラメーターとエラーを返します。情報、ajax そこにコールバック関数を設定して情報を処理します。

Ajax ではない場合は、テンプレート内のエラー メッセージとしてセッション値を使用することを検討できます。そうでない場合は、検証が失敗したときに、対応するセッションにエラー メッセージが書き込まれます。テンプレートが表示されます。検証が成功したら、対応するセッションを必ずクリアしてください...
最初のエラー ボックスを中心に、上から下、左から右の順に背景色が赤色で表示されます。 。

1階のAnew_Gさんからの返信を引用:アイデアをください

ajaxを使用している場合、$create()フォームの検証が失敗した場合、getError()メソッドを使用してエラー情報を取得し、パラメータを追加します前回の検証で渡されたエラー情報を過去に戻し、そこにajaxコールバック関数を設定して情報を処理します。

Ajax ではない場合は、テンプレート内のエラー メッセージとしてセッション値を使用することを検討できます。それが利用できない場合は、検証が失敗した場合に、対応するセッションにエラー メッセージを書き込みます。

これらは js で制御されています

モデル内の thinkphp で自動検証を定義し、$this->display (テンプレート) を使用すると、前のページで入力したものはすべて消えてしまいます。以前に入力したものがまだ残っているのに、間違った入力ボックスに注目してしまいますか?
Ajax メソッドを使用してアクションにテンプレート ページを送信すると、さまざまなエラーに応じてさまざまな値が返され、最後のページではさまざまな戻り値に応じてさまざまなエラー プロンプトが出力されます。指定された入力フレームを見つけます。

詳細な解決策が必要な場合は、私に直接返信してください。

投稿者 shaozengwei からの返信を引用: thinkphp がモデルで自動検証を定義した後、$this->display (テンプレート) を使用すると、前のページで入力した内容がすべて消えてしまいます。 make before 入力はまだ存在しており、間違った入力ボックスにフォーカスされています。 P Thinkphp

テンプレートページは jQuery で作られています ... 先ほど間違っていました、ごめんなさい。 。 。

また、質問したいのですが、thinkphp の ajax アップロードに関する問題です。Baidu で調べたところ、iframe を追加してからページにいくつかの入力ボックスを追加する必要があるとありましたが、その後、オンラインの指示に従って追加しましたが、応答はありませんでした。アップロードされたファイルはバックグラウンドで受信できます。または、引き続き 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();

上記の最初のアラートはすでに存在していると考えられます

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。