【发布时间】:2014-01-13 10:29:29
【问题描述】:
我正在使用 php/html 创建一个表单,它允许用户输入数据,然后在提交之前在流程结束时查看并选择性地编辑输入。一些输入是使用复选框完成的。使用堆栈溢出,一个很好的资源,我发现了如何显示以前输入的数据并允许用户进行更改。我的问题是复选框。我使用 session 变量来指示先前是否已选中复选框。在编辑期间,当用户选中以前未选中的框时,它将更新,但当用户取消选中已选中的框时,它在 Session 变量和数据库中保持选中状态。
这是我用来在“更新”页面上显示之前输入的复选框的代码:
<?php
session_start();
...
<input type="checkbox" name="Name1" <?php if($_SESSION['Name1']=="on"){echo 'checked';}?>/>
...
然后,当用户进行更改并单击更新按钮时,会话变量将使用以下代码更新:
<?php
session_start();
foreach ($_POST as $key => $value) { $_SESSION[$key] = $value;}
文本字段完美更新。任何帮助,将不胜感激!这两天我一直在旋转我的轮子!!!
以下是代码的一些额外摘录: 来自显示更新字段的 php 文件:
<form method="post" action="UpdateVolunteerEnter.php">
/* example of text field */
Email Address
<input type="text" name="VolunteerEmail" id="VolunteerEmail" size="50" value="<?php echo $_SESSION['VolunteerEmail']; ?>"/>
<br />
/*example of checkbox field */
<input type="checkbox" name="AfterProm" id="AfterProm" <?php if($_SESSION['AfterProm']=="on"){echo "checked";}?>/>
<br />
<input type="submit" name="Update" id="Update" value="UPDATE" />
</form>
这里是从文件中摘录的代码,用于处理带有您建议的更新的输入:
<?php
session_start();
//Update Session Variables
foreach ($_POST as $key => $value) {
if($value == ''){
unset($_SESSION[$key]);
}
else {
$_SESSION[$key] = $value;
}
}
所以在进行了一些故障排除和更多挖掘之后,我发现如果未选中复选框,则它不在 $_POST 中,因此 $_SESSION 变量没有被更新。我在我的 php 文件中添加了以下语句,该语句处理表单输入以检查这种情况并纠正它,以便它现在可以工作!!!
foreach ($_POST as $key => $value) {$_SESSION[$key] = $value;}
//Check for unchecked checkboxes (one if statement per checkbox)
if (isset($_SESSION['checkbox1']) AND !isset($_POST['checkbox1'])){unset($_SESSION['checkbox1']);}}
【问题讨论】: