php - 将多个选项标记为已选择,数据库结果

标签 php mysql

我有两个表,post_languages(列:languageIDlanguageName)和post_to_languages( languageIDpostID)和一个选择表单。

我想使用数据库中的结果将一个或多个选项标记标记为由 languageID 选择的。不想只显示语言,我想将它们标记为从表 post_languages 提供的语言列表中选择的。

我已经尝试过,但只选择了一种语言,$res仅返回一个ID:

$stmt = $db->prepare('SELECT languageID FROM post_to_languages WHERE postID = :postID');
$stmt->execute(array(':postID'=>$postID));
$result = $stmt->fetch(PDO::FETCH_ASSOC);
$stmt2 = $db->prepare('SELECT languageID, languageName FROM post_languages ORDER BY languageName');
$stmt2->execute();
echo '<select class="post-language form-control" name="postLangID[]" multiple="multiple" required>';
while($row2 = $stmt2->fetch()){
    foreach ($result as $res) {
        if ($row2['languageID'] == $res) {
            $selected = 'selected';
        } else {
            $selected = '';
        }                      
    } 
    echo '<option value="'.$row2['languageID'].'" '.$selected.'>'.$row2['languageName'].'</option>';
}
echo '</select>';

最佳答案

第一个原因是 $stmt 查询。您可以按 postID 字段进行过滤。 第二个是 $res 变量的类型,我认为它是一个 array。请尝试var_dump它。 我认为它可能看起来像:

foreach ($result as $res) {
        if ($row2['languageID'] == $res['languageID']) {
            $selected = 'selected';
        } else {
        $selected = '';
    }                      
} 

如果$postID是一个Array,您也可以尝试以下代码:

$place_holders = implode(',', array_fill(0, count($postID), '?'));
$stmt = $db->prepare("SELECT languageID, languageName, IF(post_languages.languageID IN (SELECT post_to_languages.languageID FROM post_to_languages WHERE post_to_languages.postID IN ($place_holders)), 1, 0) as selected FROM post_languages ORDER BY languageName");
$stmt->execute($postID);
echo '<select class="post-language form-control" name="postLangID[]" multiple="multiple" required>';
while ($row = $stmt->fetch()) {
    if ($row["selected"]) {
      echo '<option value="'.$row['languageID'].'" selected>'.$row['languageName'].'</option>';
    } else {
      echo '<option value="'.$row['languageID'].'">'.$row['languageName'].'</option>';
    }
}
echo '</select>';

关于php - 将多个选项标记为已选择,数据库结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41847297/

相关文章:

php - 在 zend 框架中设置 cookie

PHP 时间领先 MySQL 时间

java - SQL : Is there any way to read BLOBs from a database into an array instead of FileOutputStream in java?

python - MYSQL 和 python 错误

PHP二叉搜索树,如何遍历

javascript - 从 div 动态获取 iFrame 代码

python - 无法在python3 virtualenv中安装mysqlclient

java - 为什么这个 INSERT 添加了一个额外的空行?

php - 从字符串中获取符号列表

php - 将 PHP 数组插入 MYSQL