いつもお世話になっています
複数のチェックボックスのデータを、取得しいので
CGI.pmライブラリの利用を考えました、プログラムの流れとしてはボタンを押したら
チェックを入れた項目だけをコンソールに出力させたいのですが、
POSTメソッドでmode及びsctionに変数をセットしてやり、
サーバーに投げてやり、その値により
処理を分岐させたいのですが(データ追加処理とデータ出力処理に振り分ける)
所が、CGI.pmライブラリを利用すると、処理が行われません因みに
#use CGI;
#$q = new CGI;
としてコメントアウトすると、分岐処理が行えますが、当然チェックした項目の出力はできません
どこかおかしな所が在りますでしょうか、宜しく御教授お願いいたします。
コードが長くなってしまったので、下記のサーバーにアップしてあります
http://www.geocities.jp/linux_rh_penguin/cgi.txt
申し訳ございませんが一読、宜しくお願いいたします。
No.1ベストアンサー
- 回答日時:
個人のURLを乗っけると、何かに引っ掛かるかもしれません。
コードですが、まず分岐用の入力パースはdecodeサブルーチンで行なっていますね。この上にCGIのコンストラクタをおけば、当然CGIモジュールが標準入力を全て読み込んでしまうので、decodeルーチンには入力は行きません。従って、分岐も出来ません。
入力のパースは、decodeサブルーチンを使うか、CGIモジュールを使うか、どちらか一方に絞ってください。CGIモジュールを使うなら、decodeサブルーチンは全く必要ありません。全てCGIモジュールを利用して下さい。decodeサブルーチンを使うなら、複数の入力処理もdecodeサブルーチン内で行なってしまえば良いでしょう。ちなみに複数の項目が送信されている場合は、同じkeyで複数の値がやって来る事になります。cgi-lib.pl等のパース処理が参考になります。
$in{$key} = $val;
と言う風に上書きしていかずに、
$in{$key} .= $deli; # $deliには適当なデリミタを
$in{$key} .= $val;
と言う風に繋げていくように処理すれば、複数の項目であってもキチンと取得出来ます。後でデリミタで分解してやれば配列にも出来ます。
CGIモジュールは非常に高機能なモジュールなので、単純なパースだけをさせるには少々オーバースペックのように思います。
この回答への補足
hikominさんお世話になります早速のレスありがとうございます
>CGIモジュールを使うなら、decodeサブルーチンは全く必要ありません
とありますが
# CGI.pmライブラリの読み込み
use CGI;
$q = new CGI;
としてCGI.pmを有効にして
#&decode;
とコメントアウトしても分岐できないのですが
何か特別に関数を呼び出ししなくてはいけないのでしょうか?
hikominさんありがとうございました
decodeサブルーチンをやめて
$mode = $q->param('mode');
$action = $q->param('action');
としてたらきちんと変数に値がセットされ結果を出す事が出来ました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
例外処理のフローチャートの記...
-
配列と互換性のない型の要素に...
-
COBOLで、Shellを起動するには?
-
”:”がいっぱいの文について。
-
ExcelVBA AddinでOnAction
-
初心者です。Perlではどんな時...
-
モジュールとサブルーチン
-
オフコン(富士通Kシリーズ)...
-
LCD ディスプレイを Raspberry ...
-
ラズベリーパイ初心者です。 ラ...
-
Excel VBAでリンク切れをチェッ...
-
エクセルVBAでシートモジュール...
-
VBでグローバル変数を宣言するには
-
VBAで別モジュールへの変数の受...
-
モジュールとクラスの違いって...
-
Excel VBAで、ユーザーフォーム...
-
グラフのX,Y座標を取得したい
-
VBSがコンパイルエラーになりま...
-
【vba】フォームに書いてあ...
-
VBA This Workbookモジュール...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
例外処理のフローチャートの記...
-
Excel VBAで、ユーザーフォー...
-
オフコン(富士通Kシリーズ)...
-
”:”がいっぱいの文について。
-
モジュールとサブルーチン
-
COBOLで、Shellを起動するには?
-
プログラムの「生産性」について
-
初心者です。Perlではどんな時...
-
fortran95実行エラー
-
サブルーチンを認識しません。
-
配列と互換性のない型の要素に...
-
ExcelVBA AddinでOnAction
-
GOSUB命令とは
-
Attempt to free unreferenced ...
-
VBAで2重のDoLoop関数から抜け...
-
ACCESSのVBAでPrivate Sub ~en...
-
配列Xの最大値、最小値を求める...
-
サブルーチンやif分以外での中括弧
-
perlの構文でカンマの意味が分...
-
マジカルインクリメントの実装...
おすすめ情報