▼5-1 データを受け取ろう |
掲示板を作るにはまず、掲示板に書き込まれた内容を受け取る必要がありますね。 そこで、最初に投稿者の名前とE-mailを受け取るプログラムを作ってみましょう。 下のform.cgiとform.htmlを同じフォルダに入れて、form.htmlを開いてください。
name=xxx&mail=yyy と表示されます。つまりCGIには、 「フォームのNAME=入力された値&フォームのNAME=入力された値&・・・」 の形でデータが渡されるわけです。 このため、入力された値だけを得るには、チョットした工夫が必要になります。
さらにそれを「=」で分割すれば、入力された値だけが取り出せるというわけです。 |
▼5-2 文字化けはどうするの〜? |
上のサンプルで、試しに投稿者のところに「あ」と入力して送信してみましょう。すると、%82%A0と表示されると思います。 当然、「読めないやんけ〜!」とツッコミが来るでしょう。 実は、CGIに渡されるデータは下のようなURLエンコーディングという規則にしたがって変換されています。
下がそのサンプルプログラムです。
$data =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('C', hex($1) )/ge; で、その他の文字をデコードしてあげています。 この2行ついては、詳しい説明は省略します。デコードの時の決まり文句とでも思ってください(汗;) |
▼5-3 「POST」と「GET」ってなぁに? |
上のサンプルで投稿者を「xxx」、メールアドレスを「yyy」を入力して実行すると、
ブラウザのURL表示欄に?name=aaa&email=bbbと表示されると思います。
このようにURLに送信するデータを埋め込んでCGIに渡す方法をGETメソッドといいます。 もう1つ、データを送るにはPOSTメソッドという方法もあります。 POSTの場合はデータはURLに埋め込まれずに、送信データ内に格納して送られます。 どちらの方式で送信するかは、<FORM>の中身を、下のように書き換えればOKです。 GETメソッド……<FORM ACTION="form.cgi" METHOD="GET"> POSTメソッド…<FORM ACTION="form.cgi" METHOD="POST"> ちなみに、METHODを省略したときにはGETメソッドになります。 上のサンプルがGETメソッドになったのは、このためですね。 次にデータの受け取り方ですが、GETメソッドの場合は5-2のプログラムでOKです。 しかし、POSTメソッドの場合はこれとは少し変わります。
次に、cgiファイルは下のように変えます。
環境変数「CONTENT_LENGTH」の長さ分、標準入力(STDIN)からデータを取得し変数「$data」に格納しています。 |
▼5-4 受け取ったデータを保存しよう |