- ベストアンサー
更新画面での複数のcheckedについて
- 複数チェック可能のチェックボックスにチェックさせ、データベースに格納しています。レコードを更新する際にwebフォームではあらかじめ既に入力された値にはチェックを入れておきたいので以下のように書いています。
- ユーザがjobに関してチェックするのが1つの時は更新画面でそのとおりにチェックされるのですが、複数個の場合はチェックされません。複数個チェックされているように表示したいのですが、やり方がわかりません。ここを参照しなさい、とかこういう関数を使うとかだけでもご教示いただけると助かります。
- 環境は以下のとおりです。redhatLinux apache1.3.20 postgres7.0.2 php4.0.6
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
すると、複数のjobは文字列として、 $job='プログラマ,SE,プロジェクトマネジャー'; のように格納されているのですね? 本来であれば、explode()等で配列にばらしてチェックするのですが、今回の場合は "checed"を入れることだけが目的ですね。 であれば、if分の内容を書き換えればいいと思います。 if(mb_ereg($job,"プログラマー")) { print "checked"; } と言った感じで。 しかしこれはマルチバイト文字を扱えると言うことが前提です。mbregexは使えますか? 多分これがいちばん簡単ですが、マルチバイトが使えないときは、次を考えましょう(^^;
その他の回答 (3)
- kusukusu
- ベストアンサー率38% (141/363)
#3 の解答は間違えです よく考えると、職業の項目に ・プログラマー ・Cプログラマー ・Javaプログラマー 等があれば if(mb_ereg($job,"プログラマー")) ではすべてヒットしてしまいますね(^^; やはり配列にばらして、一つずつチェックしないといけません。
- kusukusu
- ベストアンサー率38% (141/363)
いえ(^^; 補足要求の意図が伝わらなかったようです。 > 登録のフォームでは > <input type="checkbox" name="job[]" multiple value="プログラマ">プログラマ > 以下複数のチェックボックスを書き、 > 受け取るphpでは > $job = $HTTP_POST_VARS['job']; ここまではOKです。 > と変数にいれてデータベースでのデータタイプをtextで格納しています。 聞きたかったのは、複数のチェックがあったときに、どの様にDBに格納しているのか…つまりこの後が聞きたかったのです。 ex1) foreach($job as $val) { pg_query("INSERT INTO table_name VALUES(……,'$val')"); } として、複数のレコードとして入れているのか。 ex2) $n=sizeof($job); for($i=0;$i<$n;++$i) { $job .=",".$job[$i]; } pg_query("INSERT INTO table_name VALUES(……,'$job')"); として $job="プログラマ,SE,プロジェクトマネジャー"; のように一つのカラムとしてDBに登録しているのか と言うことです。 例1,2以外の方法かもしれませんが。
補足
すみません、勘違いしてました。 for($i = 0; $i < count($job); $i++){ $job1 = implode($job,","); } $sql = "insert into table value('$job','$name')"; としておっしゃっておられるように一つのカラムとして 格納しています。
- kusukusu
- ベストアンサー率38% (141/363)
> 複数個チェックされているように表示したいのですが、やり方がわかりません。 まず、複数個チェックされているときには、どうDBに格納されているのですか?
補足
登録のフォームでは <input type="checkbox" name="job[]" multiple value="プログラマ">プログラマ 以下複数のチェックボックスを書き、 受け取るphpでは $job = $HTTP_POST_VARS['job']; と変数にいれてデータベースでのデータタイプをtextで格納しています。
お礼
ありがとうございます! マルチバイトの文字列にパターンマッチを行うということですね。 たまたま職業の項目が プログラマ ライター デザイナー などなど のような感じなので今回はこれでいけると思います。 やってみます。