アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつも勉強させていただいております。

初歩的な質問になるかもしれませんが、回答いただければ幸いです。

現在PHPの学習をしております。


phpファイルに記載された命令がどのような順に実行されるのか、ということにたいして私なりの理解が正しいかどうか確認していただきたいのと、ソースについての質問をさせていただきたく思います。


以下、動作確認済みのサンプルソースです。



<html>
<head>
<title>
画像を保存
</title>
</head>
<body>
<?php
if(@$_POST["text1"])
{
$width = 300;
$height = 200;
$fname = $_POST["text1"];
$img = imagecreate($width, $height);
imagecolorallocate($img, 0, 255, 0);

if(imagepng($img,$fname))
{
echo "<p><a href=\"$fname\">作成されたファイル</a>";
}
}
?>
<form method="POST" action="<?php echo $_SERVER["PHP_SELF"]?>">
<table>
<tr>
<td>
<input type="text" name="text1" value="test.png" >
</td>
<td>
<input type="submit" value="作成" name="sub1" >
</td>
</tr>
</table>
</form>
</body>
</html>

”作成”ボタンを押すと、text.pngという画像ファイルをこのソースがあるフォルダ内に保存し、というだけの処理をするものです。







・上記サンプルにおける、記述された命令の実行順について

(1)
<?php で囲まれている部分が動作する。

→最初は$_POSTに何も入っていないので、if条件は偽となり、何も動作しない。

(2)
<form>から、</form>で囲まれている部分が動作する。
テキスト入力エリアや作成ボタンなどのイメージが完成する

PHP_SELFを$_SERVERに指定しているので、この情報をこのファイル内の、<?php~で囲まれているところに渡す。


ここまでで画面表示が完了する。さらに作成ボタンを押したときの動作を続ける

(3)
<input type="text" name="text1" value="test.png" >
初期値として画面に表示したい値をvalueに指定する。

<input type="submit" value="作成" name="sub1" >
ボタンに表示したい文字をvalueに指定する。

作成ボタンを押すことで、"text1"という名前とヒモづいたテキストエリアに書かれた情報がPOSTにより渡される。
このサンプルではtextひとつしかないが、他のラジオボタンなど全ての情報が作成ボタンを押すことにより、渡される。
これにより、$_POSTへnameに該当するものを指定すると、それにヒモづいた情報が取得できるようになる。

作成ボタンを押した後は、(1)に戻り、text1にヒモづく情報が見つかることにより、if条件内の処理が動作する。
この場合は「作成されたファイル」という文字がでてくる。

さらに(2)が動作し、「作成されたファイル」という文字の下にテキストエリアや作成ボタンが表示される。





質問
<form>内にあるactionへの設定ですが、"<?php echo $_SERVER["PHP_SELF"]?>"は決まり文句のようなもので、PHP_SELFのみ期待する動作に応じて変化する、という考え方でいいでしょうか?

この記述は使用している参考書にあったものですが、googleなどで検索するとaction=ファイル名、となっているものもありました。なぜこのファイルではこのような書き方をしていて、他のものではファイル名をactionに設定しているのでしょうか?
actionへ指定するものはどういったものを指定するものなのでしょうか?

actionの使い方がよくわかりません。


お手数ですが、ご回答いただける方、よろしくお願いします。

A 回答 (8件)

>サーバー上で送られたクッキーの情報をもとに過去訪れたかどうかを判断し、リンクの色をどうするか決めた上で、その色情報も含めたHTML情報をブラウザへ送信し、


これは違いますよ。
これは基本的にブラウザの機能です。
どのURLにアクセスしたかを予めブラウザは記憶しています。
リンクタグ内のURLから既にアクセスしたページかどうかを判断して、”ブラウザ”が色を変えています。
基本的に、HTML上ではアクセスした人が既読だろうが未読だろうが同じタグを使います。

ページ作成者側がCSSを使って、その色を変えたり、未読リンクの色と同じにすることはできます。

また、CSSを利用しないで、操作性の観点から、ページにtime情報などのクエリーをつけて、既読を未読にさせることはあります。
たとえばスレッド式の掲示板などで、中身が変わった場合などでも既読の色のままだと更新されたかわからない場合、
bbs.php?thread=123&time=1307769181
としていて、スレッド内容が更新されたら
bbs.php?thread=123&time=1307770000
としたりすることでまだ見ていない。
もしくは最新情報を見ていないと判断させることができます。
いくら更新されても
bbs.php?thread=123
だとブラウザのキャッシュがなくなるまで既読のままになってしまいますので。

余談も入りましたが、既読・未読はWEBサーバー上が決定するわけではなく、ブラウザ上で決定する。
その機能を使わせないように裏操作させることも可能。
ということです。

私への質問ではありませんが、ファイル一覧ページが表示されるのは、
A→A→Aと移動した場合、同じURLである為、リンク移動していないとブラウザが判断しているからだと思います。
Aにアクセスする際に/xampp/からAへアクセスした場合には、A自体が移動を一切していないとブラウザが判断し、前のページと判断した「/xampp/」に”戻った”ということではないでしょうか。

たとえば、

<html>
<head>
<title>
テスト
</title>
</head>
<body>
<?php
if(!$_GET["cnt"]){$_GET["cnt"] = 0;}
echo $_GET["cnt"]; ?>回目の訪問です。<br>
<a href="<?php echo $_SERVER["PHP_SELF"]."?cnt=".($_GET["cnt"] + 1); ?>"><?php echo ($_GET["cnt"] + 1); ?>回目の訪問をする</a>
</body>
</html>

とした場合には、毎回アクセスするURLは異なりますから、戻るを押してもそのような状況にはならないと思います。
    • good
    • 0
この回答へのお礼

mikemike7様

未読、既読はブラウザ側の機能だったんですね。勘違いしておりました。また、更新の際の未読、既読の処理についても教えて頂きありがとうございます。CSSは初めて聞いた単語でしたが、更新によるリンクの色の変え方の考え方がわかり、勉強になりました。

ページの移動についてもはっきりと解りました。使っていたブラウザではURLの変化によってページの移動をしたかしないか判断していたため、私が期待した動作にならなかったんですね。

たびたび回答していただきありがとうございました!

おかげさまでかなり理解が深まりました。

お礼日時:2011/06/12 10:05

>もし良ければ追加で質問させて下さい。


>質問(1)
>ボタンを押したときの飛ぶ流れとしては、「input type="submit」で出来たボタンを押すことによりactionで指定したファイルへ飛び、

POSTするパラメータをセットして飛ぶ、だけ。そこから先は「別の話」なので、ここで、一旦、今までの処理の流れは忘れよう。

>そのファイルの<?php~で囲まれた中で、$_POST[]から情報を得て処理を行う、と考えて良いでしょうか?

飛ばれて来たら、パラメータが設定済みなので、$_POST[]を見ると、何かが入ってる。

>他にもactionで指定したファイルへ飛ぶ、トリガーのようなものはありますか?

トリガーは基本的にボタンだけ。

>(2)
><form>で囲まれている部分は動作、というと語弊がある。ただ表示されるだけである。
>また、画面表示の完了は、</form>までいって初めて表示されると考える。

そんな感じ。

>(3)
>作成ボタンを押すことにより、自分自身にページジャンプして新たに実行されるが、最初と違って、このソースでは$_POSTに>値が入っているので、それを使った動作ができる。これが1回目と2回目の動作の違い。
>1回目、2回目以降の動作としての違いは$_POSTの値によって分岐させることができること。

だいたい合ってるけど、厳密には違う。1回目でも、$_POSTの中に値が入っている事がある(URLの末尾にパラメータを書かれた場合に)

>また、(1)に戻る、という表現は誤解を生む。戻る、のではなく、まったく別の新たなページに行く、と考えるようにする。
>(だからブラウザで戻ることができる)

そゆこと。

>actionの使い方について
>あくまでもボタンが押された時の飛び先と考える。

です。

>質問(2)
>以下のコードを試しに追加してみようと思ったのですが、actionにどの様に追加したらいいのか、教えていただけるでしょうか?

><a href="<?php echo $_SERVER["PHP_SELF"]?>">自分に飛ぶ</a>

以下のようなページを用意してみよう。

<html>
<head>
<title>
テスト
</title>
</head>
<body>
<a href="<?php echo $_SERVER["PHP_SELF"]?>">自分に飛ぶ</a>
</body>
</html>
    • good
    • 0
この回答へのお礼

chie65535様

たびたび回答していただき、ありがとうございます。

質問(1)で言っていることは、chie65535様に質問後に他の方からの回答を見て私の検討違いの理解であるということが解りました。

飛んだらもう、そこで流れは一旦切れて、新しいファイルにて、使う使わないは別として設定されたパラメータを元にサーバー上でPHPによる処理を行い、HTMLとしての情報をブラウザに送信する、ということですね。

また、最初から$_POSTに値が入っている事がある、ということにも気をつけます。



たびたび申し訳ないのですが、もう一点だけ質問させて下さい。



教えて頂いたソースを元に、画面を表示させてみました。

私の事前の予想では、例えば

A→B→C

とページ移動したとき、戻るボタンを押すごとに、

C→B→A

と移動するするように、このソースでも

A→A→A

とページ移動する(自分に飛ぶを押す)と、戻るボタンを押すごとに

A→A→A

とページ移動すると思っておりました。


しかし、何回「自分に飛ぶ」ボタンを押しても、一回”戻る”だけで戻れてしまいます。

どこに戻るのかというと、xampp環境での

Index of /xampp/フォルダ  (フォルダにあるファイル一覧が表示されるページ。教えて頂いたソースはこのフォルダの中にあります)

と表示されるページのことを言っております。

このページにフォルダ内にあるファイル全てがリンクとして表示されており、そこから教えて頂いたソースに移動し、そのなかで「自分に飛ぶ」ボタンを何回も押して試しております。

最初の質問からかけ離れているのは重々承知ですが、なぜ何回も「自分に飛ぶ」ボタンを押したにも関わらず、一度「戻る」だけでIndex ofの画面に戻れるのでしょうか?

もしよろしければ教えていただけるでしょうか?

お礼日時:2011/06/11 04:42

>もしよろしければ以下の認識で合っているか、確認していただければ幸いです。


そんな感じじゃないでしょうか。

>ブラウザからサーバーへの要求を投げるボタンのようなものが、他にもあるのかな
他にもありますよ。
今回はformで例にしましたが、リンクタグ(A)でも条件分岐はできます。

<form action="form.php" method="get">
<input type="text" name="page" value="">
<input type="submit" value="送信">
</form>

というフォームがあって、フォームに1を入力して送信したページは、
<a href="form.php?page=1">ページ1</a>
と同じ結果になります。

Googleなどで検索した際に、次のページの結果はフォームではなく、リンクをクリックしますよね?
この辺は、提供側が何をさせたいか。
どうしたら効率が良いかなどによって、
実装方法は変わっていきます。

他にもクッキーを利用すると、情報はサーバーに送られます。

普通にWEBページへアクセスした際、ブラウザは何も情報を出していないわけではありません。
自分IPアドレス、ホスト名、ユーザーエージェント名、クッキーなどいろいろな情報を送っています。

IPアドレスやホスト名、ユーザーエージェントなどの情報により、提供者が携帯電話用とPC用のページを振り分けたりもできるわけです。

まあ、やる気があるなら、まずは簡単な掲示板でも作成してみれば、おおよその流れはわかるのではないでしょうか。
    • good
    • 0
この回答へのお礼

mikemike7様

確認していただき、ありがとうございました。

自分が最初に想像していた動作が全然違うものでした。

PHPではブラウザからのアクセスに対しサーバー上でPHPソースを処理し、HTML情報としてブラウザに渡してブラウザが表示する、のですね。

ブラウザからサーバーへ要求を投げることができる、リンクタグについても勉強していきます。

また、サーバーへ送る情報としてクッキーやIPアドレスなどについて教えていただき、ありがとうございます。
例えば、グーグルの検索を実行したとき、過去に訪れたページのリンクの色が違うのは、サーバー上で送られたクッキーの情報をもとに過去訪れたかどうかを判断し、リンクの色をどうするか決めた上で、その色情報も含めたHTML情報をブラウザへ送信し、ブラウザがそれを表示する。サーバーからその情報を送る際、どこに送るのか等の情報も必要なため、IPアドレス等も送る必要がある、ということですね。

掲示板を作ることで流れがより解るのであれば、是非作りたいと思います。

たびたび回答いただき、ありがとうございます。

お礼日時:2011/06/11 04:11

>「input type="submit」で出来たボタンを押すことによりactionで指定したファイルが実行され


まあ、そうなんですが、その場で実行されるわけではなく、
通常のHTMLを使ったFORMではactionで指定したファイルに
移動してアクションを起こします。

<form action="form.php" method="get">
<input type="text" name="email" value="">
<input type="submit" value="実行">
</form>

とFORMを記載した場合には、アクセスしたユーザーがブラウザ上で実行ボタンを押したら、まずアクセスしたユーザーはform.phpに移動して、form.phpからの結果を待ちます。
form.php内に<?php ~ ?>と記載している場合には、
ここからここまでがPHPで実行する箇所ですよ。と指令です。
そこに書かれている内容にそってサーバー上で処理が行われます。
処理が完了すれば、サーバーがHTMLなどで結果を出力しアクセスしたユーザーに渡します。
この時点でアクションは終了です。

>他にもactionで指定したファイルを実行させる、トリガーのようなものはありますか?
どういったものを目的としているのでしょう。
サーバー上で?
もしくはユーザーのアクションで?

実行させるタイミングなどは、PHP側では制御できません。
たとえば、フォーム値を読み取ってPHPを経由せずにエラー告知などをしたい場合には、JavaScriptなどで処理します。
エラーがある場合には、エラー告知をし、フォームを送信させなくしたりできます。
JavaScriptはPHPのようにサーバー上で起動するものではなく、ブラウザ上で起動するプログラムですから、
一般的な通信を行わないJavaScriptなら、画面遷移をしない(PHPを呼び出さない)でブラウザにアクションを起こさせることは可能です。

また、通信を行うJavaScriptの場合では、画面遷移をしないでサーバーと通信を行い、アクションを変えることも可能です。
たとえば、ユーザーIDを登録するとします。
そのIDはユニークなもので、既に使われているかどうかはサーバー上でしかわかりません。
この場合、通常ならサーバーのプログラムにフォームなどを使ってアクセス(移動)し、そこで判定ということになりますが、JavaScriptによる通信で処理をさせる場合は、表示しているページ上でJavaScriptと連携(通信)して、IDが使われていないかチェック。
使われていれば、警告してフォームを起動させない。
使われていなければ、フォームを送信。
ということもできます。
この作業はユーザーの目に見えないところで行われます。

とりあえずは、いろいろ調べながら試してみるのが一番ですね。
知識がないと試せないし、知識だけあっても試さないとわからないことも多いと思いますので。
    • good
    • 0
この回答へのお礼

mikemike7様

もしよろしければ以下の認識で合っているか、確認していただければ幸いです。


ボタンを押した後の動作では、ブラウザがactionで指定したファイルは何かという情報とinputされた情報をサーバーに伝え、サーバー上で処理(この例だと、if(@$_POST["text1"])により、「作成されたファイル」というリンクを出すか出さないか等)し、ブラウザには表示するHTML情報を渡し、ブラウザ上では表示するだけで処理はしない、ということですね。

actionで指定したファイルを実行させるトリガーという表現を使ったのは、ブラウザからサーバーへの要求を投げるボタンのようなものが、他にもあるのかな、と思い質問させていただきました。こちら、興味本位で聞いたものでしたので、私の方で学習を進めていきます。

実行タイミングはPHP側では制御できない、というのは実行タイミング(ボタンを押す)のはユーザーがブラウザで行うものであるから、解らないという認識で合っているでしょうか?


JavaScriptについての学習も平行して行っていますので、そちらの中でJavaScriptの知識も深めていきたいと思います。

お礼日時:2011/06/10 14:41

> ・上記サンプルにおける、記述された命令の実行順について



???

1. ブラウザなどがページを要求する。
2. ウェブサーバがページを送信する
3. ブラウザがサーバから送られ受信したデータを解析・処理する。

(2)は1の処理では単にページのデータ(htmlのfrom要素)が作られ送られるだけ。
(2)のボタンを押したときというのはブラウザ側の動作で多分次のページ要求をするだけ。
※要するに連続した命令の実行順というより全く別の処理。

質問読むと全くサーバの動作とクライアント(ブラウザ側)の動作の区別が全くできてない様に感じた。


まず、ブラウザでhtmlソースを見てウェブサーバがphpからどんなhtmlソースを生成・送信しているか確認して見ましょう。
そして、ブラウザの気持ちになって、ボタン押したらどんなページ要求を行なうか考えてみましょう。
    • good
    • 0
この回答へのお礼

saijyo_739様

おっしゃる通りサーバの動作とクライアントの動作に関する勉強をしないでPHPに学習をしております。

なるべく簡単そうなものから順に学習していけばわかってくるかと思ったのですが、そうはいかず、今回質問させていただきました。

フローと言ったのは、C言語での動作のように、PHPも上から順にフローのように流れて行くものをイメージしていたためです。

しかし、PHPではこのサンプルソースのようにform部分と、php部分が組み合わさっております。これらはいったいどのようなフローで実行されているのかを教えて頂きたく今回質問させていただきました。

教えて頂いたように、ブラウザの要求、サーバーの応答、それに対してブラウザが応答する、という流れが解り、非常に勉強になりました。



もし良ければ質問させて下さい。

この例ですと、1に該当するのがブラウザでPHPファイルにアクセスこと、2に該当するのがサーバーが1で求められたページをブラウザへ送信すること、3に該当するのがブラウザが2で受け取ったページを表示されること、と考えて認識あってるでしょうか?

また、ボタンを押した後は、1に該当するのがPOSTにより情報をサーバーへ渡し、actionで指定されたファイルを要求すること、2に該当するのがサーバーが1で求められたそのページをブラウザへ送信すること、3に該当するのがブラウザが2で受け取ったページを表示させること、と考えて認識あってるでしょうか?

宜しければ教えて下さい。

お礼日時:2011/06/10 14:22

引数「PHP_SELF」は「現在実行中のphpスクリプトのファイル名」を示す。

簡単に言うと「自分自身のファイル名」だ。

従ってactionパラメータに「"<?php echo $_SERVER["PHP_SELF"]?>"」を指定すると「自分自身のファイル名」を指定する事になる。

つまり「actionパラメータにファイル名を指定している」のだ。

で、formタグは「ボタンを押すと、actionパラメータで指定されたページに飛ぶ」ようになってるから、ボタンを押すと自分自身に飛んで、自分自身が新しいページとして開かれる。

>(2)
><form>から、</form>で囲まれている部分が動作する。

動作なんかしない。ボタンやテキストボックスなど、inputタグで指示された物が表示されるだけ。

>テキスト入力エリアや作成ボタンなどのイメージが完成する

これは合ってる。だけど

>PHP_SELFを$_SERVERに指定しているので、この情報をこのファイル内の、<?php~で囲まれているところに渡す。

などと言う事はしない。

ボタンを押さない限り、formタグは何もしない。

>ここまでで画面表示が完了する。さらに作成ボタンを押したときの動作を続ける

ここから先は作成ボタンを押したときの動作ではない。なので、まだ画面表示は完了してない。

>(3)
><input type="text" name="text1" value="test.png" >
>初期値として画面に表示したい値をvalueに指定する。
><input type="submit" value="作成" name="sub1" >
>ボタンに表示したい文字をvalueに指定する。

この時点で、初期表示が決まる。決まるだけで、表示は行われない。

で、その後、</form>が現れた時点で、初めて、formタグの中身の表示が行われる。

表示が終わってしまうと、ユーザーがボタンを押さない限り、何も起きない。あくまでも「表示されるだけ」で終わり。

>作成ボタンを押すことで、"text1"という名前とヒモづいたテキストエリアに書かれた情報がPOSTにより渡される。
>このサンプルではtextひとつしかないが、他のラジオボタンなど全ての情報が作成ボタンを押すことにより、渡される。
>これにより、$_POSTへnameに該当するものを指定すると、それにヒモづいた情報が取得できるようになる。

作成ボタンを押すと、formタグにより、自分自身にページジャンプして「ページ内容が新たに実行される」ので、今までの自分自身の動作は、一切無関係。

「新たに飛んできた自分」には、呼び出し元の自分から「_POSTに、inputタグの中身が渡されて来ている」ので、それを使って「新規に開かれたページとして処理する」だけ。

>作成ボタンを押した後は、(1)に戻り、text1にヒモづく情報が見つかることにより、if条件内の処理が動作する。

(1)に戻ったりなんかしない。

「ボタン押したら、actionで指定した所に飛んでしまい、戻ってこない」のだから、何も起きないし、戻って来たりもしない。

>この場合は「作成されたファイル」という文字がでてくる。
>さらに(2)が動作し、「作成されたファイル」という文字の下にテキストエリアや作成ボタンが表示される。

こいつらが出てきちゃうのは「新たに自分自身に飛んで、自分自身が再び開かれたから」であって「最初の自分」が出してる訳じゃない。

>actionへ指定するものはどういったものを指定するものなのでしょうか?

「ボタンが押された時に飛ぶ、飛び先のファイル名」を指定する。

そのファイルがphpで書かれてるなら「action="hogehoge.php"」になるし、自分自身なら「action="<?php echo $_SERVER["PHP_SELF"]?>"」になるし、perlで書かれてるなら「action="hoehoe.pl"」になるし、exe形式の実行ファイルなら「action="boeboe.exe"」になるし、htmlで書かれてるなら「action="nextpage.html"」になる。

>actionの使い方がよくわかりません。

あくまでも「ボタンが押された時に飛ぶ、飛び先のファイル名」を指定するだけ。

今回は「ファイル名の指定部分がphpで記述されてて、自分自身のファイル名が返ってくるphpになってただけ」であって「ファイル名を指定している」のは違わない。

「ボタン押した時に飛ぶ、飛び先ページ」を指定しているから、ボタンが押されたら、そこに飛ぶ。

飛んだら「ブラウザがそれを実行する」ので「ボタン押した時に実行したい物」と考えても間違いじゃない。

なお、actionパラメータに書く物は、<a>タグのhrefパラメータに書く物と一緒。

試しに

<a href="<?php echo $_SERVER["PHP_SELF"]?>">自分に飛ぶ</a>

って書いてみよう。「自分に飛ぶ」と言うリンクが出て来て、押せば自分自身に飛ぶ(飛んだあとは、ブラウザの「戻る」で戻れる)

formタグのactionパラメータが「押したときに飛ぶ、飛び先を指定する」のと同様に、aタグのhrefパラメータも「リンク踏んだときに飛ぶ、飛び先を指定する」のだ。

aタグのhrefパラメータも「ファイル名(飛び先)を指定する」になってるでしょ?それと一緒。
    • good
    • 0
この回答へのお礼

chie65535様

長文でのご回答、ありがとうございます。

以下、私の認識ですが、違っていたらご指摘いただけるでしょうか?
また、以下に質問も書かせていただきました。よろしければ教えてください。

(1)
actionパラメータにファイル名を指定し、それがボタンを押したときの飛び先になる。

mikemike7様へも同様の質問をしているので恐縮ですが、もし良ければ追加で質問させて下さい。

質問(1)
ボタンを押したときの飛ぶ流れとしては、「input type="submit」で出来たボタンを押すことによりactionで指定したファイルへ飛び、そのファイルの<?php~で囲まれた中で、$_POST[]から情報を得て処理を行う、と考えて良いでしょうか?
他にもactionで指定したファイルへ飛ぶ、トリガーのようなものはありますか?


(2)
<form>で囲まれている部分は動作、というと語弊がある。ただ表示されるだけである。
また、画面表示の完了は、</form>までいって初めて表示されると考える。

(3)
作成ボタンを押すことにより、自分自身にページジャンプして新たに実行されるが、最初と違って、このソースでは$_POSTに値が入っているので、それを使った動作ができる。これが1回目と2回目の動作の違い。
1回目、2回目以降の動作としての違いは$_POSTの値によって分岐させることができること。

また、(1)に戻る、という表現は誤解を生む。戻る、のではなく、まったく別の新たなページに行く、と考えるようにする。
(だからブラウザで戻ることができる)



actionの使い方について
あくまでもボタンが押された時の飛び先と考える。


質問(2)
以下のコードを試しに追加してみようと思ったのですが、actionにどの様に追加したらいいのか、教えていただけるでしょうか?

<a href="<?php echo $_SERVER["PHP_SELF"]?>">自分に飛ぶ</a>

action=の後に単純に追加するのかと思ったのですが、どうやらうまく動作してくれません。
よろしければ教えてください。

お礼日時:2011/06/10 10:01

余談ですが・・・


PHP_SELFは昔はやりましたが、今はセキュリティの絡みで敬遠されていますね

$_SERVER["SCRIPT_NAME"]

をご利用ください
    • good
    • 0
この回答へのお礼

yambejp様

セキュリティ絡みで敬遠されるものもあるんですね。
参考書の中身をそのまま信じないで詳しく調べながら学習します。

貴重な情報、ありがとうございました。

お礼日時:2011/06/10 09:13

$_SERVER["PHP_SELF"]は、呼び出されたスクリプトのファイル名です。


ドキュメントルートからフルパスで取得されます。

例:
http://hogehoge.com/form.phpでの表示
$_SERVER["PHP_SELF"]の値は、/form.phpになる。

http://hogehoge.com/form/form.phpでの表示
$_SERVER["PHP_SELF"]の値は、/form/form.phpになる。

form の action は、フォーム内容を実行させるのがどのファイルかの指定です。
つまり、
<form action="<?php $_SERVER["PHP_SELF"]; ?>" method="post">
とした場合、フォームを表示しているページで実行ということになります。

$_SERVER["PHP_SELF"]が/form/form.phpなら
<form action="<?php $_SERVER["PHP_SELF"]; ?>" method="post">

<form action="/form/form.php" method="post">
は同じということになります。

別に$_SERVER["PHP_SELF"]としなくても、直接ファイル名を書いても構いません。
<form action="form.php" method="post">
    • good
    • 0
この回答へのお礼

mikemike7様

formのactionはフォーム内容を実行させるのがどのファイルかの指定、なんですね。
なるほど、解りました。

もし良ければ追加で質問させて下さい。

フォーム内容を実行させるのがどのファイルかの指定、とありますが、流れとしては、「input type="submit」で出来たボタンを押すことによりactionで指定したファイルが実行され、そのファイルの<?php~で囲まれた中で、$_POST[]から情報を得て処理を行う、と考えて良いでしょうか?

他にもactionで指定したファイルを実行させる、トリガーのようなものはありますか?

もし良ければ教えてください。

よろしくお願いします。

お礼日時:2011/06/10 09:09

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