0

2つのMysqlテーブル(tbl_subjectsとtbl_courses)があります。

tbl_subjects
id | subject_name |
1  | english      |
2  | maths        |
3  | Physics      |

tbl_courses
id | my_subjects |
1  | 1,3         |

複数選択リストのhtmlおよびphpコード

$sql_subjects = mysql_fetch_array(mysql_query("SELECT * FROM tbl_subjects WHERE id IN ( 1,3 )"));

<select name="subjects[]" multiple="multiple" size="7">
<?php
$sql = mysql_query("SELECT * FROM tbl_subjects");
while($row = mysql_fetch_array($sql ))
{
$id = $row['id'];
$subject_name = $row['subject_name '];
?>
<option value="<?php echo $id; ?>" <?php if($sql_subjects['id'] == $id) echo 'selected="selected"'; ?>> <?php echo $subject_name; ?></option>
<?php } ?>
</select>

上記のコードでわかるように、事前に選択された値が2つあるはずですが、最初の値の結果しか得られませんでした。画像でも確認できます。ここに画像の説明を入力してください

4

2 に答える 2

3
$sql_subjects=array();    
while($row = mysql_fetch_array(mysql_query("SELECT * FROM tbl_subjects WHERE id IN ( 1,3 )"))){
    $sql_subjects[] = $row['id'];
}

そしてあなたのhtml部分で

<option value="<?php echo $id; ?>" <?php if(in_array($id,$sql_subjects) echo 'selected="selected"'; ?>> <?php echo $subject_name; ?></option>
于 2012-10-01T08:18:18.167 に答える
1

これは、mysql_fetch_array()が最初の行のみを生成するためです。ループを使用してすべての行を取得する必要があります。

代わりに、IDを知っているので、データベースから再度取得する理由は、in_array()を使用して確認します。

<select name="subjects[]" multiple="multiple" size="7">
<?php
    $ids = array(1,2);
    $sql = mysql_query("SELECT * FROM tbl_subjects");
    while($row = mysql_fetch_array($sql)){
        $id = $row['id'];
        $subject_name = $row['subject_name'];
    ?>
    <option value="<?php echo $id; ?>" <?php if(in_array($id,$ids)) echo 'selected="selected"'; ?>> <?php echo $subject_name; ?></option>
    <?php
    } 
?>
</select>
于 2012-10-01T08:28:54.683 に答える