• ベストアンサー

HTML のフォームでaction="" とは何

HTMLのFORMではたいがいaction= の部分はPHPなどのサーバースクリプトの名前が書かれているのですが、時々action="" というのを見かけます。 これはどういう意味なのでしょうか? 例としては次のようなものです。 <form id="login-id" action="" method="post"> どうかよろしくお願いいたします。

  • HTML
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • 4017B
  • ベストアンサー率73% (1305/1776)
回答No.1

HTML5以前のバージョンでは <form> の中には必ず action属性が必須で尚且、その要素として有効な文字列(URL)を指定しなければならなかったため、古いwebページ等では <form action="./foo.php"> みたいに何かしらのURLが指定されています。しかしながらwebサーバ上の特にPHPファイル等の重要なファイルの設置場所をみだりにwebページ内に記述してしまうと、悪意あるアクセスを許す重大なセキュリティホールともなりかねません。 そのためHTML5では <form> の中の action属性には何も記述せず空のままでも良い様に仕様が変更されました。従って現在、web構築の主流であるHTML5準拠のwebサイトでは通常、<form> の中には意味の有る文字列等を直に記述しない様にするやり方が主流となっています。質問者が見かけたモノもそういったタイプのwebページであったと思われます。 しかしそうなると次の疑問が生じるかと思います。つまり…「action="" だとformで取得した情報の送信先は空っぽのまま、一体どこへ送信されるのか?」という疑問です。実はformの [OK/Submit] ボタンをクリックした際、通常はそのform内の actionで指定された送信先のURLへ情報が送られる仕組みですが。もしも action="" だった場合は、その自己URL、つまりそのformが記述されているHTMLファイル自身へと送信される仕組みになっています。これは必ずしもHTMLファイルである必要は無いため、PHPファイルやディレクトリ指定でも同じ様に動作します。 例えばよくありがちな… - http://example.com/?p=123 ~以上の様なURLにアクセスして actionの指定先が空のwebページが表示されている場合。そのformの送信先は "http://example.com/" になります。具体的なファイル名無しのディレクトリ階層のみを指定したURLでアクセスが行われた場合、その挙動はwebサーバ全体を制御しているサーバプログラム(OS)の設定に準じますので。サーバプログラム側でファイル名無しのディレクトリ階層へアクセスがあった場合、index.html などでは無く foo.php を読み込み起動させる様にして置きます。 こうして置けば "http://example.com/?p=123" の様に引数などが有る場合はそれに応じたwebページを表示させ、何も無い "http://example.com/" の様な場合にはその階層に設置された foo.php が最初に読み込まれて起動し、そのPHPファイルに記述されたプログラムで他に付与されたformの情報などが無いかを検出し、もし有ればそれに応じたwebページを新たに構成し再表示させる様にします。 こうする事によってアクセスした不特定多数のUserに対して、具体的なwebサイトの構造やPHPファイル等のURL情報を知られる事無く、安全にformを使って情報のやり取りが可能になるという訳です。他にもJavascriptによって動的に送信先を生成し、アクセスしているUser側からは送信先が一見して分からない様に偽装する方法もあります。

papashiroSooke
質問者

お礼

早速にご回答を頂き、有難うございます。 とても分かりやすい丁寧な説明で、納得できました。 今まで自分の知らなかったことなども多くあり、勉強になりました。 尚、自分のお礼が遅くなったことをお詫びいたします。

関連するQ&A

  • HTMLフォームPOSTでの引数の渡し方

    HTMLのフォームでPOST送信を利用しているのにURIに引数を指定するのは良いのでしょうか? <form name="form" method="post" action="form.php?abd=123"> のようになっているサイトを見かける事があります。

    • ベストアンサー
    • HTML
  • formとactionとmethodについて

    初心者的な質問で申し訳ないのですが、 formを複数作りたい場合、メソッドをpost/get別々に指定したり、actionを別々のリンクを指定とかって出来たりするんでしょうか。 <form action="next.php" method="post">inputとか</form> <form action="prev.tpl" method="get">hiddenとか</form> 見たいな感じで、それぞれが別々、若しくは <form action="next.php" method="post">inputとか</form> <from action="next.php" method="get">inputとか</form> 見たいな感じで、リンク先は一緒だけどメソッドは違う等の指定方法を教えていただければと思います。 もし、指定出来ることは出来るが、javascriptで制御しなけらばならない等あるのでしたら、 その記述例等も一緒に教えて頂けると嬉しいです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 複数フォームについて

    こんばんは。 いま行き詰ってます(汗) 早速質問なんですが、三つのフォームを用意します。 <FORM method="POST" action=<?echo"xxx.php?1"?>> <INPUT type="submit" value="A" </FORM> <FORM method="POST" action=<?echo"xxx.php?2"?>> <INPUT type="submit" value="B" </FORM> <FORM method="POST" action=<?echo"xxx.php?3"?>> <INPUT type="submit" value="C" </FORM> 上記のHTMLを実行。 [A][B][C] Aを押すとxxx.php?1 Bを押すとxxx.php?2 Cを押すとxxx.php?2 と別々のアクションに行くはずだと思ったんですが.。 常にxxxx.php?1です(笑) これを、ABCそれぞれのボタンにアクションをつけたいんですが、 可能ですか?? ご教授お願い致します!!!

  • PHPとHTMLについて質問です。

    PHPとHTMLについて質問です。 PHP内に以下の記述をしています。 ~略~ <form id="form1" name="form1" method="post" action="bschat.php"> <h1>各種設定を行ってください</h1> ~略~ 上記の1行目で予期せぬエラーが表示されていますとエラー表示されています。 これらを表示するにはどうすればいいですか?

    • ベストアンサー
    • PHP
  • PHP,HTMLでのform actionについて

    現在、以下のようにプログラムを書いています。 <form action="shellexec.php" id="editarea_form" method="POST"> <div align="center"><input type="submit" value="提出" style="width:200px;height:25px" id="submitBtn"> <textarea id="edit" name="edit" cols="120" rows="30"></textarea></div> <input type="hidden" name="save_address" value="<?php echo "tmp/".$_SERVER['REMOTE_ADDR']."/form3.php/current.c" ?>" id="saveAddress"> </form> これにより自サーバのホームページにフリーのエディタを付けてそこにプログラムを書いて貰って、提出ボタンを押して提出してもらい、提出されたプログラムの診断をしています。 そこにもう一つボタンをつけて別の処理を行うようにしたいのですが、form actionには一つしか書けないのでしょうか。二つ以上かける方法があれば教えて頂きたいです。 エディタに書いてもらってボタン1を押したら、その内容を用いてshellexec1を実行、ボタン2を押したらshellexec2を実行という風にしたいのです。 色々やってみたんですが難しくうまくいかないので質問しました。 よろしくお願いします。

    • 締切済み
    • PHP
  • HTMLのフォームをPHPで配列で受け取る方法

    Webアプリを作っています。 HTMLのフォーム上で、番号と名前を入力し、 PHPでデータベースに登録する感じになります。 HTMLのフォームから送信されたデータを、PHP側で配列として受け取るには、 どのようにHTMLを書き換えたら良いでしょうか? 説明のために例を挙げます。 sample.htmlには以下のように書いています。 <form action="action.php" method="get"> <input type="number" name="id1"> <input type="text" name="name1"> <input type="number" name="id2"> <input type="text" name="name2"> <input type="submit"> </form> ここで、送信ボタンを押すと、 ブラウザのロケーションバーには /action.php?id1=1&name1=taro&id2=2&name2=jiro このように表示されます。 action.phpは次のように書いています。 <?php print ($_REQUEST['id1']); print ($_REQUEST['name1']); print ($_REQUEST['id2']); print ($_REQUEST['name2']); ?> 出力結果は、 1taro2jiro のようになります。 このあと、PHPでデータベースに登録する処理をしたいのですが、 $_REQUEST['id1'] $_REQUEST['id2'] $_REQUEST['name1']; $_REQUEST['name2']; となっていると、処理が大変なので、 $_REQUEST['id'][0] $_REQUEST['id'][1] $_REQUEST['name'][0] $_REQUEST['name'][1] のように配列として受け取れるようにしたいのです。 sample.htmlを書き換える必要が有ると思うのですが、 どのように書き換えたら良いでしょうか? 教えていただけると幸いです。 どうぞ、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • phpについて 入力ホーム

    ホームページ php 入力ホームについて 初心者です。 HTML内に入力ホームに関するphpページを指定したいのですが <form action="form1.php" method="post">は指定できましたが、もう一つ<form action="form3.php" method="post">も指定したいくて、下のコードを書き込んだのですが、 <form action="form1.php" method="post"> <form action="form3.php" method="post"> 以下のようなエラーメッセージが出ます タグ<form>内に< form>を含むことができません。 どうしたら良いでしょうか?

    • 締切済み
    • PHP
  • form actionで二つ送信先を指定する方法を教えて下さい。

    プログラム初心者です。 構造としては… index.php index2.php index3.php 上記があり、index.phpの中身は下記のようになっています。 <frameset rows="200,*"> <frame src="index2.php"> <frame src="index3.php"> <noframes> <body>未対応ブラウザ向け内容</body> </noframes> </frameset> index2.phpの中身は以下のようになっています。 <form action="<?php $_SERVER["SCRIPT_NAME"] ?>" method="post"> ID:<input type="text" name="id"><br> 内容:<input size="50" type="text" name="txt"><br> <input type="submit" value="登録・編集"> </form> 上記ですと、post情報がindex2.phpだけに送信されてしまい、index3.phpに情報が送る事が出来ません。 このようなやり方はないと思いますが… <form action="index2.php" action="index3.php" method="post"> このように出来ればいいと思ったのですが…思うように動作しません。 方法が分かる方は是非教えてもらえると助かります。 よろしくお願いします。

    • 締切済み
    • PHP
  • PHPのメールフォームが動かない!

    プログラム言語はまったく初めてのPHP初心者です。 いきなり会社関係のサイトを管理する事になり サーバを移転したらメールフォームが動かなくなってとても困っています。 (前々任者が作ったPHPスクリプトなので、前任者もよくわかっていません) 状態は、フォームを送信すると、真っ白な画面になって何も表示されず、メールも送信されません。 移転前のサーバではちゃんと稼働していたらしいのですが… 書き替えたのはPHP本体のmailの送信先アドレスと、HTMLのaction=の後の本体スクリプトのアドレスだけです。 <form name="form1" method="post" action="./form.php"> mail関数は下のようになっています mail($mail,$subject,$message,$from,"-finfo@****.com"); include(THANKS); } 同じサーバにある、PHPの掲示板はちゃんと普通に稼働しています。 それから、いろんな初心者サイトを巡ってみたのですが、 スクリプト本体に、まだよく解らない構文もあります。 構文の一番最初が <?php $date = date ("Y-m-d"); になっているのですが、これは何をする構文でしょう? 前任者は「前のサーバで稼働していたから、サーバの問題じゃないか」 と、言っているのですが、もしそうならサーバの何が問題なのでしょう? なにしろスクリプトなどいじったこともない初心者なので、 わからない事だらけでとても困っています! 質問ばかりになってしまいましたが、どなたかよろしくお願いします!!

    • 締切済み
    • PHP
  • フォームアクションPOSTとリンクジャンプ

    リンクタグを付した文字をクリックすると ジャンプすると同時に、ある追加情報をPOST機能で 送付したいのですが、そのような動作は可能なのでしょうか? <form action="search_result_genre.php" method="POST" name="nav" target="_self" id="nav"> <a href="search_result_genre.php"><option value="いろはに"> いろはに </option></a> </form>

    • ベストアンサー
    • HTML

専門家に質問してみよう