• 締切済み

ラジオボタン選択内容を取得し二つの処理をしたい場合は?

分かりづらい質問ですいません。 フォームのラジオボタンで選択された値に対し、 二つの処理を加えたいのですがどのようにしたらよいでしょうか? 例えば、 <form action=\"$script\" method=\"POST\"> <input type=hidden name=mode value=\"kekka\"> <input type=radio name=$queno value=\"ans1\" id=\"ad$no\" checked>はい <input type=radio name=$queno value=\"ans2\" id=\"ad$no\">いいえ </form> このフォームでは値はsub kekkaで処理され、ポイント計算をするとします。 この選択された値をもう一方のsub kaisetuにて値の一覧表示をさせたいのですが。 例:心理テストの結果表示で Q1は『はい』を選択 Q2は『いいえ』を選択 sub kaisetuに 同じ値を受け渡すにはどのようにしたら良いでしょうか? どちらか一方ではうまく処理できるんですが、二つ同時には処理できないようです。 どなたか教えてください。

みんなの回答

  • arcsin
  • ベストアンサー率70% (28/40)
回答No.5

あれ、参考URLが消去されてしまったようですね^^; 繰り返してしまいますが、変数「$queno」は質問1と質問2で違う値がくるようにしていますか??同じ値にしている場合は#4の方がおっしゃっているように、デコード時に上書きされてしまいます。 もし、 質問1で$queno=1 質問2で$queno=2 であるとすればデコード時に(localやmy 変数でない)連想配列%inを使った場合は、例えば $in{'1'} $in{'2'} という形でどこでも参照できると思いますよ。 まず第一に1つめのサブルーチンではちゃんと2つの値を取得できていますか? どのような形でフォームからもらったデータを変数に格納していますか?

soul4u
質問者

お礼

この状態ではデータを変数に格納出来ていないのでしょうか? (↓この部分での受け渡しは格納されない?) print "<input type=hidden name=mode value=\"kekka\">\n"; あと出来ましたら連想配列%inの使い方を詳しく教えていただけませんか? 初心者なのに改造を試みる自体無謀なのかもしれませんが、よろしくお願い致します。m(_ _)m

soul4u
質問者

補足

事務局にURLを消去されてしまいました (^_^;) 一応 $queno = $queno + 1; としてありますので、HTMLの書き出しの場合は Q1=1、Q2=2、... といった具合になっています。 スクリプトは以下の通りです。 sub question { &lock; # ログを開く open(IN,"$question") || &error("Open Error : $question","LK"); @lines = <IN>; close(IN); &header; print "<form action=\"$script\" method=\"POST\">\n"; print "<input type=hidden name=mode value=\"kekka\">\n"; print "<table width=$tw border=5 cellpadding=10 cellspacing=1 bordercolor=#FF9900>\n"; foreach (@lines) { ($q_no,$que,$ans1,$ans2,$ans3,$po1,$po2,$po3,$exp) = split(/<>/); $queno = $queno + 1; print "<tr><td VALIGN=top NOWRAP align=center bgcolor=><font color=\"$qno\"><B>Q$queno</B></font></td>\n"; print "<td><font color=\"$qtext\">$que</font></td>\n"; if ($ans1 ne ""){ $no = $no + 1; print "<td align=center NOWRAP bgcolor=><input type=radio name=$queno value=\"ans1\" id=\"ad$no\" checked>\n"; print "<a onClick=\"document.forms[0].ad$no.checked ?document.forms[0].ad$no.checked=false:document.forms[0].ad$no.checked=true\">$ans1</a></td>\n"; } if ($ans2 ne ""){ $no = $no + 1; print "<td align=center NOWRAP bgcolor=><input type=radio name=$queno value=\"ans2\" id=\"ad$no\">\n"; print "<a onClick=\"document.forms[0].ad$no.checked ?document.forms[0].ad$no.checked=false:document.forms[0].ad$no.checked=true\">$ans2</a></td>\n"; } if ($ans3 ne ""){ $no = $no + 1; print "<td align=center NOWRAP><input type=radio name=$queno value=\"ans3\" id=\"ad$no\">\n"; print "<a onClick=\"document.forms[0].ad$no.checked ?document.forms[0].ad$no.checked=false:document.forms[0].ad$no.checked=true\">$ans3</a></td>\n"; } } print "</table>\n"; print "<br><br>\n"; print "<input type=hidden name=queno value=\"$queno\">\n"; print "<INPUT TYPE=submit VALUE=\"診断する\"> <INPUT TYPE=reset VALUE=\"やり直す\">\n"; print "</form>\n"; print "<a href=\"$home\" target=\"_top\">[戻る]</a> <a href=\"$script?mode=message\">[感想を読む]</a><BR><a href=\"$script?mode=admin1\">[管理用]</a>\n"; &footer; &unlock; exit; }

回答No.4

まず、Q1とQ2のパラメータの名前が同じ($queno)なので、$quenoのvalueは上書きされます。 なんだか怪しいところが多数見受けられますが、基本的なPerlの文法は理解されてますか?

soul4u
質問者

お礼

お答え頂きありがとうございます。 Perlは正直いって初心者です。 どのようにしたら解決できるのかさっぱり分からない状態です。 一応自分なりにスクリプトをいじってみましたが この部分だけ思うように動きません。 何とかお願いします!!

  • arcsin
  • ベストアンサー率70% (28/40)
回答No.3

的外れかもしれませんが、$quenoが問題ごとに1,2という風に値が違うならば、 $in{'1'} $in{'2'} という風にして参照できませんか?

soul4u
質問者

お礼

お答え頂きありがとうございます。 一応変えてみたのですが参照できませんでした。

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.2

>一度処理された内容を表示させる ?????? 受け取ったデータではなくて、#結果表示画面の出力内容という意味ですか?それとも??? html formだけでは状況説明になっていません。 メインルーチン、およびそれぞれのサブルーチンのスクリプトソースを全部載せてください。 postされたデータを、そのまま順に処理させるなら以下の手順でいいはずなんですけど? %in = &ReadParse(); ### cgi-lib.pl でデータ取得の場合 #(必要なら文字コード変換処理をここに)# &kekka(%in); &kaisetu(%in) まさか、 sub kekka{ #略 exit; } とかしてる訳じゃないよね。

soul4u
質問者

補足

度々すみません。どうも説明がうまくいかなくて。 一度処理された内容を表示させる、ではなく、受け取ったデータです。すみませんでした。

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.1

perl掲示板だから、perlの話ですよね? 引数受け渡し法が解らないという意味ですか? &kaisetu(%list); sub kaisetu{ undef %uketori; %uketori = @_; }

soul4u
質問者

お礼

回答していただいてありがとうございます。 ちょっと質問を補足すると、まず sub question{ <form action=\"$script\" method=\"POST\"> <input type=hidden name=mode value=\"kekka\"> Q1 <input type=radio name=$queno value=\"ans1\" id=\"ad$no\" checked>はい <input type=radio name=$queno value=\"ans2\" id=\"ad$no\">いいえ Q2 <input type=radio name=$queno value=\"ans1\" id=\"ad$no\" checked>はい <input type=radio name=$queno value=\"ans2\" id=\"ad$no\">いいえ <INPUT TYPE=submit VALUE=\"診断する\"> <INPUT TYPE=reset VALUE=\"やり直す\"> </form> } という質問で診断ボタンを押すと sub kekka{ #ポイント計算し #結果表示画面 } に値を受け渡します。 その後 sub kaisetu{ #解説文の表示と各設問ごとの選択された値を表示 } というような流れでスクリプトを組みたいのですが、一度処理された内容を表示させるには一時的にログファイルに書込みしなければ表示されないのでしょうか? できればログへの書込みはせずにそのまま受け渡したいのですが。 よろしくお願いします。

関連するQ&A