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
相关产品推荐
相关产品推荐

