ママのスキンケアのお悩みにおすすめアイテム

PHPで、リクエストをまたいで値を保持する方法を教えてください。というかサーバー起動時に1回処理をし、その情報を使い続ける方法といった方が適切かもしれません。「リクエストをまたいで」といってしまうと、反射的に「セッションに保存」といいたくなると思いますが、そういう話ではありません。


画面上に検索条件でSELECTリストを表示します。この情報を今は、画面表示のたびに毎回DBにアクセスしデータを取得しています。

しかしサーバーが起動している間程度の期間ではめったに変更することはない値なので、リクエストのたびにDBにとりに行くのがあまりにも無駄なので、これをやめたいと思っています。かといって年に何回かは変更があってもおかしくない値なので、そのたびにプログラムを変更するのではなく、あくまでもDBのデータの変更だけで済ませたいと思っています。

つまり、リクエストのたびにDBにとりに行くのではなく、PHPのプログラムファイルにハードコーディングするのでもなく、Webサーバーが起動したときに1回だけDBから読み込み、変数に保持しておき何度も使いまわしたいと思っています。


で、ためしにclassのstatic変数に値を設定してみたのですが、リクエストのたびに値が初期化されてしまいました。$GLOBALSに値を設定してもリクエストのたびに値が初期化されてしまいました。

Javaなどの言語では、当たり前に行う処理ですがPHPで実現する方法が分かりません。

PHPで、リクエストをまたいで値を保持する方法を教えてください。
もしかするとPHPでは、値を保持することはできないのでしょうか?
もしそうだとすると、PHPでは同じ値をDBから何度も取得するケースではどのように対処しているのでしょうか?(DBのキャッシュ機能頼み?そもそもPHPは小規模しか扱わないから気にしない?)

この点について教えてください。
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (5件)

Javaはサーバサードのプログラムは起動しっぱなしなのでstatic変数で保持できますが、PHPはインタプリタなのでアクセスが有る度にプログラムが起動され、処理が終わるとプログラムが終了するので保持ができませんね。

(逆にメモリの解放漏れって事は起きないというメリットもありますが)

DBからの値をキャッシュする方法としては、memcachedとかRedisを使って値を保持させる方法が多いですかね。
私が担当した案件でもmemcachedを使ってキャッシュさせるというのは何度もやってます。
ローカルファイルで持つという方法も有りますが、サーバ台数が増えた時各サーバでキャッシュ内容に差異が出たりすると面倒ですが、memcachedを使ってデータを一元管理すれば管理も楽です。

> そもそもPHPは小規模しか扱わない
かなり大規模なサービスでもPHPは普通に使いますよ。

この回答への補足

>PHPはインタプリタなのでアクセスが有る度にプログラムが起動され、
>処理が終わるとプログラムが終了するので保持ができませんね。

え、ホントかなと思って調べたのですが、
・Javaはシングルプロセス・マルチスレッド
・PHPはマルチプロセス
なのですね。知りませんでした。

ならば、PHPはリクエストがあるたびにプロセスを生成するのでコストが高く、DOS攻撃を食らったときもしくは人気が出て大量アクセスがあったときにCPU使用率が上がりやすく、サーバーが死にやすいのではと心配になりました。

しかしそれはJavaばっかりやっていて、PHPの経験が浅い人の杞憂であり、PHPを普通に使っていれば意外と大丈夫ということなのかもしれませんね。

補足日時:2014/12/04 15:31
    • good
    • 0
この回答へのお礼

なるほど。PHPは言語としては値を保存する機能はないのですね…。セッション管理はどうしているのか、これもファイル保存なのかと思って調べたら、やはりセッション情報もファイルに保存していました。PHPはそういうものなのですね。

言語の基本機能に関する質問のつもりだったので書きませんでしたが、CakePHPを使っています。また「キャッシュ」のつもりではなかったのでそのワードで検索していなかったのですが、「CakePHP キャッシュ」で検索したところ「Cache::read(キー);」「Cache::write(キー, 値);」で値を読み書きできることが分かり、これを使うことにしました。これも仕組みとしては変数(というかキー)ごとにファイルを作成し、そこに値を書き込むという感じでした。

memcachedやRedisは別のアプリケーションとしてインストールが必要なのですね。今使おうとしている公開用のサーバーが、無料で使えるもので制約のあるレンタルサーバーだったので、私には敷居が高かったです。ファイルに保存するキャッシュだと、結局ファイルI/Oが発生することになるので、効果が限定的だと思っていたのですが、メモリキャッシュならJava並みのパフォーマンスが期待できそうですね。

PHPは言語そのものでは値の保存はできない、ファイル保存する仕組みを利用するか、別途キャッシュ用のアプリケーションをインストールするものだということがはっきりと分かりました。

ありがとうございました

お礼日時:2014/12/04 14:57

なるほどねぇ・・・事情はなんとなくわかりました



DBが更新されるのをトリガーにして
所定のファイルに参照される値を書き込んでおけば
php側でインクルードしたりファイルI/Oしてデータを参照したりすればいい気がします

ただ、結局DBへの接続がないだけでファイルを読み込む作業が発生すれば
「無駄」には変わりないような気もするし微妙ですね
    • good
    • 0
この回答へのお礼

ファイルI/Oが何度も発生するのは気になるのですが、
DBにアクセスしまくるよりはいいのでそこはあきらめることにしました。
ありがとうございました

お礼日時:2014/12/04 23:41

>「セッションに保存」といいたくなると思いますが、そういう話ではありません。



というか、まさにセッションに保存する話じゃないの?

この回答への補足

セッションだと、同一人物が同一ブラウザで設定されたセッション生存期間の間にアクセスしたときに限定して値を保存する話ですよね。本質問ではそのWebシステムを使う人はいつでも誰でも同じ値を使いまわし続けたい場合という違いがあります。

そういう違いはありますが、根本的にはPHPの制約で共通の問題を持っているようですね。

補足日時:2014/12/04 15:18
    • good
    • 0
この回答へのお礼

ありがとうございました

お礼日時:2014/12/04 15:00

メモリキャッシュを使う


ファイルにキャッシュして保存しておく
(フォーマットはXMLでもjsonでも好きな方式を利用すればいい)
非RDBに保存しておく

>そもそもPHPは小規模しか扱わないから気にしない?
いや普通にそこそこの大規模案件にも使う。
    • good
    • 0
この回答へのお礼

PHPは言語としては値を保存する機能はないのですね。
基本的な仕組みとしてはファイルに保存するしかないのですね。
ありがとうございました

お礼日時:2014/12/04 14:20

自分も PHP は詳しくない方ですが、PHP は結局インタプリタですから、



1. PHP では問題の情報を格納した変数と、それを記述した PHP ファイルがあるものとしてコーディングする。
2. Web サーバーで実行可能なスクリプト等で、DB にアクセスして 1. のファイルを生成するプログラムを記述する。
3. Web サーバーの起動時(または問題の情報を更新する必要が出てきた時)に 2. のプログラムを実行する。

であなたがお望みのことはできるのではないかなぁと思います。
    • good
    • 0
この回答へのお礼

ええー、PHPファイルを動的に作成するのですか…。
で、ファイルがない場合のみDBにとりにいってファイルを作成、データが変わった際にファイルを削除する運用にする、とすればまぁ一応実現はできますね…。

そうでもしなければ実現できない、PHPの標準機能だけでは対処できないということですかね。

ありがとうございました

お礼日時:2014/12/03 20:33

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q検索時の選択内容を保持する方法

質問失礼致します。

PHPで
・テキスト
・ラジオボタン
・チェックボックス
が複数入り混じった検索システムを作っています。

なんとか形になって検索の形はできたのですが、
必要な項目を検索し結果画面に映った際に
入力したテキスト・ラジオ・チェックボックスの内容が初期化されてしまいます。


検索した結果、テキストの方はインプット時に
<input type="text" name="name" size="50" value="<?= $_POST['name'] ?>" >
とすることで、結果画面にある検索システムの入力内容は保持できたのですが、

・ラジオ および ・チェックボックス の内容の保持を
なんとかまとめて設定することはできないでしょうか?


検索はしましたが、初心者なこともあり検索ワードがいまいち的を得てないのか、
考えている答えになかなかたどり着けておりませんので、
この場を借りて質問の方させていただいた次第でございます。


ご存じの方いらっしゃいましたら、是非ともご教授お願い致します。

Aベストアンサー

HTMLとプログラム部分の切り分けをするためにはなるべく単純な構造がよいでしょう
私の場合こんな処理をしています。
(実際の運用の際にはデータチェックをしたりするのでもう少し複雑になりますが)

<?
//checkbox
if($_REQUEST["test_a"]=="1") $checked["test_a"]=" checked";
if($_REQUEST["test_b"]=="1") $checked["test_b"]=" checked";

//radio
if(isset($_REQUEST["test_c"])) $checked["test_c"][$_REQUEST["test_c"]]=" checked";

//select
if(isset($_REQUEST["test_d"])) $selected["test_d"][$_REQUEST["test_d"]]=" selected";

print <<<eof
<form>
<input type="checkbox" name="test_a" value="1"{$checked["test_a"]}>A
<input type="checkbox" name="test_b" value="1"{$checked["test_b"]}>B
<input type="radio" name="test_c" value="1"{$checked["test_c"][1]}>C-1
<input type="radio" name="test_c" value="2"{$checked["test_c"][2]}>C-2
<input type="radio" name="test_c" value="3"{$checked["test_c"][3]}>C-3
<select name="test_d">
<option value="">---</option>
<option value="1"{$selected["test_d"][1]}>D-1</option>
<option value="2"{$selected["test_d"][2]}>D-2</option>
<option value="3"{$selected["test_d"][3]}>D-3</option>
</select>
<input type="submit" value="go">
</form>
eof;
?>

HTMLとプログラム部分の切り分けをするためにはなるべく単純な構造がよいでしょう
私の場合こんな処理をしています。
(実際の運用の際にはデータチェックをしたりするのでもう少し複雑になりますが)

<?
//checkbox
if($_REQUEST["test_a"]=="1") $checked["test_a"]=" checked";
if($_REQUEST["test_b"]=="1") $checked["test_b"]=" checked";

//radio
if(isset($_REQUEST["test_c"])) $checked["test_c"][$_REQUEST["test_c"]]=" checked";

//select
if(isset($_REQUEST["test_d"])) $selected["test_d"][$_...続きを読む

Qページ移動した場合の、フォームデータの保持

PHP初心者です。

私が作っているPHPのシステムで、ユーザーがフォームデータ入力途中に、他のページに移動すると、「戻る」ボタンなどですぐに戻ってきても、入力したフォームデータが消えてしまいます。

例えば、この「教えてgoo」の「新しい質問をする」のフォームはPHPで生成されていますが、

http://oshiete1.goo.ne.jp/oshiete_new.php3?c=256

途中でちょっと他のページに行っても、(すぐ戻れば?)入力したデータは保持されますよね。

こんなふうにしたいのですが、どうすればよいでしょうか?
「戻る」ボタンで戻ったときに、サーバーから毎回新しいXHTMLをロードしてくるので、入力データがクリアされてしまうのでしょうか?

フォーム入力⇒確認画面⇒「戻る」ボタンで戻るとフォームデータが保持されないということではなく、あくまでフォーム入力中に、ちょっと他のページに行って戻ってくるという設定です。

よろしくお願いします。

Aベストアンサー

原因はセッション関連にありそうですね。
session_cache_limiter()
というのは指定されていますか?
恐らく現状はnocache(ページ内容をキャッシュしない状態)になっているのだと思います。

もし
session_cache_limiter('nocache');
となっていれば、publicもしくはprivateへ変更してみて下さい。
ないようでしたら、session_start()の前に
session_cache_limiter('public');
session_cache_limiter('private');
のどちらかを記述してみて下さい。
publicだと、クライアントマシン、プロキシのどちらもキャッシュを保持しますが、
privateだとクライアントマシンのみキャッシュを保持します。
どちらが良いのかは使い方によると思いますし、
nocacheでないと困る時もありますから。

session_startを削除してしまって良いかどうかは、
他の部分の処理との関連が分からないので何とも言えないです。

一度試してみて下さい。

参考URL:http://jp.php.net/session_cache_limiter

原因はセッション関連にありそうですね。
session_cache_limiter()
というのは指定されていますか?
恐らく現状はnocache(ページ内容をキャッシュしない状態)になっているのだと思います。

もし
session_cache_limiter('nocache');
となっていれば、publicもしくはprivateへ変更してみて下さい。
ないようでしたら、session_start()の前に
session_cache_limiter('public');
session_cache_limiter('private');
のどちらかを記述してみて下さい。
publicだと、クライアントマシン、プロキシのどち...続きを読む

QボタンをクリックでPHP文を実行

ボタンをクリックしたときのみPHP文を実行したいのですが・・・

<input type="button" onClink="<?php~?>">
でいけるかと思ったのですが、
ページ表示時に<?php~?>が実行されてしまい、うまくいきませんでした。

onClink="window.open(test.php)"
という方法以外でお願いします。

Aベストアンサー

AjaxはもともとJavaScriptの機能である非同期通信をつかったもので。Ajaxという言語があるわけではありません

Ajaxを利用するのであれば、JavaScriptのXMLHttpRequestを使って非同期通信できるような実装をしなくてはなりません
簡単にサンプルコードで書けるほど単純なものでもありません

一般的なサーバーサイドスクリプトの動作として、
ボタンを押す->サーバーへリクエストする->サーバーが処理する->クライアントに何かしらの結果を返す(出力する)です
つまり、PHP等のサーバーサイドスクリプトは、遷移させることが大前提で動作します

ですから、ボタンを押してその場でJavaScriptと同じようにPHPが動くなんてことはありえません。
ボタンを押したらサーバーにリクエストする という動作ならば可能です。

つまり
質問で言われているような
onClink="window.open(test.php)"

<form name="f1" action="test.php" method="post">
<input type="submit" name="submit" value="submit" />
</form>
等のような形になります

こういった一般的な方法だと いちいち画面が切り替わったようになってしまうのを嫌って Ajaxでコレと同じことを、画面を切り替えずに行っているだけに過ぎません

AjaxはもともとJavaScriptの機能である非同期通信をつかったもので。Ajaxという言語があるわけではありません

Ajaxを利用するのであれば、JavaScriptのXMLHttpRequestを使って非同期通信できるような実装をしなくてはなりません
簡単にサンプルコードで書けるほど単純なものでもありません

一般的なサーバーサイドスクリプトの動作として、
ボタンを押す->サーバーへリクエストする->サーバーが処理する->クライアントに何かしらの結果を返す(出力する)です
つまり、PHP等のサーバーサイドスクリプトは、...続きを読む

Qphpソース間で値を保持しておける変数は?

aaa.php、bbb.php、ccc.php、・・・・
と、複数のソースファイルが存在します。
その間で、共通に値を保持でき、また、どのソース内でも代入で入れ替えることができる変数ってありますか?
global変数って、同phpファイル内で、function間での保持のみですよね?

ちなみに、使用しているPHP Versionは 4.4.2です。
よろしくお願い致します。

Aベストアンサー

がるです。質問を織り交ぜつつ。
> アクセスするユーザー(2種類)によって、表示するメニューを切り替えてくれというものです。
これはまぁ極めてよくある処理かと思われます。

> しかし、ユーザーを認識する何らかの値が渡されるわけではありません。
これは、依頼者からの希望なのでしょうか? 基本的にはこういう振り分けにはCookie(ないしより望ましい回答としてはPOST メソッド)での、セッションID(或いはセッションIDを含む文字列を暗号化したもの。私はこっちを勧めます)を用いるものなのですが。

> Aユーザーには、index_a.phpをアクセスさせ、Bユーザーには、index_b.phpをアクセスしてさせるということで要望されました。
これは、もし「ユーザBがindex_a.phpを手で入力すればアクセスできてしまう」可能性が高いのですが、それはそれでよいんでしょうか? 必要に応じて、依頼者に確認すべきかと。

> 表示メニューのオン・オフは、config.php内での変数に1か0の値の代入で行っているのですが、config.phpはindex.phpだけでなく、すべてのphpソースの先頭でincludeしているので、2種類のindex.phpを作っても、同じconfig.phpを呼んでしまいます。
まずconfig.phpの作りにもよるんでしょうが。もしかして「ベタで書いてあるからincludeしたらいきなり走る」つくりになってませんか?
まずは関数(ないしより好ましい状態としてはclass)での実装にかえるべきです。
で、例えば

index_a.php の行頭
require_once("config.php");
$conf_obj = new config;
$conf_obj->set_flg(0);
$conf_obj->run();

index_b.php の行頭
require_once("config.php");
$conf_obj = new config;
$conf_obj->set_flg(1);
$conf_obj->run();

という風におこなえば、十分に可能だと思うのですが。

ちなみに#4さんの回答にある「多言語からのセッション情報の引継ぎ」ですが。
基本的にセッションは、ほとんどCookieで扱っているのが通例です。ただどういった実装をするかは色々とありますので、そのあたりは上位のプログラムの仕様書をチェックするなりすべきかと思われます。

最後に。個人的見解で恐縮ですが。各種セキュリティ上の脆弱性その他が指摘されているので、PHP標準のセッション関数はあまりお勧めできません。
ご利用は自己責任の下に計画的に、って感じでしょうか。

がるです。質問を織り交ぜつつ。
> アクセスするユーザー(2種類)によって、表示するメニューを切り替えてくれというものです。
これはまぁ極めてよくある処理かと思われます。

> しかし、ユーザーを認識する何らかの値が渡されるわけではありません。
これは、依頼者からの希望なのでしょうか? 基本的にはこういう振り分けにはCookie(ないしより望ましい回答としてはPOST メソッド)での、セッションID(或いはセッションIDを含む文字列を暗号化したもの。私はこっちを勧めます)を用いるものなのですが。
...続きを読む

Qセッションを使わずに遷移先画面に変数の値を渡すには?

<input type="hidden" value="myID">みたいな隠しフォームで
行く先々の画面に値をPOSTで渡してきました。

他方、 header("Location: mypage.php")
のように画面を遷移させる場合、遷移先の画面に
$_POST["myID"]のように値を渡すことはできませんか?

この場合session_start();を使って、$_SESSION["myID"]のように値を
渡す(保持する)のが王道なのでしょうか?
セッションと聞くと何かとトラブルになりやすそうなイメージがあり、
できれば使いたくないのです。

具体的に説明しますと、前にこの掲示板で教えていただいた、次の例を使っています。
入力文字チェックをかけたいのでPHP_SELFで同じ画面を呼び出して、
問題なければmypage.phpにリダイレクトさせる枠組みですが、
header("Location: mypage.php");という風に遷移した場合は、
遷移先のmypage.phpでは、$_POST["myID"]はPOSTされてきませんよね
(値を受け取れませんよね)??

妙案あればご教示下さい。


<?php
if ($_POST["reg"] == "" ) $errFlg = true;
if (!$errFlg) {
    if (strlen($_POST["myName"]) > 30) {
      $errFlg = true;
      $errStr["myName"] = "30字以下";
    }
  $errMsg = "エラー!!";
}
if ($errFlg) {
?>
<html>
  <body>
    <form method="post" action="<?php $_SERVER["PHP_SELF"] ?>">
      氏名 <input type="text" name="myName" value="<?= $_POST["myName"] ?>"><?= $errStr["myName"] ?>
      <input type="hidden" name="myID" value="<?= $_POST["myID"] ?>">
    </form>
    <input type="submit" name="reg" value="登録">
  </body>
</html>
<?php
} else {
    $sql = "update mytable set myID = 'xxxx'";
    $rst = mysql_query($sql, $con);
    header("Location: mypage.php");
}
?>

<input type="hidden" value="myID">みたいな隠しフォームで
行く先々の画面に値をPOSTで渡してきました。

他方、 header("Location: mypage.php")
のように画面を遷移させる場合、遷移先の画面に
$_POST["myID"]のように値を渡すことはできませんか?

この場合session_start();を使って、$_SESSION["myID"]のように値を
渡す(保持する)のが王道なのでしょうか?
セッションと聞くと何かとトラブルになりやすそうなイメージがあり、
できれば使いたくないのです。

具体的に説明しますと、前にこ...続きを読む

Aベストアンサー

結局「sessionの真似事」を自前でするようなことになりそうです。

・ランダムなファイル名を作成して、そのファイルにアドレスを書き込む。
・GETでファイル名を渡す。
・ファイル名を元にそのファイルからアドレスを取り出す。
・ファイルを削除する

何らかのトラブルで残ってしまったファイルは「一定時間以上経過したファイルは定期的に削除」というGCの真似事までしないといけなくなりますけど。

hidden(POST)で持ち回るということからも「セキュリティ」はまったく考慮しなくていいシステムのようなので、そうであれば「復号可能な暗号化」という手もありかもしれません。



>セッションと聞くと何かとトラブルになりやすそうなイメージがあり、
>できれば使いたくないのです。

普通に使いますけどねぇ・・。

Qsyntax error, unexpected '}' というエラーの対処法

PHPを習い始めて三日目になるのですがParse error: syntax error, unexpected '}' in C:\Program Files\Apache Group\Apache2\htdocs\****\****\game.php on line 33
というエラーがでるのですが33行目前後のどこをなおせばいいのでしょうか?
・game.php
<html>
<head>
<title>数当てゲーム</title>
</head>
<body>
<h1 style="background:#cccccc">数当てゲーム</h1>
<form method="POST" action="game.php">
1~100までの数を入力してください
<input type="text" name="answer" size="5" maxlength="3" />
<input type="sbumit" value=回答" />
</form>
<hr />
<?php
session_start();
if(is_null($_SESSION['answer'])){
mt_stand(microtime()*1000000);
$_SESSION['answer']=mt_rand(1,100);
$_SESSION['game_cnt']=0;
}
if($_POST['answer']!=""){
$_SESSION['game_cnt']++;
if($_session['answer']==$_POST['answer']){
print("おめでとうございます".
$_SESSION['game_cnt']."回で正解しました!");
session_destroy();
}else{
if($_SESSION['answer']>$_POST['answer']){
print("もう少し大きいです。");
}else
print("もう少し小さいです。");
}
}
}
?>
</body>
</html>
それとこの間違えたところをなおしたあとはいつもコンピュータを再起動しないと修正したところが適用されないのですがほかに方法はないですか?基本的な質問ですいません。

PHPを習い始めて三日目になるのですがParse error: syntax error, unexpected '}' in C:\Program Files\Apache Group\Apache2\htdocs\****\****\game.php on line 33
というエラーがでるのですが33行目前後のどこをなおせばいいのでしょうか?
・game.php
<html>
<head>
<title>数当てゲーム</title>
</head>
<body>
<h1 style="background:#cccccc">数当てゲーム</h1>
<form method="POST" action="game.php">
1~100までの数を入力してください
<input type="text" name="answer" size="5" max...続きを読む

Aベストアンサー

print("もう少し大きいです。");
}else
print("もう少し小さいです。");
のelseの後に{がないようですが、大丈夫でしょうか?

QPHPの関数実行

<?php
function disp(){
echo "hello world";
}
?>

<form>
<input type="text">
<input type="button" onclick="<?php disp() ?>">
</form>

といったソースを書いてみたのですが、ボタンを押してみるのですが作動しません。
どこか間違えているのでしょうか、それとも作動しないのでしょうか・・・。
当方としては、formのinputボタンを押したらPHPの関数が実行させるようにしたいのですが・・・。
どなたかご助言をお願いします。

Aベストアンサー

ウソつきました
出来ましたー

<?php

if($_REQUEST[submit] == TRUE){
function disp(){
echo "hello world";
}
}

else{
function disp(){
echo "";
}
}

?>

<form method="post" action="">
<input type="text" value="<?php disp(); ?>">
<input name="submit" type="submit"value="押せ">
</form>

QPHP ボタンが押されたら処理を実行する

PHPプログラミングをしています。
「はい」というボタンが押されたらこの処理を行い、
「いいえ」というボタンが押されたらこの処理を行う
ということはどうすれば実装できるのでしょうか?

Aベストアンサー

どういう環境下で作っておられるのかが全然わかりませんが、
PHPというこですので、Webベースのフォームですよね。

たとえば、「はい」ボタンと「いいえ」ボタンをそれぞれフォームのSubmitにしておいて、
POST先のフォームで処理を分ければどうでしょうか。

送信元
<form name="Hai" method="POST" action="hoge.php">
<input type="hidden" name="answer" value="1">
<input type="submit" value="はい">
</form>

<form name="Hai" method="POST" action="hoge.php">
<input type="hidden" name="answer" value="0">
<input type="submit" value="いいえ">
</form>


送信先
$answer = $_POST["answer"];

if($answer == 1){
// 「はい」の時の処理
}else{
// 「いいえ」の時の処理
}


ちなみに、自分から自分へPOSTすればPHPスクリプトも2つに分けずにできると思います。
また、POSTじゃなくGETでも同様のことはできると思います。

どういう環境下で作っておられるのかが全然わかりませんが、
PHPというこですので、Webベースのフォームですよね。

たとえば、「はい」ボタンと「いいえ」ボタンをそれぞれフォームのSubmitにしておいて、
POST先のフォームで処理を分ければどうでしょうか。

送信元
<form name="Hai" method="POST" action="hoge.php">
<input type="hidden" name="answer" value="1">
<input type="submit" value="はい">
</form>

<form name="Hai" method="POST" action="hoge.php">
<input type="hidden" name="answer" ...続きを読む

QFORMで送信ボタンと戻るボタンを2つつけてそれぞれ遷移先を変えたい

  
以下のような画面を作りたいのですが↓

--------------------------------------------------------------------------------
● a.php (ユーザ情報入力画面) ※フォームに入力する画面
 
 <FORM method="POST" action="b.php">
  <INPUT type="text" name="mail">
  <INPUT type="submit" name="submit" value="確認">
 </FORM>

● b.php (ユーザ情報入力確認画面)※フォームに入力された値を表示する画面

 <FORM method="POST" action="c.php">
  <!-- ここには、フォームに入力された値を表示する -->
  <INPUT type="submit" name="submit" value="登録"> // c.php に遷移する
  <INPUT type="submit" name="submit" value="戻る"> // a.php に戻る
 </FORM>

● c.php (完了画面)
--------------------------------------------------------------------------------
b.php について質問なのですが、
b.phpにおいて、登録ボタンと戻るボタンを2つつけて、
それぞれ遷移先を変えたいのですが、どうすればいいんでしょうか・・・?
<FORM method="POST" action="c.php">と書いてしまうと、
戻るボタンを押しても戻らずに、c.phpに遷移してしまいますよね??
こういう場合ってJavaScriptとかで遷移先を指定するんですか・・?
もしそうでしたら、JavaScriptがよくわからないので
できればサンプルコード示していただけると助かります・・・。
  

  
以下のような画面を作りたいのですが↓

--------------------------------------------------------------------------------
● a.php (ユーザ情報入力画面) ※フォームに入力する画面
 
 <FORM method="POST" action="b.php">
  <INPUT type="text" name="mail">
  <INPUT type="submit" name="submit" value="確認">
 </FORM>

● b.php (ユーザ情報入力確認画面)※フォームに入力された値を表示する画面

 <FORM method="POST" action="c.php">
  <!-- ここには、フォームに入...続きを読む

Aベストアンサー

はじめまして。

<INPUT type="submit" name="submit" value="登録" onClick="form.action='c.php';return true">
<INPUT type="submit" name="submit" value="戻る" onClick="form.action='a.php';return true">

でいいと思います。(実際、このコードで使っています)
値を渡すには、FORM内にhiddenで、値を設定しておいて、methodをPOSTに設定しておけば、渡せます。

Qリンクをクリックした時にformからPOST送信したい。

HTML、PHP、JavaScript等でサイトを作っているのですが・・・。

【実現出来ている例】
<form name="form1" method="post" action="Next.php" onSubmit="return InputCheck()">
 <input type="submit" value="送信">
</form>
 submitボタンを一つ置いて、それがクリックされた場合に
formの内容をPOSTで送信する。

【実現したい例】
<form name="form1 method="post">
 <a href="Next.php" onClick="???">???</a>
</form>
 formの中のリンクをクリックされた場合に、formの内容を
POSTで送信したいのですが、その実現方法がわかりません。
GETで送るという手もあり得ますが、今回はどうしてもPOST
したいのですが。

Aベストアンサー

<form name="form1" method="post" action="Next.php">
<a href="#" onClick="document.form1.submit();">???</a>
</form>

onclick内の対象がform1としてあてているので、
アンカータグは別にform内に記述しなくても大丈夫です

form内にhidden等でnameとvalueを持ったパラメータがあればそれも送られます

アンカータグから動的にvalueを変更したい場合は、
document.form1.hogename.value = 'hoge';
等をsubmit()の前に行えば可能です

ただしform内に
<input type="hidden" name="hogename" value="">
を記述する等、変更先パラメータの元を用意する必要がありますのでご注意下さい


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング