1

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

<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

4 回答 4

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.

我希望这能有所帮助。

于 2013-07-12T20:11:13.117 回答
2

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

于 2013-07-12T20:03:50.167 回答
1

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

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

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

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

使用 PHPempty()函数可以绕过所有“是”“1”字符串 int 转换问题。

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

<input type="checkbox" name="fflreq" id="fflreq" 
    value="<?=$row['FFLr']?>" <?=(!empty($row['FFLr'])?'checked':'')?>>
于 2013-07-12T20:15:17.357 回答
1

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

有两种选择可以解决这个问题:

clean 选项是在服务器端意识到这一点,并假设复选框在没有值时处于未激活状态。

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

于 2013-07-12T20:07:32.453 回答