覆盖PHP设置的复选框值

时间:2013-07-12 19:57:50

标签: php forms post checkbox

用于将新项目添加到数据库并编辑现有项目的表单是相同的表单。将“模式”传递到表单中以告知它是否添加了新内容或加载现有项目以进行编辑。所以....

<input type="checkbox" name="fflreq" id="fflreq" value="<?=$row['FFLr']?>" <?php if ($row['FFLr']=="Yes") {echo 'checked';} ?>>

当添加一个新项目时,$ row ['FFLr']不存在,所以当然值是BLANK或NULL,或者如果我最初没有选中复选框我想是0-表单处理器转换此进入“否”并将其插入数据库。

现在这是我的问题 - 当我回到项目并且表单处于编辑模式时,此复选框中的VALUE现在为“否” - 当我单击复选框以更改其状态时,我看到复选框被“检查”但价值没有变化。换句话说,点击/检查状态不是将$ _POST ['fflreq']的值设置为YES或1.

我想,检查或取消选中一个表单复选框会将value =''属性中当前的任何内容替换为1或0,以表示是/否开/关或其他。为什么从表单中提取的值不会在表单提交时发生变化?

4 个答案:

答案 0 :(得分:4)

你需要这样做:

<input type="checkbox" name="fflreq" id="fflreq" value="Yes" <?php if ($row['FFLr']=="Yes") {echo 'checked';} ?>>

如果选中上面的复选框,则在提交表单时,您在表单提交页面中收到了$ _POST [“fflreq”],如果未选中,则在$ _POST

中没有收到任何内容

所以在提交页面中你可以这样做:

$fflreq = "No"
if(isset($_POST["fflreq"]) && $_POST["fflreq"] == "Yes")
{
    $fflreq = $_POST["fflreq"];
}
//then you can simply do anything with the $fflreq such as inserting it into database etc.

我希望这可以提供一些帮助。

答案 1 :(得分:2)

这不是它的工作原理。如果您已“选中”复选框,则它(以及它的值)将与表单的发布/获取(即提交)一起发送。如果你还没有检查过,那就不会设置......

答案 2 :(得分:1)

如果复选框处于活动状态,浏览器将发送输入标记中定义的键/值对。但是,如果该复选框未处于活动状态,则此复选框不会发送任何内容。

有两种方法可以解决这个问题:

clean选项是在服务器端注意这一点,并假设没有值通过时复选框没有激活。

更脏的变体是在复选框之前使用<input type="hidden">标记,使用相同的名称,但是当复选框处于非活动状态时需要查看的值。这样,当复选框处于活动状态时,您仍将从复选框中获取所需的值,因为它将覆盖隐藏的值。但是,如果复选框处于非活动状态,您将从隐藏字段中获取值。

答案 3 :(得分:1)

实际上,通过查看name参数中是否存在HTML $_POST属性值来读取检查/取消选中状态。

您可以通过以下方式查看:

<?
    if (!empty($_POST['fflreq'])){ /*checked*/ }
    else{ /*unchecked*/ } 
?>   

HTML属性value的值始终保持HTML中的任何值。因此,没有用户交互(JS除外)可以改变它。

使用PHP empty()函数可以绕过所有“是”“1”字符串int cast问题。

此外,我会对这些事情使用三元符号:

<input type="checkbox" name="fflreq" id="fflreq" 
    value="<?=$row['FFLr']?>" <?=(!empty($row['FFLr'])?'checked':'')?>>