電子書籍の厳選無料作品が豊富!

Perlで質問です。

下記のようなフォームで、A~Fまでのチェックボックスを選んで「test.cgi」にデータを送ります。

<HTML>
<BODY>
<FORM action="test.cgi">
<input name="q6_1" type="checkbox" value="A">A<br>
<input name="q6_2" type="checkbox" value="B">B<br>
<input name="q6_3" type="checkbox" value="C">C<br>
<input name="q6_4" type="checkbox" value="D">D<br>
<input name="q6_5" type="checkbox" value="E">E<br>
<input name="q6_6" type="checkbox" value="F">F<br>
<input name="q6_7" type="checkbox" value="G">G<br>
<INPUT type="submit">
</FORM>
</BODY>
</HTML>

次の画面で、選ばれた物の確認画面を変数「$work6」を呼び出して表示したいと思っています。

<HTML>
<BODY>
A / B / C / D / E / F
</BODY>
</HTML>

この処理をperlを使ってやりたいのですが、どうやったらいいのかわかりません。
for を使って「q6_1~7」を呼び出し、それぞれの最後に「 / 」を追加したあとファイルハンドルを使って、変数「$work6」に追加上書きして表示、と言うことをすれば良いのだろうと、下記のソースを書いて見ましたが、うまくいきませんでした。
(たぶん間違いだらけだと思いますが…。)

open(IN, ">>$work6");
for ($q6 = 1; $q6 < 7; $q6++){
if ($FORM{'q6_$q6'} ne '') {
print IN "$FORM{'q6_$q6'}." / "";
}
}
close(IN);

つたない質問だと思いますが、
よろしくお願いします。

A 回答 (2件)

おっと、もう一箇所



print IN "$FORM{'q6_$q6'}." / "";

ここは文字列部分の表記の仕方がおかしいです。

print IN $FORM{'q6_'.$q6} ." / ";

ですね。

#私の回答部分では"/"と書いてしまったので
#" / "と置き換えておいてください。
    • good
    • 0
この回答へのお礼

ありがとうございます!
すごい!すごい!出来ました!

チェックボックスが100近くあるフォームを作っていて、途方に暮れていました。
力業で1つ1つ処理しようと思っていましたが、非常に助かります。

教えて頂いた修正点を見ると、私が作ったソースも大幅に外れているわけではなかったんですね…。

改良点もお教え頂いてありがとうございます。
早速使わせて頂きます。

ありがとうございました。
また質問したときにはよろしくお願いします。
では失礼します。

お礼日時:2005/10/14 01:17

とりあえず間違ってる部分は


$FORM{'q6_$q6'}
    ↑ここの部分です。

$FORM{'q6_'.$q6}
にすれば問題はありません。

あと、q6_1~q6_7までありますが、質問の方法だと
q6_6までしか出力されないですが、いいのでしょうか?

for ($q6 = 1; $q6 <= 7; $q6++){
          ↑"="が必要ですね。

さらに、
if ($FORM{'q6_$q6'} ne '') {
}
で出力しているので、チェックされていない部分は
詰めて出力されますがよかったのですか?
A/C/F/
という感じになります。

A/B/C/D/E/F/G
とするにはこんなのはどうでしょう?
#インデントは全角スペースですのでコピーするときは
#注意してください。

$work6="";
for($i=1;$i<=7;$i++){
 if( $i != 1 ){
  $work6 .= "/";
 }
 $work6 .= $FORM{"q6_".$i};
}

という感じでいいんじゃないでしょうか。
    • good
    • 0

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