![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
いつもお世話になっています
複数のチェックボックスのデータを、取得しいので
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で質問しましょう!
似たような質問が見つかりました
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- CGI htmlからcgiを自動的に起動させたい 1 2023/02/21 19:39
- ホームページ作成・プログラミング CGIが実行可能なHP領域又はレンタルサーバーでおすすめの所を教えてください 現在ホームページ領域の 1 2023/01/01 11:47
- Perl Perl の外部モジュールの利用方法 3 2022/07/10 18:34
- その他(プログラミング・Web制作) Windowsのバッチファイルについてご教示ください 5 2023/07/25 20:23
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- Java javaの質問です 次の機能を有するメソッド4つを自クラスに作成し、実装したいです 【機能】 足し算 1 2022/06/15 17:49
- CGI (フリーの)ツリー掲示版CGI、昔は多用させてもらいましたが・・今セキュリティ上どうでしょう? 2 2023/06/25 07:18
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Perl perlのrequireの動き方についての質問 2 2022/10/30 17:27
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
例外処理のフローチャートの記...
-
同じコンボボックス、リストボ...
-
”:”がいっぱいの文について。
-
モジュールとサブルーチン
-
Excel VBAで、ユーザーフォー...
-
ファイルを出力させる方法
-
use baseしたpackageのローカル...
-
COBOLで、Shellを起動するには?
-
タイマーで動かすselect caseの...
-
アセンブリプログラムのcallし...
-
Perlのサブルーチンの引数引継ぎ?
-
ACCESSのVBAでPrivate Sub ~en...
-
Attempt to free unreferenced ...
-
配列Xの最大値、最小値を求める...
-
フォートランのサブルーチンの...
-
Excel VBAでリンク切れをチェッ...
-
VBAで別モジュールへの変数の受...
-
ユーザー定義関数に#NAME?が返...
-
VBでグローバル変数を宣言するには
-
Excelで時刻になったら知らせて...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
例外処理のフローチャートの記...
-
Excel VBAで、ユーザーフォー...
-
COBOLで、Shellを起動するには?
-
モジュールとサブルーチン
-
”:”がいっぱいの文について。
-
ExcelVBA AddinでOnAction
-
オフコン(富士通Kシリーズ)...
-
ACCESSのVBAでPrivate Sub ~en...
-
VBAで2重のDoLoop関数から抜け...
-
fortran95実行エラー
-
perlの構文でカンマの意味が分...
-
プログラムの可読性が悪いです...
-
Perlのサブルーチンの引数引継ぎ?
-
サブルーチンを認識しません。
-
GOSUB命令とは
-
Inline CでOpenMPは使えますか?
-
初歩的な質問なのですが、サブ...
-
サブルーチンに引数を2つ以上...
-
BASIC言語で時差を求めるには?
-
cobol サブルーチンのlink
おすすめ情報