首页 > 解决方案 > 如何从会话变量中获取多个复选框值

问题描述

在我的情况下,我只得到最后一个复选框值,没有显示所有选中的复选框值。共有三个页面,在 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']); } ?>

标签: phpsessionsession-cookiessession-variables

解决方案


您实际上并没有保存会话中的所有复选框值,您只是将最后一个保存为这一行

$_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 复选框值。


推荐阅读