Perl CGIの初歩の初歩

CGIの勉強をはじめようとしている人向きです、また各スクリプトはできるだけシンプルに作りましたので実用的
なものではありません・・・上達すればここのスクリプトをたたき台にして自分の好きなものが作れるでしょう。

スクリプト 説明 サンプル
お役に立てれば・・・ プログラム作成のこつを書いてみました、初心者の人だけが見てください。少しでも自分で作れる人は、読むと混乱するかもしれませんから、そのときは責任を負いかねます。(^^;;  
決まったメッセージを表示する CGIの基本はブラウザ画面にデータを表示させることです。
ここでは決まったメッセージを表示させます・・・ここが出発点です。
このメッセージを変数にして条件を加えることにより表示に変化を持たせることができますし、ファイル処理やメール機能を加えれば掲示板やアンケートなどいろいろなものが作れるようになります。

HTMLで

同じ画面をCGIで
時刻を表示させる(1) ローカルタイムを使って現在時刻を表示します。これは起動した時刻を表示するだけの機能です。
時刻を表示させる(2) 表示した現在時刻を再実行(リロード)することにより最新時刻に更新します。これはブラウザの更新ボタンクリックと同じ結果になります。
時刻を表示させる(3) 時刻表示(2)の仕組みに前回表示した時刻を現在時刻と合わせて表示します。これはhiddenパラメータを使い再実行(リロード)する際にデータを受け渡しています。
時刻を表示させる(4) LOCALTIME関数を利用して現在時刻から過去未来の日付を計算します。
テーブルの練習(1) 掲示板等で、テーブルを使う事がよくあります、ここでは行と列の数を変数に
もたせ、その値を変えることにより、表の形を変えられるようにしています。
テーブルの練習(2) テーブルの練習(1)に、機能をいくつか足しました。
テーブルの練習(3) これは、テーブルの練習(2)の応用編というのでしょうか・・・それぞれの枠に部屋番号をつけて、その部屋の利用状況を見られるようにするCGIの説明用です(これにファイル登録を追加すれば、実用的なものになります)
ラジオボタンの受け渡し方 HTMLのソースを見てわかるようにNAMEが同じものの中から1つだけ選択されます。送信ボタンが押された後はFORM ACTIONで示されたCGIにVALUEの値を渡します。
値の取り出し方は&ReadParseを利用すれば$in{ボタンのNAME}にセットされます。

チェックボタンの受け渡し方 HTMLのソースを見てわかるようにNAMEが同じものの中から複数選択することができます。送信ボタンが押された後はFORM ACTIONで示されたCGIにVALUEの値を渡します。
値の取り出し方は&ReadParseを利用すれば$in{ボタンのNAME}にセットされます。複数選択された場合は¥0で区切られた形になります
よって配列の形で処理することになります。
但し、1つ1つNAMEを変えて個別に受け取る方法もあります。
初心者の方は1つ1つNAMEを変えた方が配列を使わないので簡単です。

SELECTの受け渡し方 オプションを入れることにより1つのみあるいは複数選択することができます。送信ボタンが押された後はFORM ACTIONで示されたCGIにVALUEの値を渡します。
値の取り出し方は&ReadParseを利用すれば$in{ボタンのNAME}にセットされます。複数選択された場合は¥0で区切られた形になります
よって配列の形で処理することになります。

SELECTの初期値設定 HTMLで作った固定されたSELECT内容をCGIで作ることにより、動的に変更することができます。例えば12ヶ月の中から当月を選ぶ時とか
本年を中心として前後数年を選択肢に入れる場合です。

TEXTAREAの受け取り1 TEXTAREAを使うと文章を入力できますが、そのデータを正しく受け取るにはいくつかのポイントがあります。
1.TEXTAREAから入力されたデータの改行コード処理
2.タグの無効化  ・・・ タグを無効にした方が無難です
3.空データ行の削除 ・・・ 改行だけの空行を削除します
4.文字コード変換 ・・・ EUCに変換します
※1番大切なことは文字コード変換です。HTMLから受け取った日本語文字列はEUCに変換します。

TEXTAREAの受け取り2
受け取り1の番外編です。文字化けを起こす原因は文字コードの混在です、例えばEUCとSJISが混ざると発生します。
受け取り1では『Q1.どの内容が参考になりましたか?』の下に回答データを表示させましたが『Q1.どの内容が・・・という文字列はEUCで
回答データはSJISです。そのため回答データをEUCに変換させています。受け取り2では『Q1.どの内容が・・・という文字列も回答データといっしょにCGIに渡します、つまり2つともSJISですから文字コードの変換は必要ありません。項目名はhiddenパラメータを利用して渡しています。
但し項目名やボタン名称もすべて渡す必要がありますから実用的ではありません。

四則演算処理

1.ラジオボタンの利用
2.SELECTの利用
3.演算も入力
4.まるごと入力
5.ボタンで分ける

少しずつ、命令語を使えるようになると、1つの結果を求めるのに、いくつかの方法があることに気づきます。ここでは○+△=□という単純な式を例にして、5つの方法で計算しています。
皆さんは、どの方法がいいと思いますか? どれがいいかの判断は、どれが使いやすいかという観点です、これがユーザーインターフェイスと呼ばれる部分であり、処理がいかにわかりやすく、使いやすいように作るのが、プログラマとしての腕の見せ所になります。
 
並び替えの練習(1) 値を大きい順または小さい順に並び替えることをソートと呼び、配列に対して行います。ソートには、3つのパターンがあります。
(1)配列の要素に対するもの ・・・ @a=(10,8,20,5,15,1)の中
(2)配列の値に対するもの   ・・・ $a[0]=10,$a[1]=8の10と8・・
(3)連想配列の添え字に対するもの ・・・ 文字でも数字でもできます。

(1)のパターンでテストデータをソートし、結果を表示するものを作りました。

並び替えの練習(2) (2)のパターンでテストデータをソートし、結果を表示するものを作りました。  
並び替えの練習(3) (3)のパターンでテストデータをソートし、結果を表示するものを作りました。  
ファイルに書き込む(1) フォームに書きこまれた内容をファイルに登録します。
データを1件だけ上書きしています、書き込む流れを見てください。

ファイルの読み出し(1) ファイルからデータを読み、そのまま表示します。書き込み(1)に合わせて1行分のみ読み込んでいます。

ファイルに書き込む(2) フォームに書きこまれた内容をファイルに登録します。
3件のデータを改行させて3行で登録しています。

ファイルの読み出し(2) ファイルからデータを読み、そのまま表示します。WHILE命令を使い、すべての行を読み込んでいます。

ファイルに書き込む(3) フォームに書きこまれた内容をファイルに登録します。
3件のデータを区切り文字でつなぎ1行で登録しています。

ファイルの読み出し(3) ファイルからデータを読み、そのまま表示します。1行につながったデータをSPLIT命令で3つのデータに戻します。

ファイルの読み出し(4)

テキストファイルの内容
こんなこともできます・・・メモ帳で作ったデータを読み、そのまま表示します、するとHTMLで作ったものと同じ結果になります。・・・これを利用して簡単な検索ができそうです、フォームから入力された単語で検索して該当したものだけを表示するCGIです。

表形式の表示(1)

エクセルで作ったファイルを”タブ”による区切り記号で出力し、そのままサーバーにアップロードしたものを読むことができます。カンマによるものより、タブの方が¥tで簡単に項目分解することができます。
これにより、エクセルでデータの作成や更新をすることが可能になります。
但し、サーバーのデータを直接エクセルで更新するということではなく、更新したデータをサーバーにアップロードするということです。

検索の練習(1)

エクセルで住所録を作り、HTMLフォームから検索文字を入力して、該当するものを表示させています。
ここでは、HTMLとCGIを分けていますが、1つにすることもできます。
それからHTMLの画面が、小さくなっているのは、このCGIをiモード用にアレンジしようかなと思っているからです。携帯に電話番号をCGIでわざわざ処理させる必要はありませんが、道順とか担当者とかの情報が見られれば、便利と思います。アレンジは横の表形式を縦の表形式にすることですが、予定は未定です。そもそも 携帯持っていないので (^^;;


検索の練習(2)
検索の練習(1)は、HTMLとCGIを分けて作りましたが、これは1つのCGIの中に検索条件入力画面も入れたものです。見た目は同じです。

検索の練習(3) 検索の練習(2)に、ふりがな順で表示させる機能を追加しました。

簡易掲示板(1)

 ・ファイル登録CGI

 ・データ照会CGI

HTMLのフォームから書き込んだデータを書き込み専用CGIに渡し、ファイルに登録します。照会は、専用のCGIにしてあります。
つまり3つの処理を1つにつなげて、動作させています。
1.書き込みフォーム画面
2.データをファイルに登録するCGI
3.登録データを照会するCGI
この掲示板には、訂正、削除機能はありません。


 あなたの県に1票を 投票と呼ばれる?ものの簡単なパターンです。あなたの都道府県に、1票だけ投票してください。2重投票チェックはありません。みなさんがどこから訪れてくるのか興味があります。


剰余の正しい求め方 2年以上も剰余演算子%を知らなかったために、割りきれるかどうかの判断を独自の方法で行ないました。%を知っている人から見れば、おかしな方法ですが、開き直ってその方法について解説してあります。  
注文フォーム(かご) 『かごに入れる』方式の注文CGIです。ここではかごに入れる部分だけの処理を載せています。かごに入れるという仕組みは、hiddenパラメータを使います。hiddenはもう何回か出てきましたね、CGIではクリックするたびに、それまでのデータは消えてしまいますから、hiddenを使ってリレーのようにデータを渡して行きます。

2002.8.30