php - 如何从会话变量中获取多个复选框值
问题描述
在我的情况下,我只得到最后一个复选框值,没有显示所有选中的复选框值。共有三个页面,在 menu.php 中,我从用户那里获得了多个复选框值
<form method="POST" action="internal.php">
<input type="checkbox" name="sides[]" value="Cheese" ><label>Cheese </label>
<input type="checkbox" name="sides[]" value="Broccoli"><label>Broccoli </label>
<input type="checkbox" name="sides[]" value="Carrots"><label>Carrots</label>
</form>
internal.php (这里我在会话中存储多个复选框值。)
<?php
session_start();
if(!empty($_POST['sides'])) {
foreach($_POST['sides'] as $check) {
$_SESSION['sides']=$check;
echo $_SESSION['sides']; // if i don't use header location then here i get all checkbox value
echo "<br>";
}
}
header('location: show.php');
?>
最后一页,即 show.php 我试图显示多个复选框值
<?php if(isset($_SESSION['sides'])){ ?>
<div class="col-lg-4 col-md-4 col-sm-6">
<p><?php echo $_SESSION['sides']; ?></p> // here i get only last checked checkbox value
</div>
<?php unset($_SESSION['sides']); } ?>
解决方案
您实际上并没有保存会话中的所有复选框值,您只是将最后一个保存为这一行
$_SESSION['sides']=$check;
$_SESSION['sides']
每次循环覆盖
所以像这样连接值
<?php
session_start();
if(!empty($_POST['sides'])) {
foreach($_POST['sides'] as $check) {
$_SESSION['sides'] .= $check;
}
}
header('location: show.php');
?>
您可能想在其中添加一个分隔符,就像这样
<?php
session_start();
if(!empty($_POST['sides'])) {
foreach($_POST['sides'] as $check) {
$_SESSION['sides'] .= $check . ',';
}
}
rtrim($_SESSION['sides'], ','); // remove last comma seperator
header('location: show.php');
?>
附加说明:请记住,PHP 只会发送 Checked 复选框值。
推荐阅读
- java - 在执行线程上运行 Spring 方面的建议
- java - 如何在 H2 数据库中模拟 Oracle DB 链接?
- html - 视频仅在移动设备上溢出
- c# - 第一次导航到页面时阻塞主线程
- php - 为什么在 laravel 7.0 中找不到类 Imagick?
- php - 如何在更新方法中查看我通过请求获得的内容?
- perl - 解包函数将如何在 perl 中用于此代码 $str =~ s/([^\w ])/'%'.unpack('H2', $1)/eg;
- python - 在查询集中传递多个对象时的Django ListView分页
- c# - Onion Architecture 数据库映射
- javascript - 如何使用 Rollup 动态提供静态文件(并与 node-resolve 一起工作)?