PHPでデータベースから値を取得したチェックボックスを作成しました。

値をチェックし送信ボタンを押しても、その状態を維持したいです。
しかし、以下のコードでは上手くいきませんでした。
どなたかアドバイスを下さい。よろしくお願いします!

>||
$p_genres=$_POST["genre"];

<dt>ジャンル<span class="required">必須</span></dt>
<dd>
<?php genrebox($p_genres); ?>
</dd>


function genrebox($p_genres) {
$sql = "SELECT id,genre_name as name FROM genre ORDER BY id";
$result = mysql_query($sql);
$genres = array();
if ($result !== FALSE && mysql_num_rows($result)) {
//レコードを1行ずつ連想配列として抜き出す
while ($genre = mysql_fetch_assoc($result)) {
$genres[] = $genre;
}
}
foreach ($genres as $genre) {
$checked = "";
foreach ($p_genres as $value) {
if ($genre["name"] == $value) {
$checked = "checked";
}
}
echo "<input type=\"checkbox\" id=\"{$genre["id"]}\" name=\"genre[]\" value=\"{$genre["name"]}\" $checked/>
<label for=\"{$genre["id"]}\"> {$genre["name"]} </label>";

echo '<br/>';
}
}
||<

回答の条件
  • 1人10回まで
  • 登録:
  • 終了:2012/01/24 23:27:04
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:windofjuly No.1

回答回数2625ベストアンサー獲得回数1149

ポイント100pt

"id"と"name"の部分で分断されちゃうので、それぞれ、
'id'と'name'に変更しましょう

echo "<input type=\"checkbox\" id=\"{$genre['id']}\" name=\"genre[]\" value=\"{$genre['name']}\" $checked/>
<label for=\"{$genre['id']}\"> {$genre['name']} </label>";

複数のタグを1行で出力したり、
固定文字列と変数が入り組むとややこしくなるので、
私なら下記のように書きます

echo '<input type="checkbox" id="' . $genre["id"] . '" name="genre[]" value="' . $genre["name"] . '" ' . $checked . ' />';
echo '<label for="' . $genre["id"] . '"> ' . $genre["name"] . '</label>';
他5件のコメントを見る
id:windofjuly

なぜか末尾に空白が入ってますが、もしかして、
文字数をあわせるために最初から入れてあるものではないですか?

例えば、下記のような具合にしてどうですか?
if (trim($genre["name"]) == trim($value)) {

2012/01/21 20:43:36
id:kyouryukun

いけました!
本当にありがとうございます。
データベースにある値に「スペース」が含まれていたのが原因でした。
これからは、もっと細かくエラーを探していきます。
本当に助かりました!!

2012/01/21 20:53:12

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません