打造交流利器:PHP留言板功能详解与实践

news2024/12/23 3:21:20

在这里插入图片描述

🏆作者简介,黑夜开发者,全栈领域新星创作者✌,2023年6月csdn上海赛道top4。多年电商行业从业经验,对系统架构,数据分析处理等大规模应用场景有丰富经验。
🏆本文已收录于PHP专栏:PHP进阶实战教程。
🏆另有专栏PHP入门基础教程,希望各位大佬多多支持❤️。

文章目录

  • 一、简介
  • 二、系统设计
    • 2.1 数据库设计
    • 2.2 HTML页面设计
      • 2.2.1 留言列表页面(index.html)
      • 2.2.2 添加留言页面(add.html)
    • 2.3 PHP代码编写
      • 2.3.1 新增留言(add.php)
      • 2.3.2 编辑留言(edit.php)
      • 2.3.3 删除留言(delete.php)
      • 2.3.4 查询留言(select_messages.php):
  • 三、总结


一、简介

留言板是一个常见的Web应用程序,它允许用户在网站上发布留言,并可以对已发布的留言进行查看、编辑和删除操作。本文将使用PHP语言实现一个基本的留言板功能。

在这里插入图片描述

二、系统设计

首先,我们需要设计数据库表来存储留言信息,然后编写HTML页面展示留言列表以及提交留言的表单,最后使用PHP处理前端提交的请求,并与数据库进行交互。

2.1 数据库设计

我们将使用MySQL数据库来存储留言信息。假设我们需要存储的留言信息包括:id、姓名、邮箱、主题、内容和创建时间。

首先,创建一个名为guestbook的数据库,然后在该数据库中创建名为messages的数据表,表结构如下:

CREATE TABLE `messages` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  `subject` varchar(255) NOT NULL,
  `content` text NOT NULL,
  `created_at` datetime NOT NULL DEFAULT current_timestamp(),
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

2.2 HTML页面设计

我们需要编写两个HTML页面,一个用于展示留言列表,另一个用于提交新的留言。

2.2.1 留言列表页面(index.html)

<!DOCTYPE html>
<html>
<head>
    <title>留言板</title>
</head>
<body>
    <h1>留言板</h1>
    <a href="add.php">新增留言</a>
    <table>
        <tr>
            <th>姓名</th>
            <th>邮箱</th>
            <th>主题</th>
            <th>内容</th>
            <th>创建时间</th>
            <th>操作</th>
        </tr>
        <?php
        // 使用PHP动态生成留言列表
        $db = new mysqli('localhost', 'username', 'password', 'guestbook');
        if ($db->connect_errno) {
            die('连接数据库失败:' . $db->connect_error);
        }
        $sql = "SELECT * FROM messages ORDER BY created_at DESC";
        $result = $db->query($sql);
        while ($row = $result->fetch_assoc()) {
            echo "<tr>";
            echo "<td>" . $row['name'] . "</td>";
            echo "<td>" . $row['email'] . "</td>";
            echo "<td>" . $row['subject'] . "</td>";
            echo "<td>" . $row['content'] . "</td>";
            echo "<td>" . $row['created_at'] . "</td>";
            echo "<td><a href='edit.php?id=" . $row['id'] . "'>编辑</a> | <a href='delete.php?id=" . $row['id'] . "'>删除</a></td>";
            echo "</tr>";
        }
        $db->close();
        ?>
    </table>
</body>
</html>

2.2.2 添加留言页面(add.html)

<!DOCTYPE html>
<html>
<head>
    <title>添加留言</title>
</head>
<body>
    <h1>添加留言</h1>
    <form action="add.php" method="post">
        <label for="name">姓名:</label>
        <input type="text" id="name" name="name" required><br>
        <label for="email">邮箱:</label>
        <input type="email" id="email" name="email" required><br>
        <label for="subject">主题:</label>
        <input type="text" id="subject" name="subject" required><br>
        <label for="content">内容:</label><br>
        <textarea id="content" name="content" rows="5" required></textarea><br>
        <input type="submit" value="提交">
    </form>
</body>
</html>

2.3 PHP代码编写

我们需要编写三个PHP文件,分别用于处理新增留言、编辑留言和删除留言的请求。

2.3.1 新增留言(add.php)

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $db = new mysqli('localhost', 'username', 'password', 'guestbook');
    if ($db->connect_errno) {
        die('连接数据库失败:' . $db->connect_error);
    }
    $name = $_POST['name'];
    $email = $_POST['email'];
    $subject = $_POST['subject'];
    $content = $_POST['content'];

    $stmt = $db->prepare("INSERT INTO messages (name, email, subject, content) VALUES (?, ?, ?, ?)");
    $stmt->bind_param("ssss", $name, $email, $subject, $content);
    if ($stmt->execute()) {
        header('Location: index.html');
    } else {
        echo '添加留言失败:' . $stmt->error;
    }
    $stmt->close();
    $db->close();
}
?>

2.3.2 编辑留言(edit.php)

<?php
if ($_SERVER['REQUEST_METHOD'] === 'GET' && isset($_GET['id'])) {
    $id = $_GET['id'];
    $db = new mysqli('localhost', 'username', 'password', 'guestbook');
    if ($db->connect_errno) {
        die('连接数据库失败:' . $db->connect_error);
    }
    $stmt = $db->prepare("SELECT * FROM messages WHERE id = ?");
    $stmt->bind_param("i", $id);
    $stmt->execute();
    $result = $stmt->get_result();
    if ($row = $result->fetch_assoc()) {
        $name = $row['name'];
        $email = $row['email'];
        $subject = $row['subject'];
        $content = $row['content'];
    } else {
        die('留言不存在');
    }
    $stmt->close();
    $db->close();
} elseif ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (isset($_POST['id']) && isset($_POST['name']) && isset($_POST['email']) && isset($_POST['subject']) && isset($_POST['content'])) {
        $id = $_POST['id'];
        $name = $_POST['name'];
        $email = $_POST['email'];
        $subject = $_POST['subject'];
        $content = $_POST['content'];

        $db = new mysqli('localhost', 'username', 'password', 'guestbook');
        if ($db->connect_errno) {
            die('连接数据库失败:' . $db->connect_error);
        }
        $stmt = $db->prepare("UPDATE messages SET name = ?, email = ?, subject = ?, content = ? WHERE id = ?");
        $stmt->bind_param("ssssi", $name, $email, $subject, $content, $id);
        if ($stmt->execute()) {
            header('Location: index.html');
        } else {
            echo '编辑留言失败:' . $stmt->error;
        }
        $stmt->close();
        $db->close();
    }
}
?>

<!DOCTYPE html>
<html>
<head>
    <title>编辑留言</title>
</head>
<body>
    <h1>编辑留言</h1>
    <form action="edit.php" method="post">
        <input type="hidden" name="id" value="<?php echo $id; ?>">
        <label for="name">姓名:</label>
        <input type="text" id="name" name="name" value="<?php echo $name; ?>" required><br>
        <label for="email">邮箱:</label>
        <input type="email" id="email" name="email" value="<?php echo $email; ?>" required><br>
        <label for="subject">主题:</label>
        <input type="text" id="subject" name="subject" value="<?php echo $subject; ?>" required><br>
        <label for="content">内容:</label><br>
        <textarea id="content" name="content" rows="5" required><?php echo $content; ?></textarea><br>
        <input type="submit" value="保存">
    </form>
</body>
</html>

2.3.3 删除留言(delete.php)

删除留言

<?php
$id = $_GET['id'];

$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "database";

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "DELETE FROM messages WHERE id=$id";

if ($conn->query($sql) === TRUE) {
    echo "Message deleted successfully";
} else {
    echo "Error deleting message: " . $conn->error;
}

$conn->close();
?>

2.3.4 查询留言(select_messages.php):

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "database";

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT * FROM messages ORDER BY created_at DESC";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        echo "ID: " . $row["id"]. ", Name: " . $row["name"]. ", Email: " . $row["email"]. ", Subject: " . $row["subject"]. ", Content: " . $row["content"]. "<br>";
    }
} else {
    echo "No messages found";
}

$conn->close();
?>

三、总结

今天我们通过PHP完整实现了一个留言板功能,实际过程中,可能还有更加复杂的设计。不过核心就是这样一些东西。希望能对您有所帮助,我们下次见。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/792678.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

聚类算法概述

聚类算法简介 1.1 聚类算法在现实中的应用 用户画像,广告推荐,Data Segmentation,搜索引擎的流量推荐,恶意流量识别 基于位置信息的商业推送,新闻聚类,筛选排序 图像分割,降维,识别;离群点检测;信用卡异常消费;发掘相同功能的基因片段 1.2 聚类算法的概念 聚类…

Spring 源码解读

1、Spring 的结构组成 1.1、核心类介绍 Spring 中有两个最核心的类 1 DefaultListableBeanFactory XmlBeanFactory 继承自 DefaultListableBeanFactory&#xff0c;而DefaultListableBeanFactory 是整个 bean加载的核心部分&#xff0c;是 Spring 注册及加载 bean 的默认实现…

DAY13_会话技术-CookieSession综合案例

目录 1 会话跟踪技术的概述2 Cookie2.1 Cookie的基本使用2.1.1 概念2.1.2 Cookie的工作流程2.1.3 Cookie的基本使用2.1.3.1 发送Cookie2.1.3.2 获取Cookie 2.2 Cookie的原理分析2.3 Cookie的使用细节2.3.1 Cookie的存活时间2.3.2 Cookie存储中文 3 Session3.1 Session的基本使用…

/var/lock/subsys目录的作用

总的来说&#xff0c;系统关闭的过程&#xff08;发出关闭信号&#xff0c;调用服务自身的进程&#xff09;中会检查/var/lock/subsys下的文件&#xff0c;逐一关闭每个服务&#xff0c;如果某一运行的服务在/var/lock/subsys下没有相应的选项。在系统关闭的时候&#xff0c;会…

【SpringBoot】简介及传统的 Spring 框架:对比和分析

哈喽&#xff0c;哈喽&#xff0c;大家好~ 我是你们的老朋友&#xff1a;保护小周ღ 今天给大家带来的是 SpringBoot 的简介&#xff0c;SpringBoot 项目的创建&#xff0c;相较于 Spring 框架的优点&#xff1a; 1. 快速的集成框架 2.内置运行容器, 快速的部署项目 3. 摒弃…

数据接口有哪些?(数据接口有哪几种)

数据接口是指不同应用程序或系统之间交换数据的通信界面。在现代信息化社会中&#xff0c;数据接口扮演着极为重要的角色&#xff0c;它们使得不同平台之间能够相互连接和交流&#xff0c;从而实现数据共享和应用集成。 数据接口的种类繁多&#xff0c;常见的有以下几种&#…

OpenCvSharp (C# OpenCV) 二维码畸变矫正--基于透视变换(附源码)

导读 本文主要介绍如何使用OpenCvSharp中的透视变换来实现二维码的畸变矫正。 实现步骤 讲解实现步骤之前先看下效果(左边是原图,右边是矫正后的效果): 【1】需求分析 由于相机拍摄角度,导致二维码形状不是矩形,存在明显的畸变。我们希望将其矫正为正常的矩形或者正方形图…

mars3d绘制区域范围(面+边框)

1、图例&#xff08;绿色面区域白色边框&#xff09; 2、代码 1&#xff09;、绘制区域ts文件 import { mapLayerCollection } from /hooks/cesium-map-init /*** 安全防護目標* param map*/ export const addSafetyProtection async (map) > {const coverDatas await m…

游戏服务器的帧率控制

固定Tick时间策略 固定Tick时间&#xff1a;顾名思义就是指程序每次心跳的时间都是等长的、固定的。如图中的“图A”&#xff0c;Tick1和Tick2的时间是相等的&#xff0c;如果实际执行的比上次执行时间长&#xff08;Run2 > Run1&#xff09;&#xff0c;则Sleep2 < Slee…

EventLog Analyzer:保障网络安全的强大日志审计利器

日志审计是现代网络安全中不可或缺的一环。随着信息技术的迅速发展&#xff0c;企业和组织面临着越来越多的网络安全威胁&#xff0c;如数据泄露、网络攻击和内部滥用等。而为了确保网络安全&#xff0c;日志审计成为了必要的措施。在众多日志审计工具中&#xff0c;EventLog A…

neo4j教程-安装部署

neo4j教程-安装部署 Neo4j的关键概念和特点 •Neo4j是一个开源的NoSQL图形存储数据库&#xff0c;可为应用程序提供支持ACID的后端。Neo4j的开发始于2003年&#xff0c;自2007年转变为开源图形数据库模型。程序员使用的是路由器和关系的灵活网络结构&#xff0c;而不是静态表…

个人博客系统[SpringBoot+SpringMVC+MyBais]

文章目录 &#x1f387; 前言1.项目目录介绍2.项目前准备2.1 使用到的第三方库2.1 配置文件&#xff08;application.properties&#xff09;2.2 数据库介绍 3.common目录工具类介绍3.1 AjaxResult类3.2 AppVariable类3.3 CaptchaUtils类3.4 PasswordUtils类3.5 UserSessionUti…

VSCode打开终端的方法

VScode打开终端的方法 第一种&#xff1a;快捷键 Ctrl ~ 第二种&#xff1a;选中某个文件&#xff0c;右键&#xff0c;点击“在集成终端中打开” 第三种&#xff1a;在VSCode的页面上方的选项&#xff0c;点击“终端”&#xff0c;再点击“新建终端” 打开后&#xff0c;…

事务,不只ACID

大家好&#xff0c;我是 方圆。一提到事务&#xff0c;最先让我想到的就是ACID和倒背如流的隔离级别。它确实和这些相关&#xff0c;但是在我读了《数据密集型应用系统设计》之后&#xff0c;我想把事务这个主题讲的不那么“传统”。本文的部分内容可能读起来会有些老生常谈的感…

【Vue】在el-table的el-table-column中,如何控制单行、单列、以及根据内容单独设置样式。例如:修改文字颜色、背景颜色

用cell-style表属性来实现。在官网中是这样表述这个属性的。 在el-table中用v-bind绑定此属性。&#xff08;v-bind的简写是&#xff1a;&#xff09; <el-table:data"options":cell-style"cell"><el-table-column prop"id" label"…

医疗小程序:提升服务质量与效率的智能平台

在医疗行业&#xff0c;公司小程序成为提高服务质量、优化管理流程的重要工具。通过医疗小程序&#xff0c;可以方便医疗机构进行信息传播、企业展示等作用&#xff0c;医疗机构也可以医疗小程序提供更便捷的预约服务&#xff0c;优化患者体验。 医疗小程序的好处 提升服务质量…

四章:Constrained-CNN losses for weakly supervised segmentation——弱监督分割的约束CNN损失函数

0.摘要 基于部分标记图像或图像标签的弱监督学习目前在CNN分割中引起了极大关注&#xff0c;因为它可以减轻对完整和繁琐的像素/体素注释的需求。通过对网络输出施加高阶&#xff08;全局&#xff09;不等式约束&#xff08;例如&#xff0c;约束目标区域的大小&#xff09;&am…

具身智能controller---RT-1(Robotics Transformer)(中---实验介绍)

6 实验 实验目的是验证以下几个问题: RT-1可以学习大规模指令数据&#xff0c;并且可以在新任务、对象和环境上实现zero-shot的泛化能力&#xff1f;训练好的模型可以进一步混合多种其他数据&#xff08;比如仿真数据和来自其他机器人的数据&#xff09;吗&#xff1f;多种方…

玄子Share - Redis 双系统安装教程 Linux Windows(附安装包)

玄子Share - Redis 双系统安装教程 Linux Windows&#xff08;附安装包&#xff09; Linux 安装 Redis 前置条件 Linux 本地体验需安装 Linux 虚拟机 Linux 安装 Redis 需学到第 15 节 【小白入门 通俗易懂】2021韩顺平 一周学会Linux https://www.bilibili.com/video/BV1Sv…

基于POX交叉的遗传算法求解车间调度

对于流水车间调度问题&#xff0c;n个工件在m台设备上加工&#xff0c;已知每个工件每个工序使用的机器和每个工件每个工序所用时间&#xff0c;通过决策每个机器上工件的加工顺序和每个工序的开始时间&#xff0c;使完成所有工序所用时间(makespan)最小。具有下列约束&#xf…