【问题标题】:Assigning 'selected' to options of multiple select element将“选定”分配给多个选择元素的选项
【发布时间】:2015-08-04 20:36:25
【问题描述】:

我在 mysql 中存储了一个逗号分隔的列表(我在做出选择后使用了 implode 并存储了这个逗号分隔的列表)。我的问题现在是在刷新页面时将 'selected="selected"' 应用于代表先前选择的每个选项。我使用了一个while循环来创建选择框。我尝试在我的while循环中使用foreach循环来检查'while'值是否在'exploded'先前的选择中。它只为我的分解列表中的最后一项提供了“选择”的值。谁能阐明如何解决这个问题?我想我误解了 foreach 和可能的爆炸功能。

【问题讨论】:

  • 你能发布一些代码示例吗?
  • 如您所见,将多个值存储在单个列中只会让您头疼。你能改变你的数据库设计吗?
  • 你的意思是在表单提交之前?但是,为什么在单个 MySQL 列中有一个逗号分隔的列表?!

标签: php mysql select


【解决方案1】:

我的代码,它并不完美,但可以工作!:

$var_options = array ( 1 => 
array ('name' => "None", 'varid' => "0"),
array ('name' => "Cars", 'varid' => "1"),
array ('name' => "Motos", 'varid' => "2"),
array ('name' => "Trucks", 'varid' => "3"),
); 

$mysqlvalue = "2,3"
$mysqlvalue= explode(",",$mysqlvalue);

echo '<select name="vehicles[]" multiple size="6">'."\n";

foreach ($var_options as $arraydes) {
$idvariable = $arraydes[varid];
$namevariable = $arraydes[name];    

    $isSelected = in_array($idvariable,$mysqlvalue) ? "selected='selected'" : "";
    if($isSelected != ""){
        echo "<option {$isSelected} value='{$idvariable}'>{$namevariable} (SELECTED)</option>\n";
    } else {
        echo "<option value='{$idvariable}'>{$namevariable}</option>\n";
    }

}
echo "</select>\n";

并保存到mysql:

$vehicles= implode(', ', $_POST['vehicles']);

【讨论】:

    【解决方案2】:

    假设您之前选择的项目位于变量 $selected 中,您的 while 如下所示:

    $selected = array('one', 'two');
    while(//your fech or something i presume storing it in $row) {
        $isSelected = in_array($row['value'],$selected) ? "selected='selected'" : "";
        echo "<option {$isSelected} value='{$row['value']}'>{$row['name']}</option>";
    }
    

    【讨论】:

    • 谢谢大家。是的 Liam 和 Juergen 我不应该在字段中存储逗号分隔的值,但我不知道如何处理附加表。 @taxicala,一旦我将您的数组变量 $selected 添加到 in_array 函数中,您的解决方案就起作用了。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2016-03-08
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多