人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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/1件

▽最新の回答へ

1 ● うぃんど
●100ポイント ベストアンサー

"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>';

ぱんたまさんのコメント
早速のご回答ありがとうございます。 windofjuly さんの通りにやったのですが、チェックをつけた値が「選択済み」になりませんでした。まだ悪いところがあれば、ご指摘願います。

うぃんどさんのコメント
$p_genres の中身を出力して、正しく受け取っているかどうかを確認することと、 出力されたHTMLのソースコードが正しいかを確認してみてください

ぱんたまさんのコメント
きちんと受け取っていることを確認できました。 ここが怪しいようです。 >|| foreach ($p_genres as $value) { if ($genre["name"] == $value) { $checked = "checked"; } } ||< 原因を探っていきます。

うぃんどさんのコメント
>ここが怪しいみたいです。 >|php| $checked = ""; foreach ($p_genres as $value) { if ($genre["name"] == $value) { $checked = "checked"; } echo '[' . $genre["name"] . ']'; echo '[' . $value . ']'; echo '[' . $checked . ']'; echo '<br />'; } ||< 角括弧は空白の場合などを考慮していれてあります

ぱんたまさんのコメント
試しに、アクションを選択してボタンを押しましたら、 [アクション ][アクション ][] [SF ][アクション ][] って表示されます。 [アクション ]=[アクション ]であるのに、 なぜか、「checked(選択済み)」にならないんでしょうか?

うぃんどさんのコメント
なぜか末尾に空白が入ってますが、もしかして、 文字数をあわせるために最初から入れてあるものではないですか? 例えば、下記のような具合にしてどうですか? if (trim($genre["name"]) == trim($value)) {

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

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ