2013-07-12 25 views
1

用于将新项目添加到数据库和编辑现有项目的表单形式相同。将“模式”传递给表单以告知它是添加新的东西还是加载现有的项目进行编辑。所以....由PHP设置的覆盖复选框值

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

当被添加了一个新的项目,$行[“FFLr”]不存在这样的过程值为空或空或我猜0,如果我最初不选中复选框 - 表单处理器将其转换为“否”并将其插入数据库。

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

我认为,选中或取消选中表单复选框会替换当前值=''属性与1或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. 

我希望这能有一定的帮助。

+0

谢谢,它似乎不是它应该工作的逻辑方式,但我确实得到它并解决了问题。谢谢 – DMSJax

2

这不是它的工作原理。如果你已经勾选了复选框,那么它(连同它的值)将与表单的post/get(即提交)一起发送。如果你还没有检查过它,那么它将不会被设置...

1

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

有两个选项来处理这个:

清理选项是要在服务器端意识到这一点,并假定该复选框是不活跃只要没有价值来通过。

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

+0

感谢,在回想着我已经使用了“肮脏”的方法之前,但没这个时候去想它。它也会起作用。 – DMSJax

1

并非如此,通过查看$_POST参数中是否存在HTML name属性值来读取检查/未检查状态。

你可以检查此:

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

的HTML属性value的值始终保持不管它是在你的HTML。所以没有用户交互(除了JS)可以改变这一点。

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

而且我会用三进制为这类事情:

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