【毕业设计】基于 PHP 开发的社区交流系统

news2024/9/20 8:02:00

基于 PHP 开发的社区交流系统可以是一个论坛、博客平台或是问答网站等形式的在线平台,用于用户之间的互动交流。以下是一个简单的 PHP 社区交流系统的示例,包括用户注册、登录、发布帖子、回复帖子等功能。

技术栈

  • 前端:HTML, CSS, JavaScript
  • 后端:PHP
  • 数据库:MySQL

环境准备

  1. 安装 PHP 和 MySQL 服务。
  2. 安装 Web 服务器(如 Apache 或 Nginx)。
  3. 创建 MySQL 数据库。

数据库设计

创建一个名为 community_db 的数据库,并创建如下表结构:

  1. users 表:存储用户信息。
  2. posts 表:存储帖子信息。
  3. comments 表:存储评论信息。
CREATE DATABASE community_db;

USE community_db;

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(255) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL,
    email VARCHAR(255) NOT NULL UNIQUE
);

CREATE TABLE posts (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    title VARCHAR(255) NOT NULL,
    content TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id)
);

CREATE TABLE comments (
    id INT AUTO_INCREMENT PRIMARY KEY,
    post_id INT NOT NULL,
    user_id INT NOT NULL,
    content TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (post_id) REFERENCES posts(id),
    FOREIGN KEY (user_id) REFERENCES users(id)
);

PHP 脚本

1. 用户注册 (register.php)
<?php
session_start();
require_once 'db.php';

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $username = $_POST['username'];
    $email = $_POST['email'];
    $password = password_hash($_POST['password'], PASSWORD_DEFAULT);

    $stmt = $db->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)");
    $stmt->bind_param("sss", $username, $email, $password);
    
    if ($stmt->execute()) {
        header("Location: login.php");
    } else {
        echo "Error: " . $stmt->error;
    }
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Register</title>
</head>
<body>
    <h1>Register</h1>
    <form action="register.php" method="post">
        Username: <input type="text" name="username" required><br>
        Email: <input type="email" name="email" required><br>
        Password: <input type="password" name="password" required><br>
        <input type="submit" value="Register">
    </form>
</body>
</html>
2. 用户登录 (login.php)
<?php
session_start();
require_once 'db.php';

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $username = $_POST['username'];
    $password = $_POST['password'];

    $stmt = $db->prepare("SELECT * FROM users WHERE username = ?");
    $stmt->bind_param("s", $username);
    $stmt->execute();
    $result = $stmt->get_result();
    if ($row = $result->fetch_assoc()) {
        if (password_verify($password, $row['password'])) {
            $_SESSION['user_id'] = $row['id'];
            header("Location: index.php");
        } else {
            echo "Invalid username or password.";
        }
    } else {
        echo "User not found.";
    }
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Login</title>
</head>
<body>
    <h1>Login</h1>
    <form action="login.php" method="post">
        Username: <input type="text" name="username" required><br>
        Password: <input type="password" name="password" required><br>
        <input type="submit" value="Login">
    </form>
</body>
</html>
3. 主页 (index.php)
<?php
session_start();
require_once 'db.php';

if (!isset($_SESSION['user_id'])) {
    header("Location: login.php");
    exit;
}

$user_id = $_SESSION['user_id'];

$stmt = $db->query("SELECT * FROM posts ORDER BY created_at DESC");
$posts = $stmt->fetch_all(MYSQLI_ASSOC);
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Community</title>
</head>
<body>
    <h1>Welcome to the Community!</h1>
    <a href="logout.php">Logout</a>
    <h2>Create Post</h2>
    <form action="create_post.php" method="post">
        Title: <input type="text" name="title" required><br>
        Content: <textarea name="content" required></textarea><br>
        <input type="submit" value="Create Post">
    </form>
    <hr>
    <?php foreach ($posts as $post): ?>
        <h2><?php echo htmlspecialchars($post['title']); ?></h2>
        <p><?php echo htmlspecialchars($post['content']); ?></p>
        <a href="comment.php?id=<?php echo $post['id']; ?>">Comment</a>
        <hr>
    <?php endforeach; ?>
</body>
</html>
4. 创建帖子 (create_post.php)
<?php
session_start();
require_once 'db.php';

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $title = $_POST['title'];
    $content = $_POST['content'];
    $user_id = $_SESSION['user_id'];

    $stmt = $db->prepare("INSERT INTO posts (user_id, title, content) VALUES (?, ?, ?)");
    $stmt->bind_param("iss", $user_id, $title, $content);

    if ($stmt->execute()) {
        header("Location: index.php");
    } else {
        echo "Error: " . $stmt->error;
    }
}
5. 发表评论 (comment.php)
<?php
session_start();
require_once 'db.php';

$post_id = intval($_GET['id']);

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $content = $_POST['content'];
    $user_id = $_SESSION['user_id'];

    $stmt = $db->prepare("INSERT INTO comments (post_id, user_id, content) VALUES (?, ?, ?)");
    $stmt->bind_param("iii", $post_id, $user_id, $content);

    if ($stmt->execute()) {
        header("Location: comment.php?id=$post_id");
    } else {
        echo "Error: " . $stmt->error;
    }
}

$stmt = $db->query("SELECT * FROM posts WHERE id = $post_id");
$post = $stmt->fetch_assoc();

$stmt = $db->query("SELECT * FROM comments WHERE post_id = $post_id");
$comments = $stmt->fetch_all(MYSQLI_ASSOC);

?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Comment on Post</title>
</head>
<body>
    <h1><?php echo htmlspecialchars($post['title']); ?></h1>
    <p><?php echo htmlspecialchars($post['content']); ?></p>
    <h2>Add Comment</h2>
    <form action="comment.php?id=<?php echo $post_id; ?>" method="post">
        Content: <textarea name="content" required></textarea><br>
        <input type="submit" value="Add Comment">
    </form>
    <hr>
    <h2>Comments</h2>
    <?php foreach ($comments as $comment): ?>
        <p><?php echo htmlspecialchars($comment['content']); ?></p>
    <?php endforeach; ?>
</body>
</html>

其他脚本

6. 注销 (logout.php)
<?php
session_start();
session_destroy();
header("Location: login.php");
exit;

数据库连接 (db.php)

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

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

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

总结

以上代码展示了如何创建一个简单的基于 PHP 的社区交流系统,包括用户注册、登录、创建帖子、发表评论等功能。实际应用中还需要考虑安全性问题,如输入验证、SQL 注入防护等,并且可以增加更多功能,如搜索、分类、用户权限管理等。

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

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

相关文章

uni-app安装插件

1.通过插件市场安装https://ext.dcloud.net.cn 打开HBuilderX编辑器。 点击菜单栏中的“工具”->“插件安装”。 这里会看到已安装插件和安装新插件两个选项卡&#xff0c;点击安装新插件&#xff0c; 能看到一些核心插件&#xff0c;如果所需要的插件在核心插件里面有&…

服务器数据恢复—raid5阵列热备盘上线失败导致阵列崩溃的数据恢复案例

服务器磁盘阵列数据恢复环境&#xff1a; 服务器中有两组分别由4块SAS硬盘组建的raid5磁盘阵列&#xff0c;两组raid5阵列划分LUN&#xff0c;组成LVM结构&#xff0c;格式化为EXT3文件系统。 服务器磁盘阵列故障&#xff1a; 服务器中一组raid5阵列中有一块硬盘离线&#xff…

【学习笔记】SSL/TLS证书安全机制之证书透明

1、概念 CT - Certificate Transparency&#xff0c;证书透明 2、Trying to Solve 如果意外的 CA 为我们的域名颁发证书&#xff0c;我们是不可见&#xff0c;这就是证书透明&#xff08;CT&#xff09;要解决的问题 3、How CT Works 任何CA机构颁发的所有证书的公共登记处&…

【Git使用】删除Github仓库中的指定文件/文件夹

前言&#xff1a; 上篇文章带大家上传了第一个项目至github,那要是想删除仓库中的指定文件夹怎么办&#xff1f;在Github中 仓库是无法通过鼠标操作直接删除文件和文件夹的&#xff0c;那只能通过 git 命令来执行删除操作。接下来就带大家进行操作。 详细步骤&#xff1a; 一…

语音识别与语音控制的原理介绍

硬件平台 机器硬件&#xff1a;OriginBot(导航版/视觉版)PC主机&#xff1a;Windows&#xff08;>10&#xff09;/Ubuntu(>20.04)扩展硬件&#xff1a;X3语音版 运行案例 首先进入OriginBot主控系统&#xff0c;运行一下指令。请注意&#xff0c;部分操作OriginBot内暂…

论文阅读与分析:Few-Shot Graph Learning for Molecular Property Prediction

论文阅读与分析&#xff1a;Few-Shot Graph Learning for Molecular Property Prediction 论文地址和代码地址1 摘要2 主要贡献3 基础知识Meta Learning1 介绍2 学习算法Step 1: What is learnable in a learning algorithm?Step 2&#xff1a;Define loss function for learn…

【线性回归模型】

线性回归模型 创建一些带标签的数据集&#x1d437; {(&#x1d499;1, &#x1d466;1) , (&#x1d499;2, &#x1d466;2 ), … , (&#x1d499;&#x1d45a;, &#x1d466;&#x1d45a;) } x为特征&#xff0c;映射到对应的标签y&#xff0c;再引入偏置b 线性回归模…

POI操作EXCEL增加下拉框

文章目录 POI操作EXCEL增加下拉框 POI操作EXCEL增加下拉框 有时候通过excel将数据批量导入到系统&#xff0c;而业务操作人员对于一些列不想手动输入&#xff0c;而是采用下拉框的方式来进行选择 采用隐藏sheet页的方式来进行操作 String sheetName "supplier_hidden_s…

如何不终止容器退出Docker Bash会话

如何不终止容器退出Docker Bash会话 💖The Begin💖点点关注,收藏不迷路💖 当通过docker exec进入Docker容器的bash会话后,如果想退出但不停止容器,可以使用快捷键组合: 按下Ctrl+P然后紧接着按下Ctrl+Q。 这个操作会让你从bash会话中“分离”出来,但容器会继续运行…

【重学 MySQL】三十六、MySQL 其他函数

【重学 MySQL】三十六、MySQL 其他函数 FORMAT(value,n)CONV(value,from,to)INET_ATON(ipvalue)INET_NTOA(value)BENCHMARK(n,expr)CONVERT(value USING char_code) MySQL中有些函数无法对其进行具体的分类&#xff0c;但是这些函数在MySQL的开发和运维过程中也是不容忽视的。 …

磁盘存储简介

硬盘 磁盘的内部结构及原理分区表磁盘阵列 磁盘的内部结构及原理 磁盘的内部结构及原理 https://blog.csdn.net/xiaofeng_yang/article/details/138598159详细了解硬盘的工作原理 https://www.bilibili.com/video/BV1iT411o7sW?vd_source17ec636d673142d7ce4f4250839f49fe 盘…

1.3 等价类划分法

欢迎大家订阅【软件测试】 专栏&#xff0c;开启你的软件测试学习之旅&#xff01; 文章目录 前言1 单功能2 等价划分法3 测试步骤3.1 分析需求3.2 设计测试点3.3 将测试点转为可执行用例文档3.4 执行测试3.5 缺陷管理 前言 在现代软件开发中&#xff0c;确保核心功能的有效性…

一个手机号注册3个抖音号的绿色方法?

下面这是我注册的新账号&#xff0c;显示未实名&#xff0c;在手机号这里显示辅助手机号绑定&#xff0c;手机号绑定这里显示未绑定。如果你需要矩阵&#xff0c;那么&#xff0c;还需要设置好头像&#xff0c;以及介绍&#xff0c;这些都可以正常设置。 再好的方法&#xff0c…

Docker UI强大之处?

DockerUI是一款由国内开发者打造的优秀Docker可视化管理工具。它拥有简洁直观的用户界面&#xff0c;使得Docker主机管理、集群管理和任务编排变得轻松简单。DockerUI不仅能展示资源利用率、系统信息和更新日志&#xff0c;还提供了镜像管理功能&#xff0c;帮助用户高效清理中…

分类预测 | Matlab实现SMA-CNN-SVM黏菌算法优化卷积支持向量机分类预测

分类预测 | Matlab实现SMA-CNN-SVM黏菌算法优化卷积支持向量机分类预测 目录 分类预测 | Matlab实现SMA-CNN-SVM黏菌算法优化卷积支持向量机分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现SMA-CNN-SVM黏菌算法优化卷积支持向量机分类预测&#xff0…

游戏陪玩系统源码搭建教程,如何配置陪玩系统的第三方云储存

陪玩系统开发运营级别陪玩成品搭建 支持二开源码交付&#xff0c;游戏开黑陪玩系统: 多客陪玩系统&#xff0c;游戏开黑陪玩&#xff0c;线下搭子&#xff0c;开黑陪玩系统 前端uniapp后端php&#xff0c;数据库MySQL 1、长时间的陪玩APP源码开发经验&#xff0c;始终坚持从客户…

末端回路漏电监测仪为何不可或缺?

末端回路漏电监测仪 接地故障保护器 智能电力继电器 智能型剩余电流继电器 智能动作保护器 在2022年8月14日一个寻常的午后&#xff0c;庄南地的一片豆角田边&#xff0c;发生了一场令人痛心的意外。杨某与其父亲杨某某正忙于灌溉作物&#xff0c;却不料&#xff0c;一场本可避…

分布式光伏监控系统光储充一体化助力源网荷储

近期&#xff0c;河南省发展改革委发布了“源网荷储新政策”&#xff0c;允许第三方在企业自有或周边土地建设分布式光伏和分散式风电&#xff0c;并将电力出售给用电企业&#xff0c;为“隔墙售电”创造了有利条件。在当前分布式可再生能源装机占比迅速提升、消纳问题日益突出…

【固件升级】Bootloader(三)

1. bootloader方案 类型作用说明RT_threadBOOT带操作系统-使用组件-精简裸机BOOT精简 关于bootloader的软件方案要求第一点要求必须占用资源小易于移植扩展方便灵活修改带操作系统与裸机之争上面这点的解决方案是易于移植&#xff0c;不管是裸机或操作系统把功能性文件放在同…

英飞凌 PSoC6 RT-Thread 评估板简介

概述 2023年&#xff0c;英飞凌&#xff08;Infineon&#xff09;联合 RT-Thread 发布了一款 PSoC™ 62 with CAPSENSE™ evaluation kit 开发板 &#xff08;以下简称 PSoC 6 RTT 开发板&#xff09;&#xff0c;该开发套件默认内置 RT-Thread 物联网操作系统。PSoC 6 RTT 开…