※このサンプルの解説は、「CGI(Perl)の解説」をすべて読み終えてる方を前提としています。
  後になるほど省略されている場合がありますのでできるだけ順番に読んでください。
  また、実行に際しては、サーバーでPHPが利用できる事を前提に解説しています。

■ 投稿フォームの作成

さて、今回は「投稿フォームの作成」です。
この処理は一部文字変換に難しい部分がありますが、その解説はさらっと流しておきます。(笑)
それ以外は今までに習ったテクニックの積み重ねでしかありません。

この処理を理解するには当然ですが、「HTML」の知識が必要になります。
解からない方は「HTMLの解説」で勉強してくださいね。

【 解    説 】

まず、「HTML」で投稿フォームを作っておきます。
記述サンプルは次のような感じ。
<form method="post" action="inpfrm.cgi"> 名前:<input type="text" name="name"><br> コメント:<input type="text" name="comment"><br><br> <input type="submit" value="投稿"> </form>

このフォームから入力されたパラメータを取得するには環境変数の「$_POST[]」を使用し、次のように記述する事ができます。
$name = $_POST[name]; $comment = $_POST[comment];

通常はこのままでいいのですが、「Shift_jis」で作成されたページの場合、サーバーPHPのバージョンの不整合によって、次のように不要な「\(円)」マークが自動挿入されることがあります。
「申し込みソフトの機能」「申\し込みソ\フトの機能\」

この場合、次のように「stripslashes()」関数を使うだけで簡単に取り除くことができます。
$name = stripslashes($name); $comment = stripslashes($comment);

次に、取得した文字列を「,(カンマ)」区切りでファイルに記録しましょう。
ファイル名は「inpfrmf.cgi」としました。
$filnam = "inpfrmf.cgi"; $fp = fopen($filnam,"a"); fputs($fp,"$name,$comment\n"); fclose($fp);

表示文字列の最後にある「\n」はテキストファイル内の改行です。

と同時に、記録結果も表示しておきましょう。
print "記録完了!<br><br>\n"; print "名前:$name<br>\n"; print "コメント:$comment<br>\n";

表示文字列の最後にある「<br>\n」はそれぞれのHTMLの改行とテキストファイルの改行です。

今回、カウンタのファイル名は「inpfrmf.cgi」としました。
このファイル名は何でもいいのですが、セキュリティの意味で拡張子は「.cgi」にしておくことをお勧めします。

このようにしておくと、訪問者がこのファイルを覗こうとした時、自動的にCGIとして実行しようとしますが、中身がCGIではないのでエラーが発生します。
したがって、覗こうとしてもエラーが発生して覗けなくなるからです。

では、まず入力用の投稿フォームを「HTML形式」で作成します。
ファイル名は「inpfrm.html」とするといいでしょう。

【記述サンプル】
<HTML> <HEAD> <title>投稿フォーム</title> </HEAD> <BODY> <div align="center"> <h4>【投稿フォーム】</h4> </div> <table cellpadding="8" border="1" align="center"> <tr> <td bgcolor="#eeeeff"> <form method="post" action="inpfrm.php"> 名前:<input type="text" name="name"><br> コメント:<input type="text" name="comment"><br><br> <input type="submit" value="投稿"> </form> </td></tr></table> <br> </BODY> </HTML>

次に、投稿フォームのデータを取得してファイルに記録するPHPを作成します。
ファイル名は「inpfrm.php」にしてください。

【記述サンプル】
print <<< END_DOC <HTML> <HEAD> <title>記録完了!</title> </HEAD> <BODY> END_DOC; $name = $_POST[name]; $comment = $_POST[comment]; $filnam = "inpfrmf.cgi"; $fp = fopen($filnam,"a"); fputs($fp,"$name,$comment\n"); fclose($fp); print "記録完了!<br><br>\n"; print "名前:$name<br>\n"; print "コメント:$comment<br>\n"; print <<< END_DOC </BODY> </HTML> END_DOC; ?>
◆実行結果について

上記のサンプルをそれぞれ「inpfrm.html」「inpfrm.php」という名前で保存して実行してみてください。
(注意)
サーバーでテストする場合は、前もってアクセスログを記録するための、何もデータの入っていない「inpfrmf.cgi」という名前のファイルをパーミッション「666」で必ず作成しておいて下さい。

実行結果はこちらをクリックしてください。
なお、実行結果については、各々のサーバーの環境、ユーザーの環境にによって内容は変わってきます。


page update:2010/01/23 20:32

Copyright (c) 2000-2009, all Rights Reserved & Produced by atom