質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

16636閲覧

PHPで別ファイルに値を渡す方法につきまして

nerd

総合スコア37

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/03/09 15:42

編集2017/03/10 00:15

初歩的なご質問で申し訳ありませんが、ご教授お願いいたします。

###前提・実現したいこと
フォームなどを利用して、別ファイルにて処理をし、エラーがあった場合にフォームページに戻す場合に
エラーの内容を渡す処理を考えております。
その際に僕の知識では、セッションの利用、GETでのURLでの受け渡しくらいしか調べてもわからなかったです。

実際にやりたいことは、POSTのような形で受け渡しをしたいのですが、可能なのでしょうか?
可能な場合、この関数を使うや、参考URLなどをご提供いただけましたら幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/03/09 15:44

「可能です」という回答で十分なのでしょうか?
nerd

2017/03/10 00:15

ご指摘ありがとうございます。具体的な情報等のご提供をお願いしたかったです。
guest

回答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
yambejp

総合スコア114839

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nerd

2017/03/10 01:16

yambejp様 ご回答、サンプルのご提供誠に有難うございます。 説明の仕方が悪くて申し訳ございません。 セッションや、GETを使用しなくて、POSTのような形で値を保有しつつ戻れるのかを知りたかった次第です。 どの説明ページ、書籍でも、HTMLもしくはPHPでPOSTし、別ファイルに移動しての処理途中のエラーに関してはセッション利用もしくは、URLにGET用コードを用い[header]で飛ばすという感じでしたので、ご質問に至った感じでした。 コードはすごく勉強になる書き方で参考にさせていただきます。
kunai

2017/03/10 01:32

POSTでRedirect出来るのかと言う話であれば、「出来ない」と考えてください。 「post redirect」とかでググればたくさん情報出てきます。 その前提で、回避策としてsessionを使ったり、別途私が回答しているような工夫をしているのが現状ですね。
guest

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

kunai

総合スコア5405

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nerd

2017/03/10 01:56

kunai様 ご回答、サンプルコードの提供誠に有難うございます。 Methodの利用で処理だけを別で作成し呼び込めば、同一ページでの展開となるとの認識になるのですね。 オブジェクト指向?の部分がいまいちまだ理解できていなかったのと、メリットに関してもいまいち理解できていなかった部分がわかった気がしました。 素人の疑問にお付き合いいただき誠に有難うございました。 お二方には本当に感謝させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問