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