初歩的なご質問で申し訳ありませんが、ご教授お願いいたします。
###前提・実現したいこと
フォームなどを利用して、別ファイルにて処理をし、エラーがあった場合にフォームページに戻す場合に
エラーの内容を渡す処理を考えております。
その際に僕の知識では、セッションの利用、GETでのURLでの受け渡しくらいしか調べてもわからなかったです。
実際にやりたいことは、POSTのような形で受け渡しをしたいのですが、可能なのでしょうか?
可能な場合、この関数を使うや、参考URLなどをご提供いただけましたら幸いです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/03/10 00:15
回答2件
0
簡単なサンプルだけ(こまかい調整はしていません)
typeミスだけなおしてあります
- send.php
PHP
1<?PHP 2session_start(); 3$err["a"]=isset($_SESSION["error"]["a"])?$_SESSION["error"]["a"]:""; 4$err["b"]=isset($_SESSION["error"]["b"])?$_SESSION["error"]["b"]:""; 5$err["c"]=isset($_SESSION["error"]["c"])?$_SESSION["error"]["c"]:""; 6 7$data["a"]=isset($_SESSION["data"]["a"])?$_SESSION["data"]["a"]:""; 8$data["b"]=isset($_SESSION["data"]["b"])?$_SESSION["data"]["b"]:""; 9$data["c"]=isset($_SESSION["data"]["c"])?$_SESSION["data"]["c"]:""; 10 11print <<<eof 12<form method="post" action="y.php"> 13※答えはすべて「1」とする<br> 14<input type="text" name="a" value="{$data["a"]}">{$err["a"]}<br> 15<input type="text" name="b" value="{$data["b"]}">{$err["b"]}<br> 16<input type="text" name="c" value="{$data["c"]}">{$err["c"]}<br> 17<input type="submit" value="go"> 18</form> 19eof; 20?>
- recv.php
<?PHP session_start(); $a=filter_input(INPUT_POST,'a'); $b=filter_input(INPUT_POST,'b'); $c=filter_input(INPUT_POST,'c'); $_SESSION["data"]=["a"=>$a,"b"=>$b,"c"=>$c]; $_SESSION["error"]=[]; if($a!=="1") $_SESSION["error"]["a"]="bad data"; if($b!=="1") $_SESSION["error"]["b"]="bad data"; if($c!=="1") $_SESSION["error"]["c"]="bad data"; if(count($_SESSION["error"])>0){ header("Location:{$_SERVER["HTTP_REFERER"]}"); exit; } unset($_SESSION["data"]); print <<<eof ok!<br> <a href="{$_SERVER["HTTP_REFERER"]}">戻る</a> eof; ?>
投稿2017/03/10 00:51
編集2017/03/10 01:25総合スコア114839
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/03/10 01:16
2017/03/10 01:32
0
ベストアンサー
私がやる場合は「別ファイル」とはせずに「別Method」にすることで対応しますね。
そのフォーム処理を行う「FormControllerクラス」を作成し、その中で「input(入力)」「complete(完了)」のMethodを作成する。(必要に応じて「confirm(確認)」)
inputの画面からcompleteに遷移する際、入力エラーで戻す場合はcompleteメソッド内からinputメソッドを呼べばよい形になります。
PHP
1class FormController { 2 3 protected $postData; //Postされたデータを持つプロパティ 4 protected $errorMessages = array(); 5 6 //コンストラクタ 7 public function FormController() { 8 //POSTされたデータがあったら、プロパティに格納 9 $postData = isset($_POST) ? $_POST : null; 10 } 11 12 //入力画面用Method 13 public function input() { 14 //入力画面を表示 15 include VIEW_PATH.'input.view.php'; 16 } 17 18 //完了画面用Method 19 public function complete() { 20 try { 21 //Postデータのバリデート 22 $this->validate(); 23 //Postされたデータの処理(DBに登録したり、メールを送ったり) 24 $this->transactData(); 25 //完了画面の表示 26 include VIEW_PATH.'complete.view.php'; 27 28 //入力エラーがあった場合、エラーを表示 29 } catch(Exception $e) { 30 $errorMessage = $e->getMessage(); 31 include VIEW_PATH.'input.view.php'; 32 } 33 } 34 35 //入力データのバリデート 36 protected function validate() { 37 if(is_null($this->postData) || !is_array($this->postData) { 38 throw new Exception('入力して下さい'); 39 } 40 foreach($this->postData as $key => $val) { 41 switch($key) { 42 case 'name' : 43 if(strlen($val) > 10) { 44 throw new Exception('名前は10文字以内で入力して下さい'); 45 } 46 } 47 } 48 return true; 49 } 50}
サンプルコードなので色々適当ですが、validate処理のところあたりは、全部チェックしてからエラーを返したりするようにすれば使えるのではないかと。
投稿2017/03/10 01:28
総合スコア5405
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。