formタグのaction属性

*.htmlファイルでフォームを作った場合、「submit」ボタンを押した時に、そのフォーム内のデータの「送信先」の指定が必要である。それを「action」属性で指定する。おそらくこういうことが原則になっているのであろう。

そこでは*.htmlから*.cgiや*.phpへデータを送信して、そこで処理をするということが想定されている。この場合「sumbit」は「データの送信」ということがあてはまる。

ところで、JavaScriptをローカルで使用していると、「action」など指定する必要がないパターンがよくあった。もちろんそれでも動作していた。JavaScriptにとっては「action」の指定はなくてもよい。その場合の「submit」は上の場合とは少し意味あいが異なっているように思える。フォームデータを取得するためのスクリプトの「再読み込み」という面が大きくなってくる。

さて、CGIやPHPでフォームを作ることがよくある。その場合はどういうことになるのであろうか。「送信先」でもあり「再読み込み」でもある。この場合に「action」の指定にはやはり意味があるのだろうか。それを確認してみたものである。

作成分野開始番号終了番号操作
 

CGI内でフォームを作成する例
資料 <form method="post"> <table> <tr><td>作成分野</td><td>開始番号</td><td>終了番号</td><td>操作</td></tr> <tr><td> <select name="bunya" class="cmbb"> <option value="0" selected>C/C++</option> <option value="1">Perl</option> <option value="2">PHP</option> </select> </td> <td><input type="text" name="start" size="10" value="" class="fntb"></td> <td><input type="text" name="end" size="10" value="" class="fntb"></td> <td><input type="submit" value="実行" class="btnr">  <input type="reset" value="取消" class="btnb"></td> </tr> </table> </form>

要点
  1. <form method="post">
    actionを指定していない場合、デフォルトではこのスクリプトを記述したファイルが読み込まれる(フォームデータが渡される)ようである。
    なお、これは「<form method="post" action="">」とした場合にもこれと同様である。


  2. <form method="post" action="./perl_0037.cgi">
    actionにこのスクリプトを記述したファイルを指定した場合、そのファイルに読み込まれる(フォームデータが渡される)ようである。これが普通のパターンである。

  3. <form method="post" action="./obake.cgi">
    actionに存在しないファイルを指定した場合、「Web ページが見つかりません」というエラーメッセージが出て実行できない。こうなることはもう当然である。
    action属性の指定は必要である。ここに明示的にデタラメのURLを書くことはできないということである。

formタグではactionの指定を省略せずに書いておくほうが安全である。
そもそも、これが気になったのは「<form method="post" action="$strScript">」としたときに、$strScriptの値を何も設定していなかった場合でも正常にプログラムが実行されたことがあったからである。

- 2015/04/29 -