繁体   English   中英

使用PHP从MySql DB中预先选择的Multiselect

[英]Pre-Selected Multiselect from MySql DB Using PHP

我有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个预先选择的值,但是我只得到第一个的结果。您也可以在图像中看到 在此处输入图片说明

$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>

这是因为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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM