我的问题扩展了这篇文章的答案,否则我找不到我正在寻找的内容。
从 mySQL 表(动态)中提取选项时,如何在复选框列表中自动选择(选中)选项?
这是我到目前为止所拥有的:
从表格中拉出委员会(通信):
while ($row = mysql_fetch_assoc($comm)){
foreach ($row as $v){
$comms[] = $v;
}
}
使用整洁的PHP输出漂亮的HTML(我需要帮助的部分):
foreach ($comms as $comm){
?????????
}
我怎样才能输出类似的东西?
<input type="checkbox" name="committee" value="blue" checked="checked" />blue<br />
<input type="checkbox" name="committee" value="green" />green<br />
<input type="checkbox" name="committee" value="orange" />orange<br />
<input type="checkbox" name="committee" value="purple" checked="checked" />purple<br />
假设您的颜色存储在数组中,并且您的数据以数组的形式返回(如果您使用 mysql_*
函数,则可能不是这种情况),您可以打印出每个复选框,然后比较其值以查看它是否在"选中"颜色列表中:
<?php
$colors = array('blue', 'green', 'orange', 'purple');
$data = array('blue', 'purple');//array pulled from database.
foreach($colors as $color): ?>
<input type="checkbox" name="committee" value="<?= $color ?>" <?= in_array($color, $data) ? 'checked="checked" ' : '' ?>/><br />
<?php endforeach; ?>
顺便说一下,您应该停止使用mysql_*
函数。它们正在被弃用。而是使用 PDO(从 PHP 5.1 开始支持)或 mysqli(从 PHP 4.1 开始支持)。如果您不确定要使用哪一个,请阅读本文。
您需要检查几件事。如果有人已经尝试提交表单,那么他们的回复将是$_REQUEST
($_POST
或$_GET
,具体取决于表单的提交方式);然后,您可以将每一行写为:
<input type="checkbox" name="committee[]" value="green" <?php if ($_REQUEST['committee'] == 'green') { echo "checked"; } ?> />green<br />
如果它来自数据库,您可以签入$comms
"
<input type="checkbox" name="committee[]" value="green" <?php if (in_array($comms, 'green') { echo "checked"; } ?> />green<br />
您可以通过提前确定是否重新提交,并使用正确位置的结果填充单个数组来使代码更有效率:
<?php
if ([form is submitted]) {
$comms = $_REQUEST["committee"];
} else {
$comms = getCommsFromDatabase();
}
?>
这也使您有机会从 _REQUEST 美元开始清理输入。
while ($row = mysql_fetch_assoc($comm)){
foreach ($row as $v){
$comms = $v;
}
}
您可以在其中打印值,假设$v具有属性 已检查
foreach($coms as $key => $value)
{
$checked = "";
$color = $value['color'];
if($value['checked'] == 'checked')
$checked = "checked = 'checked'";
echo "<input type='checkbox' name='committee' value='$color' $checked />$color<br />";
}