在会话中存储复选框选择,不会让我选择任何内容

时间:2013-10-30 16:17:08

标签: php html checkbox foreach

我使用它来存储我在会话中选择的表单,以便在用户返回到表单的另一页时可以调用它们。

问题我有总是必须有1个选择。如果我勾选Jam,然后取消Jam并勾选效果正常的黄油,但是如果我取消选中所有内容,那么它就不会清除阵列。

由于某种原因,它总是必须在数组中至少有一个条目?

foreach($_POST as $key => $value) {
    $_SESSION[$key] = $value;
}

这是checkbox 代码:

<inputtype="checkbox name="<?php echo $course_menuname."extras[]"; ?>" <?php if(in_array("$extraitems", $_SESSION[$course_menuname.'extras'])) { echo "checked"; } ?> value="<?php echo $extraitems; ?>" id="checkbox">

变量如下:

  

$ extraitems包含“Toast Extras”字样,例如Jam,Butter和Flora   $ course_menuname包含诸如“breakfast_cereal”,“breakfast_toast”之类的课程,如果它有“extra it does”这个词,则会在下面显示复选框。

这是表单:

enter image description here

2 个答案:

答案 0 :(得分:0)

如果$ _POST为空,为什么不明确告诉PHP取消设置数组

<?php
if(empty($_POST))
    unset($_SESSION);
?>

答案 1 :(得分:0)

通常,表单不会为未选中的复选框发送数据。要清除所有内容,您可以检查是否没有检查值,如果是这种情况,请清除会话值。您可以尝试将这些动态复选框存储在会话的子数组中,这样您就可以清除一个会话变量。例如:

foreach( $_POST as $key=>$val )
{
    $_SESSION[$course_menuname.'extras'][$key] = $val;
}

您拥有表单名称的方式将有助于找到这些缺失的值。您可以检查数组元素是否设置为例如:

if( !isset( $_POST[$course_menuname.'extras' ) )
    unset( $_SESSION[$course_menuname.'extras'] );