如何使用PHP实现用户向数组添加多个值且不覆盖原有数据
问题根源
- 每次用户提交表单都是一次独立的HTTP请求,HTTP协议无状态的特性导致默认不会留存之前请求的数据
- 你现有代码每次请求都会重新初始化空的
$artist数组,仅存入当前提交的艺人值,之前存储的内容自然会被覆盖
修复方法
使用PHP Session跨请求持久化存储已提交的艺人数组,同时补充参数校验和输出转义避免报错和XSS安全问题,修复后的完整代码如下:
<?php // 必须放在所有输出前开启Session,用于跨请求存储数据 session_start(); ?> <h1> My Favorite Artist </h1> <form method='POST'> <h3>Please enter your favorite artist</h3> <input type="text" name="artist" required> <input type="submit" value="Submit Artist"> </form> <ul> <?php // 先判断用户是否提交了非空的艺人名称 if (!empty($_POST['artist'])) { $art = trim($_POST['artist']); // 如果Session中不存在艺人数组就初始化 if (!isset($_SESSION['artist'])) { $_SESSION['artist'] = array(); } // 把新提交的艺人加入数组 array_push($_SESSION['artist'], $art); } // 遍历输出所有已提交的艺人,用htmlspecialchars转义避免XSS漏洞 if (!empty($_SESSION['artist'])) { foreach ($_SESSION['artist'] as $a) { echo "<li>".htmlspecialchars($a)."</li>"; } } ?> </ul>
补充说明
- 若需要清空已存储的艺人列表,新增功能主动销毁Session里的
artist字段即可 - input标签新增的
required属性为前端空提交拦截,后端也同步做了非空校验,避免无效数据存入
内容的提问来源于stack exchange,提问作者Kazumi411
相关产品推荐
相关产品推荐

