You need to enable JavaScript to run this app. PHP表单提交后数组值被重新初始化,如何不使用数据库保留历史列表项
优惠活动
大模型
产品
解决方案
定价
更多

PHP表单提交后数组值被重新初始化,如何不使用数据库保留历史列表项

解决方案

问题原因

你当前的代码每次页面加载都会重新初始化空的$itemList数组,也没有把添加的内容持久存储到会话中,所以每次提交表单重载页面后之前存入的内容都会被清空。你已经在代码顶部开启了Session,直接用Session存储列表数据就能在不使用数据库的前提下,保留同一会话内的所有添加记录。

修复后完整代码

<?php
  session_start();
?>

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>PHP ItemList</title>
  </head>
  <body>
    <div class="container">
      <?php
          // 先从Session中读取已有的列表,没有就初始化空数组
          $itemList = isset($_SESSION['itemList']) ? $_SESSION['itemList'] : array();
          if ( $_SERVER["REQUEST_METHOD"] == "POST") {
                // 表单提交时把新项加入数组
                array_push( $itemList, $_POST["Item"] );
                // 把更新后的数组存回Session
                $_SESSION['itemList'] = $itemList;
          }
          // 展示所有已添加的项目
          if (!empty($itemList)) {
              echo "<h3>已添加的项目:</h3>";
              echo "<ul>";
              foreach ($itemList as $item) {
                  echo "<li>".htmlspecialchars($item)."</li>";
              }
              echo "</ul>";
          }
      ?>
       <h3>添加项目:</h3>
       <form  method="POST" action = "index.php">
         <p>项目名:<input type="text" name="Item"></p>
         <input type="submit" name="submit" value="提交">
       </form>
    </div>
  </body>
</html>

关键修改说明

  • 初始化数组时优先从Session读取已有内容,避免每次刷新清空历史数据
  • 新增内容写入数组后同步更新到Session中,实现会话内数据持久化
  • 新增了遍历输出所有已添加项目的展示逻辑,替代原来仅打印当前数组的调试代码
  • 输出内容时用htmlspecialchars处理用户输入,避免XSS安全隐患

内容的提问来源于stack exchange,提问作者Abhishek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 10:15:04