一天两个q…
我试图得到正确的单选按钮检查当我从mysql数据库拉数据显示在编辑表单。试过各种代码,但每次都得到相同的结果:最后一个值总是检查的那个。迷惑。
我的代码有点复杂,因为是在一个长html字符串内,因此读取php变量的结构。我在页面的顶部有这段代码:
$row = mysql_fetch_assoc($result, MYSQL_ASSOC);
if ($row)
{
print("<p>$se_id is in the database. You can edit this record.</p>");
//get variables to set radio buttons in $form
$type = $row['se_source'];
$checked[$type] = "checked";
等等……HTML字符串中的代码:
<li>
<label for="se_source">Contributed by:</label>
echo ' . $type . '
<input id="se_source" type="radio" id = "radio" name="se_source" value="CNFP" checked = ' . $checked["CNFP"] . '>CNFP</input>
<input id="se_source" type="radio" id = "radio" name="se_source" value="User" checked = ' . $checked["User"] . '>User</input>
echo语句是为了我自己的理智——我知道这里不是真正的echo。但是,即使它显示"echo CNFP",它也总是选中"用户"按钮。所以我知道它得到了那个变量的正确值,但由于某种原因,它默认是列表中的最后一个值。我也试过用"==="。没有快乐。任何启发都很感激,非常感谢你看一看。
当然,被选中属性的值并不重要,仅它的存在就足以将复选框标记为已选中。(HTML5标准证实了这一点)
试试这样写:
<input id="se_source" type="radio" id = "radio" name="se_source" value="CNFP"'.(($checked["CNFP"]) ? 'checked="checked"': '').'>CNFP</input>
你总是在最后一个被检查的原因是因为你设置了每个单选按钮连续被检查。
当您将一组具有相同名称的单选按钮传递给浏览器时,默认行为是最后一个被选中的按钮集将显示为已选中的按钮集。因此,如果您传递了五个单选按钮,并且它们都被设置为选中,则单选集不能有多个选中选项。
当浏览器遇到第二个也被标记为"checked"的单选集选项时,它会从第一个选项中删除"checked"。
你的php代码在这一行完成这个:
$checked[$type] = "checked";
这样做的问题是,你创建的数组将显示为:
se_source => checked
这意味着checked是数组中每个成员的行值
我认为你应该重新考虑你的表结构和流程。我不是为了检查某些内容而创建列,而是使用以下代码:
基本上,你的问题是你需要:
数据库中要匹配的值
单选按钮本身的值
这将允许您:
将数据库值(DBV)与单选按钮值(RBV)进行比较,如果比较结果为真,则将其设置为已检查。
下面的变量是:
$ar_rvbs =要循环遍历并根据存储的DBV进行检查的无线电集值(通常是字符串或布尔值)的数组。
$value =无线电集值数组中每一项的值
$attrval =单选按钮的存储值。它不一定要在数据库中。您可以使用post方法将它从一个页面传递到下一个页面。
$checked =如果DBV在循环时匹配RBV,则将其设置为字符串"checked",否则它只是一个空字符串。
function makeRadioSet($ar_rvbs,$attrval=[DBV] /*A*/
{
foreach ($ar_rvbs as $value)
{
$checked = ''; /*B*/
if ($attrval==$value) /*C*/
$checked = "checked"; /*D*/
echo '<input type="radio" name = "fieldname" value = "'.$value.'" '.$checked.'>';
}
}
/A/将rbv列表作为数组传递,将DBV作为变量传递
/B/Set checked为空字符串,因为这将是集合中所有单选按钮的默认值,除了与DBV匹配的那个
/C/从RBV数组中比较DBV和循环正在处理的当前RBV
/D/如果步骤C的比较返回true,则将检查的字符串插入到输入元素
中。echo负责生成每个单选集选项,并确保与DBV匹配的选项在输入元素标签
您只需要在选中的单选按钮上有"checked"属性。所以你需要修改你的php代码以正确的格式回显。
我认为下面的代码会很好地工作,因为你想要的。您必须添加一个字段来检查是否被检查。
while($result = mysql_fetch_array($queryRes)){
if(chack the radio button chacked field){
echo "<input type="radio" checked="checked" value="value" name="same" />";
}
echo "<input type="radio" value="value" name="same" />";
}
看看这个!这可能是你正在寻找的:)
根据MySQL表的条目生成复选框
$sql = "SELECT name FROM students";
$res = mysql_query($sql);
while($row = mysql_fetch_assoc($res)){
echo "<input type='checkbox' name='students[]' value='".$row['name']."'>"
.$row['name'];
}