【復活求む!】惜しくも解散してしまったバンド|J-ROCK編 >>

お世話になります。
表記の通りチェックボックスで複数選択するHTMLを次のように作成しました。
======== 送信元HTML =========
<FORM action='******.cgi' method='POST'>
<INPUT type='checkbox' name='Q6_ans' value='1'>
<INPUT type='checkbox' name='Q6_ans' value='2'>
<INPUT type='checkbox' name='Q6_ans' value='3'>
<INPUT type='checkbox' name='Q6_ans' value='4'>
<INPUT type='checkbox' name='Q6_ans' value='5'>
<input type=submit value='実  行'>
</FORM>

これを受取るPerl-CGIのコードをこうしました。
======== 受信するcgi =========
my @files_2 = split(/\0/,$in{'Q6_ans'});
for($i=0;$i<=4;$i++){
if($files_2[$i] ne ""){$d[6].=$files_2[$i]." , ";}
}

例えばチェックボックスで2と3を選ぶと$d[6]の値は「2 , 3 ,」となるつもりだったんですが、意に反し「23 ,」となります。
配列の値を調べると$files_2[0]に「23」が代入されて、$files_2[1]から$files_2[4]は空です。つまり「split(/\0/,$in{'Q6_ans'})」での分割がされていないようなのです。
何が原因で、どこが間違いなのでしょう。チェックボックスの値は\0で区切られていると思っているのですが、間違いでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (3件)

#2です。


cgi-lib(ReadParse)を利用しているなら、\0で区切られた文字列として格納されているとう前提も、提示されてる分割、再連結のコードにも間違いはありませんので他の部分に問題があるとしか・・・

ReadParseでフォームデータを取り込んでから、
質問文にある処理にたどり着く間でデータを加工している部分(文字コード変換、エスケープ処理等々)があるのでしょうからそこを調べてみては。
    • good
    • 0

>チェックボックスの値は\0で区切られていると思っている


フォームデータの取り込みにcgi-lib(ReadParse)を使っているならそうなりますね。
そうでなければ、$in{'Q6_ans'}【%in】にフォームデータを読み込むあたりの処理しだいです。

この回答への補足

cgi-lib(ReadParse)を使用しています。

補足日時:2007/09/23 10:48
    • good
    • 0

>チェックボックスの値は\0で区切られていると思っているのですが、間違いでしょうか?


それは、$in{}をどう読み込んでいたかにかかっていると思います。

多分cgiの中に、
read(STDIN, $???, $ENV{'CONTENT_LENGTH'});
と言う所があると思いますが、ここ付近でパラメータを読み込んでいます。

その後ろに、$in{}に読み込んでいる、
$in{'??'}.=$????;
みたいな所がありませんか?
この前後で\0の文字があるか、あるならどうしてるかにかかります。
上だけだと、ただ'23'になります。

もしもそうなら、ここを、
if($in{'??'} ne ''){$in{'??'}.='\0'}
$in{'??'}.=$????;
にすれば、\0で区切られます。

p.s.
前後の関係を見ないと、確かな事は言えませんが・・・

この回答への補足

本システムではcgi-libを使用しています。
おっしゃっているのはcgi-libの中身のことでしょうか?

補足日時:2007/09/23 10:46
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QチェックボックスのCGIへの値の受け渡し方

チェックボックスで複数回答があった場合のデータの受け取りをどうしても分からないので教えてください。
別の人が作ったCGIを改造(今回の複数回答可の部分を)しています。以下のような記述だとvalue値が取れず、空白になっています。
【HTML】(チェックを2つ以上出来ないようにするためにJavascriptで制限をかけています。nameを同じにするやり方にしています。)
<INPUT type="checkbox" name="q1" value="赤" onclick="return limitation(this,2)">赤<br>
<INPUT type="checkbox" name="q1" value="黄" onclick="return limitation(this,2)">黄<br>
<INPUT type="checkbox" name="q1" value="青" onclick="return limitation(this,2)">青<br>
【CGI】
use CGI qw(:standard);
@check1=param("q1");
$result1=join(',',@check1);

print "<td width=300><font size=2>$result1</font></td>\n";

このPerlは@check1にq1のチェックが付いたものが格納されていると認識しています。では、どうしたらそれをとりだせるのでしょうか?初心者で申し訳ありません。やり方にこだわらず、今回の目標は
(1)チェックボックスに規定(2つ)以上のチェックが入るとアラートでチェックしすぎた瞬間に知らせてくれる
(2)2つチェックされた場合の値の取出しを可能にする。

チェックボックスで複数回答があった場合のデータの受け取りをどうしても分からないので教えてください。
別の人が作ったCGIを改造(今回の複数回答可の部分を)しています。以下のような記述だとvalue値が取れず、空白になっています。
【HTML】(チェックを2つ以上出来ないようにするためにJavascriptで制限をかけています。nameを同じにするやり方にしています。)
<INPUT type="checkbox" name="q1" value="赤" onclick="return limitation(this,2)">赤<br>
<INPUT type="checkbox" name="q1" value="黄"...続きを読む

Aベストアンサー

説明が悪かったかな。
先ほど表記したのは同じcheckboxの場合の受け取り方のテストスクリプトです。
受け取った配列をHIDDENで渡せば問題ありません。

ただ、私のほうでCGI.pmを使用したものをテストしたところ同じnameを使った場合は渡された文字列が連結されてしまうみたいです。

以下テスト用

#!/usr/local/bin/perl


use CGI;
$query = CGI->new;
$on = $query->param('on');

@params = $query->param();

print "Content-type: text/html\n\n";
print "<HTML>\n";
print "<HEAD><TITLE>test</TITLE></HEAD>\n";
print <<HTML;
<form action="chk.cgi" method="POST">
<input type="checkbox" name="q1" value="RED">RED<br>
<input type="checkbox" name="q1" value="BLUE">BLUE<br>
<input type="checkbox" name="q1" value="YELLOW">YELLOW<br>
<input type="submit" name="on" value="TEST">
</form>
HTML

if ($on) {
print "<p>変数result1: $result1</p>\n";
print "<p>配列q1<br>\n";
foreach $q1 (@check1) {
print "$q1<br>\n";
}

foreach $param (@params) {
print $param, ":\t", $query->param($param), "<br>\n";
}

}

print "</BODY>\n";
print "</HTML>\n";

exit;


以上でテストした結果:
q1: REDBLUEYELLOW
on: TEST

説明が悪かったかな。
先ほど表記したのは同じcheckboxの場合の受け取り方のテストスクリプトです。
受け取った配列をHIDDENで渡せば問題ありません。

ただ、私のほうでCGI.pmを使用したものをテストしたところ同じnameを使った場合は渡された文字列が連結されてしまうみたいです。

以下テスト用

#!/usr/local/bin/perl


use CGI;
$query = CGI->new;
$on = $query->param('on');

@params = $query->param();

print "Content-type: text/html\n\n";
print "<HTML>\n";
print "<HEAD><TIT...続きを読む

Qチェックボックスのperlでの値の渡し方

perlに限らず、CGIもJavascriptも初心者なのにHPでアンケートを作ろうとしている者です。機能はアンケートの末尾の「確認」を押すとCGIの“確認画面”が表示され、その後「送信」で記述内容がメール送信されるというものです。複数回答があるチェックボックスのperlでの値の渡し方を教えてください。症状として以下の様に記述した場合、AとCにチェックをすると「C」しか受け取れません。ちなみにチェックボックスに規定以上の数(例えば「最大2つまで回答可」みたいな)がチェックされたら瞬時にアラートが出るようにするJavascriptを使っていますので“name”は同一にしたいのですが。
★CGIの記述 → $FORM{'test'}
★HTMLの記述↓
<INPUT type="checkbox" name="test" value="A">A
<INPUT type="checkbox" name="test" value="B">B<INPUT type="checkbox" name="test" value="C">C
「配列変数」とやらが必要らしいのですが、どんな記述にすれば良いのかサッパリです。

perlに限らず、CGIもJavascriptも初心者なのにHPでアンケートを作ろうとしている者です。機能はアンケートの末尾の「確認」を押すとCGIの“確認画面”が表示され、その後「送信」で記述内容がメール送信されるというものです。複数回答があるチェックボックスのperlでの値の渡し方を教えてください。症状として以下の様に記述した場合、AとCにチェックをすると「C」しか受け取れません。ちなみにチェックボックスに規定以上の数(例えば「最大2つまで回答可」みたいな)がチェックされたら瞬時にアラートが出る...続きを読む

Aベストアンサー

$valueへの値のセット方法は?

つまり、どうやってチェックボックスの値の取得をやっているのでしょうか?

このスクリプトはゼロから自分で作っているのですか?
それとも元になるスクリプトがあるのでしょうか?

配列変数とかの前に、フォームからどのようにCGIスクリプトが値を受け取っているのか?が問題です。

Qチェックボックスのvalue値の取得について

過去の質問にいくつか似たようなものはあったのですが、解決出来ませんでしたので質問させて頂きます。cgiでページを作成しています。今回処理したい内容は、一覧表の複数のチェックボックスから、オンになっているvalue値を取得し、その値に一致するナンバーを使って別のファイルのデータを削除するといった処理です。

== html一部内容 ==
<form action='update.cgi' method='POST'>
<input type='checkbox' name='del_0' value='0'>
<input type='checkbox' name='del_1' value='1'>
<input type='checkbox' name='del_2' value='2'>
<input type='submit' name='submit' value='削除'>
</form>

== update.cgiの一部内容 ==
for($loop=2,$loop>=0,$loop--)
{
$del[$loop]=$in{'del_$loop'};
}
データ数が多いのでループさせてすべてのチェックボックスのvalue値を取得したいと思っています。チェックボックスがオフの場合の扱いがいまいち分かっていません。一つずつ例えば
$del_1=$in{'del_1'};
と代入していくとonのもののみ取得できます。しかしループにするとonの値も変数に入りません。
どんな方法でも良いので、すっきりとチェックボックスのvalue値を変数に取得する方法を教えてください。お願い致します。M(v_v)M

過去の質問にいくつか似たようなものはあったのですが、解決出来ませんでしたので質問させて頂きます。cgiでページを作成しています。今回処理したい内容は、一覧表の複数のチェックボックスから、オンになっているvalue値を取得し、その値に一致するナンバーを使って別のファイルのデータを削除するといった処理です。

== html一部内容 ==
<form action='update.cgi' method='POST'>
<input type='checkbox' name='del_0' value='0'>
<input type='checkbox' name='del_1' value='1'>
<input type='...続きを読む

Aベストアンサー

>ご指摘の方法ですと、チェックボックスのvalue値ではなくそのまま0,1,2が代入されてという感じになるような気がするのですが・・・

テスト用に代入しているだけです。
説明不足ですいません。
私が言いたかったのは「$in{'del_$loop'}」では「$loop」の変数が展開されずにただの文字列として扱われてしまう点です。
シングルクォーテーションではなくてダブルクォーテーションでないとまずいということです。

Qチェックボックスから複数のvalueを取り出す

HTMLフォームから、action="file.php"でデータの受け渡し→PHPで送られてきたvalueに応じて文章を出力、というプログラムを作っています。

例:
グループAのラジオボタン1にチェック、送信
→グループAで押されたラジオボタンを送信されたvalueで判別、この場合はvalue==A
→value==Aの場合に表示する文章を変数に受け渡し、その変数で表示

ラジオボタン、テキストボックスのvalueは$_POST['XXX']で取り出せたのですが、チェックボックスのデータだけが取り出せません。こちらの質問を検索したとき、多次元配列という言葉を見かけたのですが、いまいちよく分かりませんでした。
チェックボックスの複数のvalueで、上記の例のような動きを実現させるにはどうしたらいいでしょうか。どなたかご教授ください。

Aベストアンサー

チェックボックスはちょっと特殊

まずHTML部分で、以下のように定義します
<input type="checkbox" name="sample[]" value="test1">test1
<input type="checkbox" name="sample[]" value="test2">test2

ここでは、nameの部分に[]をつけるのがポイント


次にphpで受け取る方法として、
$sample = $_POST["sample"];
で問題ありません。

受け取ったデータを使うときは、$sampleは配列になっていますので、
仮に上記のtest1とtest2両方にチェックが付いているとしたら、
$sample[0]にはtest1が、$sample[1]にはtest2が入っています。

$sampleをforeachで使うか、$sampleのデータ数を調べてforでループさせるなどで使えます。

Q複数のチェックボックスの値を書き込む方法

複数行のチェックボックスの値をそのまま
書き込みたいのですが・・・

.datファイル↓

1234,1

5678,0 

3456,1

7890,0

上記をHTMLとして出力。

1→checkedで出力されるとします。

チェックを入れて、
7890,0

7890,1

にするとそれを1行として保存されるようにしたい
です。

チェックボックスは同じ名前のためform('check')
などで値を取り出したとしても最後の値しか
値を取り出せないでしょう。

画面に複数出た行を全部.datファイルに書き込むには
どうすればよいのでしょうか?

http://www.futomi.com/lecture/form/cgi-pm.html

↑を参照しましたが、チェックの値は@配列で
取れるような気がしましたが、1行を書き込む
方法がわからないので詳しく教えていただければ
幸いです。

言葉だけよりソースがあるとわかりやすいですm(__)m

Aベストアンサー

> $FORM{$rec_id} * 1で$rec_idを使うことに疑問でした。

HTMLの
<input type="checkbox" name="XXX" value="1">
の「XXX」という値が $rec_id に入っているからです。
ようするに、これで「どのチェックボックスなのか」がわかるようになります。

> データはこんな感じで保存されるであっているでしょうか?
> 4,1020,2006/9/13,A
> 3,1020,2006/9/13,D →チェックされていない
> 2,1020,2006/9/13,E,2→最後の2がチェックされた印
> 1,1020,2006/9/13,B,1

「2,1020,2006/9/13,E,2」ではなくて「2,1020,2006/9/13,E,1」です。
(※ちなみにA,D,E,Bというのは「時間」ですか?)
なぜ2ではなくて1なのかというと、HTMLの
<input type="checkbox" name="XXX" value="YYY">
の「YYY」という値が $FORM{$rec_id} に入っているからです。
ソースでは
<input type="checkbox" name="XXX" value="1">
ですから、1が入ります。
また、レコードIDの2を入れる意味はありません。

> チェックされていないときは後ろに0をつけるのをやめました。

それなら
$chkbox = $FORM{$rec_id} * 1;
の「*1」を消すだけです。

> 次に問題なのはまたチェックする画面に戻ってチェックを外して更新してもデータは変わらない点です。

ソースを見ないと原因が解りません。できれば省略せずにソースを見せていただけると、より解りやすいです。



ちなみに、私が下に書いたコード、
-----------------
  my $enabled = $chkbox ? ' checked' : '';
  $html .= qq{<tr><td>$tonum</td><td>$name</td><td>$c_date</td><td>$c_status</td>}
   . qq{<td><input type=checkbox name=chkbox value="1"$enabled></td></tr>\n};
-----------------
の部分、このように書いていますか?
これは、ファイルから読み込んだ$chkboxが「1だったらチェックボックスをオンにする」という処理です。チェックボックスは「checked」を付けないとオンにならないので、$enabledに「checked」を入れる、または入れない、というように処理します。

> $FORM{$rec_id} * 1で$rec_idを使うことに疑問でした。

HTMLの
<input type="checkbox" name="XXX" value="1">
の「XXX」という値が $rec_id に入っているからです。
ようするに、これで「どのチェックボックスなのか」がわかるようになります。

> データはこんな感じで保存されるであっているでしょうか?
> 4,1020,2006/9/13,A
> 3,1020,2006/9/13,D →チェックされていない
> 2,1020,2006/9/13,E,2→最後の2がチェックされた印
> 1,1020,2006/9/13,B,1

「2,1020,2006/9/13,E,2」ではなくて「2...続きを読む

Qチェックボックスの返す値

<INPUT type="checkbox" name="check_1" value="1">
という記述だと、
チェックあるとき→1
チェックないとき→(空白)
となりますよね。
チェックあるとき→1
チェックないとき→0
にしたいときはどうすればよろしいのでしょうか?

Aベストアンサー

チェックボックスやラジオボタンはチェックされていないと何も送信されないので、JavaScript でチェックボックスの値を変更しても意味がありません。

JavaScript依存でよいなら、確実に値が送信される hidden を使って
  <input type="hidden" name="check_1" value="0">
  <input type="checkbox" onclick="this.form.check_1.value=this.checked ? 1 : 0">
のようにすれば、常に 1 か 0 が送信されます。

依存したくない場合は、CGI側でデフォルト値を指定するようにします。例えば Perl で、フォームデータを %FORM に入れている場合、デコード処理の後で
  $FORM{check_1} ||= 0;
のようにします。

QCGIでチェックボックスを使う方法

チェックボックスをCGI(C言語)で使用する方法を教えて下さい。
例えば、HTMLで

<input type="checkbox" name="Check1" value="Sel11" />
チェック1 選択1<br />
<input type="checkbox" name="Check1" value="Sel12" />
チェック1 選択2<br />
<input type="checkbox" name="Check1" value="Sel13" />
チェック1 選択3
<hr />
<input type="checkbox" name="Check2" value="Sel21" checked />
チェック2 選択1<br />
<input type="checkbox" name="Check2" value="Sel22" />
チェック2 選択2<br />
<input type="checkbox" name="Check2" value="Sel23" checked />
チェック2 選択3

というプログラムはCGI(C言語)ではどの様に記述すれば良いでしょうか?

チェックボックスをCGI(C言語)で使用する方法を教えて下さい。
例えば、HTMLで

<input type="checkbox" name="Check1" value="Sel11" />
チェック1 選択1<br />
<input type="checkbox" name="Check1" value="Sel12" />
チェック1 選択2<br />
<input type="checkbox" name="Check1" value="Sel13" />
チェック1 選択3
<hr />
<input type="checkbox" name="Check2" value="Sel21" checked />
チェック2 選択1<br />
<input type="checkbox" name="Check2" value="Sel22" />
チェック2 ...続きを読む

Aベストアンサー

■各データーを受け取ってからどのようにしたいかの処理

そういえば使い方を聞かれはしたけどどのように使いたいのかは聞いてないわ
まあいいやそれでも説明はできるしね

先っきの書き込みで

chek_name[3],*chek_value[3];
の中身はこんな感じになってるはず

chek_name[0]==sel
chek_name[1]==sel
chek_name[2]==NULL

chek_value[0]==Sel21
chek_value[1]==Sel23
chek_value[2]==NULL

そしてさっきの分解法は
チェックを全部ONにしようが一つだけONにしようがONにした数だけ配列に値がはいるようにしてるの

そして次

while(chek_value[i]!=NULL){
check(&chek_value[i],&b,&c);//NO3で作ったHTMLの表示を変える関数
if(strcmp(chek_value[i],"Sel21")==0){ //やっぱりチェックボックスのvalueは数字がいいよ処理がめんどいswichもつかえないし
//sel21がON担ったときどう処理したいかここに記述する
//って言うか処理させたい事の関数を作ってまとめて処理するといいかも
//失敗失敗


}

if(strcmp(chek_value[i],"Sel22")==0){
//sel22がONになったときどう処理したいかここに記述する
}

if(strcmp(chek_value[i],"Sel23")==0){
//sel23がONになったときどう処理したいかここに記述する
}
i++;
}

大体こんな感じだね
まとめると
・チェックがonのとき(offでも処理できるならどうぞ)情報を送信してもらう
・送られてくる情報を分解して各配列に入れる(順番がバラバラでも内容にNUULが入っててもOKな用に)
・onの情報が送られてきたときようの表示変換関数と動作処理関数を作っておく
・HTMLのcheakのvalueは数字のほうが処理しやすい

//・説明する時に作ったソースは私が作ったソースをアレンジして作ったけれどアレンジしたのはコンパイルして動作を確認していないからちゃんと動くか分からない上にバグがあるか分からない
//・たぶんあってるけれど、多少書き間違えてるかもしれないから質問者さんが自分でどこがミスってるか考えてね ミスがあっても本の少しだろうからね アレンジしていない私のソースはバグなし、書き間違えなし

・C言語でCGI作ってる人少ないみたいだから同じC言語使い同士仲良くやろうね。また質問やききたい事があったらよろしくね


疲れました。
手が冷たいです。
今日は寝ます。

■各データーを受け取ってからどのようにしたいかの処理

そういえば使い方を聞かれはしたけどどのように使いたいのかは聞いてないわ
まあいいやそれでも説明はできるしね

先っきの書き込みで

chek_name[3],*chek_value[3];
の中身はこんな感じになってるはず

chek_name[0]==sel
chek_name[1]==sel
chek_name[2]==NULL

chek_value[0]==Sel21
chek_value[1]==Sel23
chek_value[2]==NULL

そしてさっきの分解法は
チェックを全部ONにしようが一つだけONにしようがONにした数だけ配列に値がはいるようにしてるの
...続きを読む

Qチェックボックスの値を取り出したい

こんにちは JavaScript初心者です。
過去ログを見ながらここまでやったのですが、何も表示されません。
?マークの所で引っかかっていると思うのですがどなたかご教授願います。
やりたい事は、チェックボックスのチェックの入った所の値を取り出して表示したいのですが...
3つチェックされていてOKをクリックした時に、ABC と出てくるのが理想です。
<html>
<SCRIPT LANGUAGE="JavaScript">
<!--
function chkform() {
for(i=1; i<=3; i++) {

chkdata(i) = document.form0.chk(i).Value    ?
var aa = chkdata(i)

document.write(aa)
}
}
//--></SCRIPT>

<FORM onSubmit="return chkform(this)" name = "form0">

<INPUT type="checkbox" name="chk" value="A" >
<INPUT type="checkbox" name="chk" value="B" >
<INPUT type="checkbox" name="chk" value="C" >

<INPUT type="submit" value="OK" >
</form>

</html>

こんにちは JavaScript初心者です。
過去ログを見ながらここまでやったのですが、何も表示されません。
?マークの所で引っかかっていると思うのですがどなたかご教授願います。
やりたい事は、チェックボックスのチェックの入った所の値を取り出して表示したいのですが...
3つチェックされていてOKをクリックした時に、ABC と出てくるのが理想です。
<html>
<SCRIPT LANGUAGE="JavaScript">
<!--
function chkform() {
for(i=1; i<=3; i++) {

chkdata(i) = document.form0.chk(i).Value   ...続きを読む

Aベストアンサー

これでは全然ダメです。
もう少し本なり見て勉強しましょう。

function chkform() {

var chkdata = new Array();
var aa = "";
var len = document.form0.chk.length;

for(i=0; i<len; i++) {
if ( document.form0.chk[i].checked ) {
chkdata[i] = document.form0.chk[i].value;
aa += chkdata[i];
}
}
document.write(aa);
}

やるなら、こんな感じで良いのでは?
#私的にはこんなのでも嫌ですが。。。

各行で何をやってるか理解した上でご使用ください。m(__)m

Q(Perl)ReadParseによるハッシュへの格納について

PerlのReadPerseについて質問させてください。
以下少々長いですが、過程を書きます。


<form>タグにより、入力フォームのページをHTMLで作成したとします(form.html)。
その際、<form method="post" action="form.cgi">
と入力しておいて、別途form.cgiを作成するとします。

form.htmlには、<form>タグ内のname属性で、それぞれ'weight' 'height' 'age'という三種類のデータを入力してもらって、取得するようにしています。

そして<input type="submit" value="登録">による、
登録ボタンを押すことで、
form.cgiに処理をさせるようにしています。


form.cgiの中身ですが、まず、最初の三行を書きます。

#!/usr/local/bin/perl
require 'cgi-lib.pl';
&ReadParse(*form);

となるのですが、わからないのが、
三行目の

&ReadParse(*form);

です。
サブルーチンReadParseを引数*formで、
cgi-lib.plから呼び出しているということはわかるのですが、いきなり*formという形で、ハッシュを登場させているあたりがわかりません。(この際、ハッシュ名の前の%を*に変えなければならないことは、一応知っております。理由はわかりませんが。)

そこで質問なのですが、
いきなり、ハッシュであるformを登場させていいものなのでしょうか??

以下、form.cgiの内容です。


#!/usr/local/bin/perl

require 'cgi-lib.pl';
&ReadParse(*form);

$name=$form{'weight'};
$sex=$form{'height'};
$megane=$form{'age'};

print "Content-type: text/html\n\n";
print "<html>\n";
print "<body>\n";

print "体重:${weight}<br>\n";
print "身長:${height}<br>\n";
print "年齢:${age}<br>\n";

print "</body>";
print "</html>";

_END_

PerlのReadPerseについて質問させてください。
以下少々長いですが、過程を書きます。


<form>タグにより、入力フォームのページをHTMLで作成したとします(form.html)。
その際、<form method="post" action="form.cgi">
と入力しておいて、別途form.cgiを作成するとします。

form.htmlには、<form>タグ内のname属性で、それぞれ'weight' 'height' 'age'という三種類のデータを入力してもらって、取得するようにしています。

そして<input type="submit" value="登録">による、
登録ボタンを押すこ...続きを読む

Aベストアンサー

まずは動いてよかったですね。

というか、ケアレスミス・・・
私の書いたソースでは%formではなくて、%inにデータが代入されます。

> $in{$key} = $value;

ここです。ここを、

> $form{$key} = $value;

にすれば%formになりますが。

以前にも申し上げましたが私はAN HTTPDはよくわかりません。
私は基本的にFreeBSDとApacheな人なので・・・
このサービスは便利ですが、ちゃんと勉強したいと思ったらメーリングリストへの参加をお勧めします。
多少厳しい世界なので、あまりの「教えて君」は叱られますけどね。

コピペは・・・コピー元によるのではないでしょうか。
テキストファイルから普通にコピーするのは特に問題ないと思いますが、
ブラウザ上からのコピーなどはあまり思わしくないかもしれないです。

これからいろいろと勉強してみてください。
PerlだけじゃなくPHPやDBなど面白い事はいろいろありますよ。
頑張ってくださいね。

QCGI.pmによるプルダウンメニューのvalue値取得方法について

CGI.pmを使ってプルダウンメニューのvalue値を得たいのですが、ラジオボタンと同じ記述で取得できると聞きましたが上手くいきません。ちなみにラジオボタンはうまくいきました。HTMLの記述が良くないのでしょうか?教えてください。
【HTML】
<select size="1" name="q1">
<option>選択してください</option>
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
</select>
【CGI】
use CGI;
$q = new CGI;
$p1 = $q->param('q1');

Aベストアンサー

その記述で問題なく取れました。
確認済み。

ただ、name が q1 なのに、変数が $p1 で取っているので、そこの記述ミスかも知れません。
print のところを確かめてみてください。


人気Q&Aランキング