• 締切済み

チェックボックスのデータをdatファイルに保存する方法

更新記録CGI(perl)を改造中です。 修正画面でチェックボックスにチェックを入れておくと確認画面である文字列を表示させるというのを実現させたいです。 表示させる方はIF文で、 if ($check ==1){普通に表示}else {別の文字列を表示} とすることで何とかなると思うのですが、このチェックボックスの情報の保存方法がよくわかりません。 記事登録処理の部分、 foreach (@data) { ($contents,$date,$year,$month,$day,$comment,$check) = split(/<>/); if ($in{'contents'} eq $contents && $in{'year'} eq $year && $in{'mon'} eq $month && $in{'day'} eq $day && $in{'comment'} eq $comment $in{'check'} eq $check ) { &error("記録済みです"); } } このあたりが、データの保存を指示している場所だと思うのですが、このままだと、datファイルには「in{'check'}」と保存されてしまいます。 これをどうやったらチェックボックスにチェックが入っているという風に保存できるのでしょうか? また、修正画面でチェックボックスにチェックが入っている場合はチェックが入った状態で表示する(その情報表示する)という風にしたいのですが、これまたうまくできません。 多分、 if ($no eq $in{'edit_no'}){~~$e_check = $check;~~} <input type=\"checkbox\" name=\"e_check\" size=5 value=\"$e_check \">\n"; この二つが関係していると思うのですが… 単純に、チェックボックスにチェックを入れて保存したら、datファイルにそのデータが保存され、チェックが入っていれば、修正画面・表示画面にてそれぞれのアクションを起こしてほしいというものです。 抜けてる情報などありましたら指摘してください。すぐに書き込みします。 よろしくお願いします。

みんなの回答

  • estea
  • ベストアンサー率44% (39/87)
回答No.2

まず、$in{'check'}だけど、 保存時に ' ~ $in{'check'} ~' とか ' で囲まれてるとか、 q( ~ ) となっているんでしょうか? その場合は ' の代わりに " にするとか q() の代わりにqq() にするとかで回避できます。 >抜けてる情報 ~ 何処かでファイルに保存している記述があるのでその部分が要ります。 で、チェックがある場合それを HTML にも表示させたいって事みたいですが、チェックされている場合は <input type=checkbox ~ > に checked を入れます。 多分 value=~ を入れたのでは無理かと。 >抜けてる情報 ~ 「チェックボックスにチェックが入っていることを表示させたい」部分のコードが要ります つまり > <input type=\"checkbox\" name=\"e_check\" size=5 value=\"$e_check \">\n"; の周囲。

master-3rd
質問者

お礼

すみません。間違え発見してしまいました。 ここを if($check ==1){ print "<input type=\"checkbox\" name=\"s_out\" size=5 value=\"checked\">\n"; }else{ print "<input type=\"checkbox\" name=\"s_out\" size=5>\n"; } でOKでしょうか? //////// ↓正しくは ////////// ここを if($check ==1){ print "<input type=\"checkbox\" name=\"check\" size=5 value=\"checked\">\n"; }else{ print "<input type=\"checkbox\" name=\"check\" size=5>\n"; } でOKでしょうか? でした。 よろしくお願いします。

master-3rd
質問者

補足

返答ありがとうございます。 >何処かでファイルに保存している記述 これは sub edit1 { # ログファイル読み込み open (FILE, "$data") || &error("ファイルが開けません"); @data = <FILE>; close(FILE); # 二重投稿の禁止 $flag=0; foreach (@data) { ($contents,$date,$year,$month,$day,$comment,$image,$new,$no,$url,$name,$lot,$check) = split(/<>/); *****以下、下の方の補足に書かれた文章に続く***** この部分でしょうか? q( ~ )というのは見当たらないですね。 ><input type=checkbox ~ > に checked を入れます。 ということは、if分で分けないといけないと言う事でしょうか? 修正画面でチェックボックスを確認するとき、 if ($check ==1){checked}else {指定無し} としたら良いと言う事でしょうか? >「チェックボックスにチェックが入っていることを表示させたい」部分のコード ------------------------ print "<tr>\n"; print "<td align=\"right\">\n"; print "チェック</td>\n"; print "<td>:</td>\n"; print "<td>\n"; print "<input type=\"checkbox\" name=\"check\" size=5 value=\"$e_check\">\n"; print "</td>\n"; print "</tr>\n"; ------------------------------- この部分でしょうか? ここを if($check ==1){ print "<input type=\"checkbox\" name=\"s_out\" size=5 value=\"checked\">\n"; }else{ print "<input type=\"checkbox\" name=\"s_out\" size=5>\n"; } でOKでしょうか? あとは、ログにうまく保存する方法ですね。

回答No.1

まず、If文の終わりの $comment $in{'check'} eq $check ) ですが、 $comment && $in{'check'} eq $check ) ではないかと(&&が抜けている?!) どうして in{'check'}が保存されるかは このIf文の後を見ないとわからないですね。

master-3rd
質問者

補足

返答ありがとうございます。 …数日前に補足を入力したはずなのに、何も返答がないなぁと思ってたら、補足が載ってなかったです。???何かエラーが生じたのかな? ということで、もう一度掲載します。 まず、&&ですが、ほかにもいくつかの項目があるのですが、文字数制限を気にして必要ないところは削除したんです。そのときに間違って削除してしまいました。 if ($in{'contents'} eq $contents && $in{'year'} eq $year && $in{'mon'} eq $month && $in{'day'} eq $day && $in{'comment'} eq $comment&& $in{'image'} eq $image && $in{'url'} eq $url && $in{'name'} eq $name && $in{'lot'} eq $lot && $in{'check'} eq $check ) { &error("記録済みです"); } } $count = shift @data; $count = $count + 1; if ($in{'new_contents'} ne ""){ $contents = $in{'new_contents'};} else { $contents = $in{'contents'};} unshift (@data,"$contents<>$in{'year'}/$in{'mon'}/$in{'day'}<>$in{'year'}<>$in{'mon'}<>$in{'day'}<>$in{'comment'}$comment2<>$in{'image'}<>new<>$count<>$in{'url'}<>$in{'name'}<>$in{'lot'}<>$in{'check'}<>\n"); この下は更新日順にソートとなっています。 以上よろしくお願いします。

関連するQ&A