You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过表单将用户输入添加至数组且保留已有数据?

解决多次提交表单数据并保留历史记录的问题

嘿,我明白你的困扰了——现在每次提交表单只会显示最新的那一条数据,之前的都没保存下来对吧?这是因为你当前只在每次请求时读取了新的$_POST数据,但没有把历史数据持久化存储起来。咱们用PHP的会话(Session)就能搞定这个问题,它可以帮我们在多次请求之间保存数据。

下面是具体的实现步骤和修改后的代码:

核心思路

我们需要用$_SESSION数组来存储每次提交的项目名称和描述:

  • 每次页面加载时先启动会话,这样才能访问和修改会话数据
  • 当表单提交时,把新的输入数据追加到会话里的对应数组中
  • 展示数据时,从会话数组里读取所有历史记录

修改后的完整代码

首先,在页面的最顶部(任何输出之前)添加会话启动代码,然后处理表单提交逻辑:

<?php
// 启动会话,必须放在所有HTML输出之前
session_start();

// 初始化会话中的数组(如果还不存在)
if (!isset($_SESSION['project_names'])) {
    $_SESSION['project_names'] = [];
}
if (!isset($_SESSION['project_descs'])) {
    $_SESSION['project_descs'] = [];
}

// 处理表单提交
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // 获取本次提交的名称和描述(注意表单name是数组形式,取第一个元素)
    $new_name = $_POST['project_name'][0] ?? '';
    $new_desc = $_POST['project_desc'][0] ?? '';

    // 只在输入不为空时添加到数组
    if (!empty($new_name) && !empty($new_desc)) {
        $_SESSION['project_names'][] = $new_name;
        $_SESSION['project_descs'][] = $new_desc;
    }
}
?>

然后是你的HTML表单和数据展示部分:

<form method="post" action="">
    <div class="row form-group">
        <div class="col-md-12">
            <label class="sr-only" for="name">Project Name</label>
            <input type="text" name="project_name[]" id="name" class="form-control" placeholder="Project Name">
        </div>
    </div>
    <div class="row form-group">
        <div class="col-md-12">
            <label class="sr-only" for="desc">Project Description</label>
            <input type="text" name="project_desc[]" id="desc" class="form-control" placeholder="Project Description">
        </div>
    </div>
    <div class="form-group">
        <input type="submit" value="Submit">
    </div>
</form>

<h2>Submitted Projects</h2>
<?php if (!empty($_SESSION['project_names'])): ?>
    <ul>
        <?php foreach ($_SESSION['project_names'] as $key => $name): ?>
            <li>
                <strong>Project Name:</strong> <?= htmlspecialchars($name) ?><br>
                <strong>Description:</strong> <?= htmlspecialchars($_SESSION['project_descs'][$key]) ?>
            </li>
        <?php endforeach; ?>
    </ul>
<?php else: ?>
    <p>No projects submitted yet.</p>
<?php endif; ?>

关键细节说明

  1. 会话启动:session_start()必须放在任何HTML输出之前,否则会报错,它会帮我们创建或恢复当前用户的会话数据。
  2. 数组初始化:我们先检查会话里的数组是否存在,如果不存在就初始化为空数组,避免第一次访问时出现未定义变量的错误。
  3. 表单数据处理:因为你的表单input的name是project_name[],所以$_POST['project_name']是一个数组,我们取第一个元素([0])作为本次提交的名称。另外用?? ''来处理用户没输入的情况,避免报错。
  4. 安全输出:用htmlspecialchars()来转义输出的内容,防止XSS攻击,这是一个好习惯哦。
  5. 空输入过滤:添加了非空判断,避免用户提交空表单时添加空数据到数组里。

这样修改后,每次用户提交表单,新的数据都会追加到会话数组里,之前的历史数据也会保留,刷新页面或者再次提交都不会丢失啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:47:30