0

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

我遇到的问题是它总是必须有 1 个选择。如果我勾选 Jam,然后取消勾选 Jam 并勾选工作正常的黄油,但如果我取消选中所有内容,则它不会清除数组。

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

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”字样,则在下方勾选复选框。

这是表格:

在此处输入图像描述

4

2 回答 2

0

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

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

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

if( !isset( $_POST[$course_menuname.'extras' ) )
    unset( $_SESSION[$course_menuname.'extras'] );
于 2013-10-30T16:35:18.150 回答
0

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

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

?

于 2013-10-30T16:24:32.540 回答