2014-01-12 12 views
0

我使用php/html创建了一个表单,它允许用户输入数据,然后在提交之前审查和可选地编辑输入。一些输入是使用复选框完成的。使用堆栈溢出,一个很好的资源,我发现如何显示以前输入的数据,并允许用户进行更改。我的问题是与复选框。我使用会话变量来指示复选框是否先前已被选中。在编辑过程中,当用户检查一个以前未经检查的框时,它会更新,但是当用户取消选中一个被选中的框时,它将在Session变量和数据库中被检查。认识到在php/html表单中取消选中复选框编辑

这里是我使用了“更新”页面上显示先前输入的复选框代码:

<?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']);}} 

回答

0

您应该检查是否这些复选框不为空,这样$_POST[$key] != '',如果它们是空未设置他们$_SESSION阵列这样unset($_SESSION[$key])
所以整个代码:

session_start(); 
foreach ($_POST as $key => $value) { 
    if($value == ''){ 
     $_SESSION[$key] = false; 
     unset($_SESSION[$key]); 
    } 
    else { 
     $_SESSION[$key] = $value; 
    } 
} 

UPD:尽量明确取消设置所需的变量。这不是一个很好的代码示例,但我不知道上下文,所以我只能提供建议。

if($_POST['Name1'] != 'on'){ 
    $_SESSION['Name1'] = false; 
    unset($_SESSION['Name1']); 
} 
+0

感谢您的答复...但它没有工作; O(复选框是选中在编辑屏幕仍显示为检查检查画面上后,我插入的建议代码任何其他的想法 – user3188091

+0

?您可以发布html代码吗? –

+0

感谢您的持续关注!我已在原始问题陈述中添加了其他代码。 – user3188091

相关问题