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

