初歩的なご質問で申し訳ありませんが、ご教授お願いいたします。
前提・実現したいこと
フォームなどを利用して、別ファイルにて処理をし、エラーがあった場合にフォームページに戻す場合に
エラーの内容を渡す処理を考えております。
その際に僕の知識では、セッションの利用、GETでのURLでの受け渡しくらいしか調べてもわからなかったです。
実際にやりたいことは、POSTのような形で受け渡しをしたいのですが、可能なのでしょうか?
可能な場合、この関数を使うや、参考URLなどをご提供いただけましたら幸いです。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
+1
簡単なサンプルだけ(こまかい調整はしていません)
typeミスだけなおしてあります
- send.php
<?PHP
session_start();
$err["a"]=isset($_SESSION["error"]["a"])?$_SESSION["error"]["a"]:"";
$err["b"]=isset($_SESSION["error"]["b"])?$_SESSION["error"]["b"]:"";
$err["c"]=isset($_SESSION["error"]["c"])?$_SESSION["error"]["c"]:"";
$data["a"]=isset($_SESSION["data"]["a"])?$_SESSION["data"]["a"]:"";
$data["b"]=isset($_SESSION["data"]["b"])?$_SESSION["data"]["b"]:"";
$data["c"]=isset($_SESSION["data"]["c"])?$_SESSION["data"]["c"]:"";
print <<<eof
<form method="post" action="y.php">
※答えはすべて「1」とする<br>
<input type="text" name="a" value="{$data["a"]}">{$err["a"]}<br>
<input type="text" name="b" value="{$data["b"]}">{$err["b"]}<br>
<input type="text" name="c" value="{$data["c"]}">{$err["c"]}<br>
<input type="submit" value="go">
</form>
eof;
?>
- 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;
?>
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
checkベストアンサー
0
私がやる場合は「別ファイル」とはせずに「別Method」にすることで対応しますね。
そのフォーム処理を行う「FormControllerクラス」を作成し、その中で「input(入力)」「complete(完了)」のMethodを作成する。(必要に応じて「confirm(確認)」)
inputの画面からcompleteに遷移する際、入力エラーで戻す場合はcompleteメソッド内からinputメソッドを呼べばよい形になります。
class FormController {
protected $postData; //Postされたデータを持つプロパティ
protected $errorMessages = array();
//コンストラクタ
public function FormController() {
//POSTされたデータがあったら、プロパティに格納
$postData = isset($_POST) ? $_POST : null;
}
//入力画面用Method
public function input() {
//入力画面を表示
include VIEW_PATH.'input.view.php';
}
//完了画面用Method
public function complete() {
try {
//Postデータのバリデート
$this->validate();
//Postされたデータの処理(DBに登録したり、メールを送ったり)
$this->transactData();
//完了画面の表示
include VIEW_PATH.'complete.view.php';
//入力エラーがあった場合、エラーを表示
} catch(Exception $e) {
$errorMessage = $e->getMessage();
include VIEW_PATH.'input.view.php';
}
}
//入力データのバリデート
protected function validate() {
if(is_null($this->postData) || !is_array($this->postData) {
throw new Exception('入力して下さい');
}
foreach($this->postData as $key => $val) {
switch($key) {
case 'name' :
if(strlen($val) > 10) {
throw new Exception('名前は10文字以内で入力して下さい');
}
}
}
return true;
}
}
サンプルコードなので色々適当ですが、validate処理のところあたりは、全部チェックしてからエラーを返したりするようにすれば使えるのではないかと。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.09%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
退会済みユーザー
2017/03/10 00:44
「可能です」という回答で十分なのでしょうか?
nerd
2017/03/10 09:15
ご指摘ありがとうございます。具体的な情報等のご提供をお願いしたかったです。