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

如何用PHP实现表单联系人存入数组并显示全部记录(禁用数据库)

问题解决:PHP无数据库实现通讯录历史记录保存

问题背景

现有HTML+PHP表单仅能保存单个联系人,提交新联系人时旧记录被覆盖。需实现每次提交的联系人信息存入数组并展示所有历史记录,且无法使用数据库。

解决方案:利用PHP Session持久化数组

由于HTTP是无状态协议,要跨请求保存数据,PHP Session是最适合的方案(无需数据库,数据暂存于服务器端会话中)。以下是修改后的完整代码:

<?php
// 启动Session,必须在输出任何HTML之前调用
session_start();

// 初始化联系人数组:如果Session中没有则创建空数组
if (!isset($_SESSION['contacts'])) {
    $_SESSION['contacts'] = [];
}

// 处理表单提交
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $erros = [];
    $nome = trim($_POST['nombre'] ?? '');
    $telefono = trim($_POST['telefono'] ?? '');
    
    // 处理清空通讯录请求
    if (isset($_POST['vaciaaxenda'])) {
        $_SESSION['contacts'] = [];
        echo "<script>alert('通讯录已清空');</script>";
    } 
    // 处理添加联系人请求
    else {
        if (empty($nome)) {
            echo "<p style='text-align:center;color:white;'>Nome不能为空</p>";
        } elseif (empty($telefono)) {
            echo "<p style='text-align:center;color:white;'>Telefono不能为空</p>";
        } else {
            // 将新联系人添加到Session数组
            $_SESSION['contacts'][] = [
                'nome' => $nome,
                'telefono' => $telefono
            ];
        }
    }
}
?>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Formulario2</title>
        <style>
            .myDiv {
              border: 5px outset white;
              background-color: #f1616e;
              text-align: center;
              width: 450px;
              min-height: 150px;
              margin: auto;
              padding: 10px;
            }
            .myDiv2 {
              border: 5px outset white;
              background-color: #f1616e;
              text-align: center;
              width: 450px;
              height: 50px;
              margin: auto;
              line-height: 50px;
            }
            .contact-item {
                color: white;
                margin: 8px 0;
            }
        </style>
    </head>
    <body style="background-color:#f1616e;">
        <h3 align="center" style="color:#2d5df3">Axenda</h3>
        <form method="POST">
            <div class="myDiv" align="center">
                <br>
                Nome: <input type="text" name="nombre"><br>
                Telefono: <input type="tel" name="telefono" pattern="[0-9]{9}"><br><br><br>
                <input type="submit" value="Engadir contacto">
                <input type="reset" name="Limpar Campos"><br>
            </div>
        </form>
        <h4 align="center" style="color:white;">Datos axenda</h4>
        <div align="center" class="myDiv">
            <?php
            // 遍历Session数组展示所有联系人
            if (!empty($_SESSION['contacts'])) {
                foreach ($_SESSION['contacts'] as $contact) {
                    echo "<div class='contact-item'>{$contact['telefono']} de {$contact['nome']}</div>";
                }
            } else {
                echo "<p style='color:white;'>暂无联系人</p>";
            }
            ?>
        </div>
        
        <div align="center" class="myDiv2">
            <form method="POST" style="display:inline;">
                <input type="submit" name="vaciaaxenda" value="Vaciar axenda">
            </form>
        </div>
    </body>
</html>

关键修改说明

  • Session初始化:在PHP代码最开头调用session_start(),确保会话可用;若Session中无联系人数组则创建空数组。
  • 表单提交逻辑优化:
    • 添加非空校验,只有姓名和电话都不为空时才存入数组
    • 新增清空通讯录的表单处理,点击清空按钮时重置Session数组
  • 联系人展示:遍历Session中的联系人数组,逐个输出每条记录,空数组时提示“暂无联系人”
  • 样式调整:修改.myDiv为min-height避免内容溢出,新增.contact-item样式优化展示效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 15:35:28