当前位置: 首页 > news >正文

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

基于 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 注入防护等,并且可以增加更多功能,如搜索、分类、用户权限管理等。

相关文章:

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

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

RK3568 解决Ubuntu加载驱动模块报错以及开机启动如何自动加载模块

遇到问题是,当我在buildroot文件系统跑这个ko文件,是可以正常使用的,但是在Ubuntu上却跑不了,提示:insmod: ERROR: could not insert module analyze_inode.ko: Operation not permitted 参考其他博主的博客,其实只要添加sudo即可,可能是权限问题导致无法加载,这里记录…...

Fyne ( go跨平台GUI )中文文档-Fyne总览(二)

本文档注意参考官网(developer.fyne.io/) 编写, 只保留基本用法 go代码展示为Go 1.16 及更高版本, ide为goland2021.2​​​​​​​ 这是一个系列文章&#xff1a; Fyne ( go跨平台GUI )中文文档-入门(一)-CSDN博客 Fyne ( go跨平台GUI )中文文档-Fyne总览(二)-CSDN博客 Fyne…...

微服务常见面试题总结

文章目录 1 概念1.1 你对微服务是怎么理解的1.2 微服务带来了哪些挑战&#xff1f;1.3 说下微服务有哪些组件&#xff1f;&#x1f525; 2 注册中心2.1 注册中心有什么用&#xff1f;&#x1f525;2.2 SpringCloud可以选择哪些注册中心&#xff1f;2.3 说下Eureka 和 Nacos的区…...

汽车电子零部件(16):ZCU区域控制器

ZCU(Zone Control Unit,区域控制器),功能主要包括哦数据交互、信号控制及电力分配等,是智能网联汽车中不可或缺的关键组件,ECU负责车身、车门、车窗、天窗、车灯(外大灯、内氛围灯)、座椅(可能包括座椅音响)、雷达甚至后排娱乐系统等控制执行单元的集中化。 CCU(centr…...

如何在Java服务中实现数据一致性:事务与锁机制的综合应用

如何在Java服务中实现数据一致性&#xff1a;事务与锁机制的综合应用 大家好&#xff0c;我是微赚淘客返利系统3.0的小编&#xff0c;是个冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;在Java服务端开发中&#xff0c;确保数据一致性是构建稳定可靠系统的关键。尤…...

记录一下ElementUI 3 在浏览器导入, table表格显示问题

当时问题忘了截图, 现在通过文字记录一下问题 我直接在html了引入 vue3 和 ElementUI 3 , 使用了table组件, 但是表格的td 总是只显示一列, 问题是我的 el-table-column 标签 没有结束标签 , 在vue文件模块化里写不需要结束标签, 在浏览器里无法直接识别出来, 所以他是渲染了第…...

【JavaScript】数据结构之堆

什么是堆&#xff1f; 堆都能用树来表示&#xff0c;一般树的实现都是利用链表。而 二叉堆 是一种特殊的堆&#xff0c;它用完全二叉树来表示&#xff0c;却可以利用数组实现。平时使用最多的是二叉堆。二叉堆易于存储&#xff0c;并且便于索引。堆数据结构像树&#xff0c;但…...

工程车辆目标检测、程车检测算法、工程车辆类型检测算法

工程车检测算法主要用于智能交通系统、建筑工地管理、矿山开采、物流运输等领域&#xff0c;通过图像识别技术来检测和识别工程车&#xff0c;以提高安全管理、交通流量管理和资源调度的效率。以下是关于工程车检测算法的技术实现、应用场景及优势的详细介绍。 一、技术实现 工…...

【技术文章】ArcGIS Pro如何批量导出符号和工程样式?

目录 1.确定Pro软件版本 2.共享工程样式 3.管理和调用项目样式 制作好的地图&#xff0c;如何快速分享地图中的符号样式用于其它地图的制作&#xff1f; 在ArcMap软件中&#xff0c;可以通过命令一键批量导出所有符号。ArcGIS Pro软件是否也可以批量导出符号用于其它地图…...

javascript的闭包学习

为什么要产生闭包的概念&#xff0c;通俗来说一下。 公司有一个项目&#xff0c;分为两个部分&#xff0c;张三、李四各分配一个部分。 张三.js代码&#xff1a; var key我要吃肉 function fn(){console.log(key); } 李四.js代码&#xff1a; var key我要喝酒 function fn…...

JavaScript高级—— js 是单线程运行的

1、如何证明 js 执行时单线程的&#xff1f; ① setTimeout&#xff08;&#xff09;的回调函数是在主线程执行的 ② 定时器回调函数只有在运行栈中的代码全部执行完后才有可能执行 2、为什么 js 要用单线程模式&#xff0c;而不用多线程模式&#xff1f; ① JavaScript 的单…...

Java 微服务框架 HP-SOA v1.1.4

HP-SOA 功能完备&#xff0c;简单易用&#xff0c;高度可扩展的Java微服务框架。 项目主页 : https://www.oschina.net/p/hp-soa下载地址 : https://github.com/ldcsaa/hp-soa开发文档 : https://gitee.com/ldcsaa/hp-soa/blob/master/README.mdQQ Group: 44636872, 66390394…...

代码随想录Day 52|题目:101.孤岛的面积、102.沉没孤岛、103.水流问题、104.建造最大岛屿

提示&#xff1a;DDU&#xff0c;供自己复习使用。欢迎大家前来讨论~ 文章目录 图论part03题目一&#xff1a;101.孤岛的总面积解题思路DFS**BFS** 题目二&#xff1a;102. 沉没孤岛解题思路 题目三&#xff1a;103. 水流问题解题思路优化 题目四&#xff1a;104.建造最大岛屿…...

go webapi上传文件

一、导入依赖 import "net/http" 我这里用到了Guid所以安装依赖 go get github.com/google/uuid 二、main.go package mainimport ("fmt""github.com/jmoiron/sqlx""github.com/tealeg/xlsx""log""path/filepath&q…...

【小沐学GIS】基于Openstreetmap创建Sionna RT场景(Python)

文章目录 1、简介1.1 blender 2、下载和安装2.1 Python2.2 jupyter 3、运行结语 1、简介 1.1 blender https://www.blender.org/ Blender 是一款免费开源的3D创作套件。 使用 Blender&#xff0c;您可以创建3D可视化效果&#xff0c;例如静态图像、3D动画、VFX&#xff08;…...

网安面试题1

深信服厂商面 自我介绍 我看到你介绍里面有提到独立设计网络拓扑图&#xff0c;你知道内网有哪些攻击途径吗 护网红队有什么成果 sql注入有哪些类型 sql注入的防御方式 讲一个你工作中遇到的应急响应 怎么判断内网的攻击是不是真实攻击 Windows中了勒索病毒你应该怎么办 linux被…...

你了解system V的ipc底层如何设计的吗?消息队列互相通信的原理是什么呢?是否经常将信号量和信号混淆呢?——问题详解

前言&#xff1a;本节主要讲解消息队列&#xff0c; 信号量的相关知识。 ——博主主要是以能够理解为目的进行讲解&#xff0c; 所以对于接口的使用或者底层原理很少涉及。 主要的讲解思路就是先讨论消息队列的原理&#xff0c; 提一下接口。 然后讲解ipc的设计——这个设计一些…...

python爬虫初体验(一)

文章目录 1. 什么是爬虫&#xff1f;2. 为什么选择 Python&#xff1f;3. 爬虫小案例3.1 安装python3.2 安装依赖3.3 requests请求设置3.4 完整代码 4. 总结 1. 什么是爬虫&#xff1f; 爬虫&#xff08;Web Scraping&#xff09;是一种从网站自动提取数据的技术。简单来说&am…...

ER 图 Entity-Relationship (ER) diagram 101 电子商城 数据库设计

起因&#xff0c; 目的: 客户需求, 就是要设计一个数据库。 过程&#xff0c; 关于工具: UI 设计&#xff0c;我最喜欢的工具其实是 Canva, 但是 Canva 没有合适的模板。我用的是 draw.io, 使用感受是&#xff0c;很垃圾。 各种快捷键不适应&#xff0c;箭头就是点不住&…...

别再搞混了!改进DH与标准DH参数在IRB1200建模中的关键差异与选择

别再搞混了&#xff01;改进DH与标准DH参数在IRB1200建模中的关键差异与选择 当你在为ABB IRB1200这类六轴工业机器人构建运动学模型时&#xff0c;是否曾被两种不同的DH参数表示法困扰&#xff1f;标准DH&#xff08;Denavit-Hartenberg&#xff09;和改进DH&#xff08;Modif…...

Win10/Win11更新后飞行堡垒风扇快捷键失效?手把手教你找回丢失的FN+F5控制(附各型号解决方案对照表)

Win10/Win11更新后飞行堡垒风扇快捷键失效&#xff1f;深度修复指南与全型号适配方案 每次Windows大版本更新后&#xff0c;总有些硬件功能像变魔术一样消失——比如飞行堡垒系列笔记本的风扇控制快捷键FNF5。这背后其实是微软系统更新机制与厂商驱动之间的微妙博弈。作为从飞…...

3个步骤,用PCL2启动器彻底告别Minecraft配置烦恼

3个步骤&#xff0c;用PCL2启动器彻底告别Minecraft配置烦恼 【免费下载链接】PCL Minecraft 启动器 Plain Craft Launcher&#xff08;PCL&#xff09;。 项目地址: https://gitcode.com/gh_mirrors/pc/PCL 你是否遇到过这样的场景&#xff1a;好不容易下载了心仪的模组…...

别再死记硬背了!用GNS3/EVE-NG模拟BGP、OSPF、RIP混合组网,带你理解路由选路优先级

动态路由协议实战&#xff1a;用GNS3/EVE-NG解密BGP、OSPF、RIP选路逻辑 当你面对一个同时运行BGP、OSPF和RIP的复杂网络时&#xff0c;路由器究竟如何选择最佳路径&#xff1f;这个看似基础的问题&#xff0c;却让无数网络工程师在深夜排障时抓狂。传统教材中那些枯燥的AD值表…...

Tegra K1深度解析:192核GPU如何重塑移动游戏与异构计算

1. 项目概述&#xff1a;一次移动游戏体验的底层革命 2014年&#xff0c;当小米发布其首款平板电脑MiPad&#xff0c;英伟达&#xff08;Nvidia&#xff09;同步推出Shield Tablet时&#xff0c;整个移动计算领域&#xff0c;尤其是安卓游戏生态&#xff0c;感受到了一次来自底…...

ctf show web 入门43

打开靶场代码逻辑如下&#xff1a; if(!preg_match(“/\ |/|cat/i”, $c)) 它过滤了三个关键内容&#xff1a; \ (空格)&#xff1a;你不能直接在命令中使用空格&#xff08;例如 ls -l 或 cat flag 都会失败&#xff09;。 / (正斜杠)&#xff1a;你不能使用路径符号&#xf…...

别再只懂RGB了!用PIL的getpixel()玩转图片九种模式,从像素值看图像本质

像素解码术&#xff1a;用PIL九种图像模式与getpixel()重构视觉认知 当你用getpixel()提取像素值时&#xff0c;是否曾被这些情况困扰过&#xff1a;明明是彩色图片却返回单个数字&#xff1f;处理PNG透明背景时得到四个值的元组&#xff1f;灰度图的像素值突然变成0或255&…...

2026年AGI突围:自主智能体驱动,数字生命从架构落地到自我迭代全解析

2026年&#xff0c;AI行业正式告别“生成式狂欢”&#xff0c;迈入“自主智能体&#xff08;AI Agent&#xff09;规模化落地元年”。Gartner将自主智能体列为年度十大战略技术趋势之首&#xff0c;各大科技厂商纷纷布局&#xff0c;从实验室概念到产业应用&#xff0c;自主智能…...

如何用Rye与Docker打造无缝Python容器开发环境:完整实践指南

如何用Rye与Docker打造无缝Python容器开发环境&#xff1a;完整实践指南 【免费下载链接】rye a Hassle-Free Python Experience 项目地址: https://gitcode.com/gh_mirrors/ry/rye Rye是一款旨在提供无忧Python开发体验&#xff08;a Hassle-Free Python Experience&am…...

Linux桌面美化:pixie-cursors鼠标指针主题安装与定制指南

1. 项目概述&#xff1a;一个为Linux桌面注入灵魂的鼠标指针主题如果你和我一样&#xff0c;是一个长期在Linux桌面环境下工作的开发者或爱好者&#xff0c;那么对于系统美化的追求&#xff0c;可能从未停止过。从窗口管理器到终端配色&#xff0c;从图标包到壁纸&#xff0c;每…...