php - 为什么在将多选中的最后一个选项保存到会话变量后无法取消选择它?
问题描述
我有一个多选,它使用会话变量保存当前选择的选项。但是,当我取消选择所有选项时,最后选择的选项会保留。我该如何解决?这是我的代码:
<!DOCTYPE html>
<?php
session_start();
if(isset($_POST['occupation']))
$_SESSION['occupation'] = $_POST['occupation'];
?>
<html>
<head>
</head>
<body>
<form method="post" action="">
<h2>Industy</h2>
<select name="occupation[]" multiple >
<?php
$occ = array("Accounting", "Education", "Healthcare", "Information Technology", "Retail", "Sales");
$len = count($occ);
for($i = 0; $i<$len; $i++ )
{
if(in_array($occ[$i], $_SESSION['occupation']))
echo '<option value="' . $occ[$i] . '" selected>' . $occ[$i] .'</option>';
else
echo '<option value="' . $occ[$i] . '" >' . $occ[$i] .'</option>';
}
?>
</select>
<br/><br/>
<button type="submit" value="Search" class="my-button" name="search_button" >Search</button>
</form>
</body>
</html>
解决方案
只需添加到您的代码中,如果您提交时没有任何值,只需将会话数组覆盖为空即可。
这是想法:
<?php
session_start();
$occ = array("Accounting", "Education", "Healthcare", "Information Technology", "Retail", "Sales");
if (empty($_SESSION['occupation'])) { // initialize
$_SESSION['occupation'] = array();
}
if(isset($_POST['search_button'])) { // if submitted
// set session occupation else just set empty
$_SESSION['occupation'] = !empty($_POST['occupation']) ? $_POST['occupation'] : array();
}
?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<form method="post" action="">
<h2>Industy</h2>
<select name="occupation[]" multiple>
<?php foreach ($occ as $o) { ?>
<option value="<?php echo $o; ?>" <?php echo in_array($o, $_SESSION['occupation']) ? 'selected' : ''; ?>>
<?php echo $o; ?>
</option>
<?php } ?>
</select>
<br/><br/>
<button type="submit" value="Search" class="my-button" name="search_button" >Search</button>
</form>
</body>
</html>
推荐阅读
- graphql - 创建类似于 GraphQLList 的自己的类包装器
- migration - 使用 Swift 将新类添加到现有已发布的 Realm 数据库中
- c# - WPF 在按钮单击时重新加载当前的 UserControl
- ibm-watson - 想在 IBM Watson 中创建新项目
- python - 数据框:值匹配条件的时间百分比
- r - 如何使用 R 中的正则表达式从字符串中提取文本?
- clojure - clojure:scheme 的 `set!` 的等价物是什么?
- regex - 从部分地址获取街道名称的最佳正则表达式
- c++ - 处理智能指针的错误
- protocol-buffers - 在 ESP-IDF 中使用 Google Protobuffers(C++)