一天内两个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 CNFP”,也总是检查“用户”按钮。所以我知道它正在为该变量获取正确的值,但由于某种原因它默认为列表中的最后一个值。我也试过“===”。没有快乐。任何启示都表示赞赏,非常感谢你看一看。
答案 0 :(得分:2)
AFAIK,checked属性的值并不重要,只有它的存在足以将复选框标记为已选中。 (HTML5 standard证实了这一点)
尝试这样的事情:
<input id="se_source" type="radio" id = "radio" name="se_source" value="CNFP"'.(($checked["CNFP"]) ? 'checked="checked"': '').'>CNFP</input>
答案 1 :(得分:0)
您需要在所选单选按钮上具有“已选中”属性。所以你需要修改你的PHP代码以正确的格式回显。
答案 2 :(得分:0)
我认为波纹管代码可以正常运行。你必须添加一个字段来检查它是否被检查。
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" />";
}
答案 3 :(得分:0)
您最后检查最后一个的原因是因为您要将每个单选按钮设置为连续检查。
当您将一组具有相同名称的单选按钮传递给浏览器时,默认行为是设置为选中的最后一个按钮将显示为已选中的按钮。因此,如果您传递五个单选按钮并且它们都设置为已选中,则无线电设置不能有多个选中的选项。
当浏览器遇到另一个也被标记为“已检查”的无线电设置选项时,它只是从第一个中删除“已检查”。
您的PHP代码正在此行中完成:
$checked[$type] = "checked";
这个问题是你要创建一个显示的数组:
se_source =&gt;检查
这意味着check表示数组中每个成员的行值。
我认为您应该重新考虑您的表格结构和流程。不是为了做一些检查而创建一个列,而是我使用的是以下内容。
基本上,您的问题是您需要:
数据库中要匹配的值
单选按钮本身的值
这将允许您:
将数据库值(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 /设置检查为空字符串,因为这将是集合中所有单选按钮的默认值,但匹配DBV的单选按钮
/ C /将DBV与RBV阵列循环处理的当前RBV进行比较
/ D /如果步骤C的比较返回true,则使选中的字符串可用于插入输入元素
echo负责生成每个无线电设置选项,并确保匹配DBV的选项已在输入元素标签中“检查”
答案 4 :(得分:0)
检查一下!这可能就是你要找的东西:)
Generate checkbox based on entries on a MySQL table
$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'];
}