使用MySQL和PHP创建一个公告板

目录

一、创建表

二、制作首页(创建主题以及显示列表)

三、制作各个主题的页面(输入回帖和显示列表)

四、制作消息的查询界面

五、制作读取数据库信息的原始文件

六、制作数据重置页面

七、效果图

八、问题

1、目前无法处理此请求HTTP ERROR 500

2、The requested URL was not found on this server


一、创建表

tbj0(主题表)

tbj1(消息表)

表tbj0的列

列名内容
group_c用于输入主题的组号。列为INT类型且具有自动连续编号功能
topic_c

用于输入主题名,数据类型为VARCHAR(30)

date_c用于输入创建主题的日期和时间。通过MySQL的NOW函数自动输入。数据类型为DATETIME
ip_c用于存储发送信息的客户端的IP地址。不显示在浏览器上,而是作为出现特殊情况时的记录保留下来。这里暂且将数据类型设置为20个字符的字符串类型VARCHAR(20)

表tbj1的列

列名内容
empid用于存储所有主题中的回帖的编号
name用于输入执行操作的人的姓名。数据类型为VARCHAR(30)
mess用于输入消息。数据类型为TEXT
date_c用于输入插入记录时的日期和时间,通过MySQL的NOW函数自动输入
group_c用于存储主题的编号。作为和表tbj0连接时的键使用。数据类型为INT
ip_c和表tbj0一样,用于存储发送信息的客户端的IP地址

二、制作首页(创建主题以及显示列表)

/**************bulletin_top.php*******************/<?php/******** 读取数据库信息等 **************/
require_once("data/db_info.php");/********** 连接数据库,选择数据库 ***********/
$s=new pdo("mysql:host=$SERV;dbname=$DBNM",$USER,$PASS);/************* 显示标题、图片等 **********/
print <<<eot1
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>"海贼王的页面</title>
</head>
<body style="background-color:silver">
<img src="pic/jk.gif" alt="小路飞">
<span style="color:purple;font-size:35pt">
海贼王的公告板!
</span><p>请点击要查看的主题编号</p>
<hr>
<div style="font-size:20pt">(主题列表)<div>
eot1;/**************** 获取客户端IP地址 ******************/
$ip=getenv("REMOTE_ADDR");/********** 如果主题名的变量$su_d有数据,则将其插入表tbj0***********/
$su_d=isset($_GET["su"])?htmlspecialchars($_GET["su"]):null;
if($su_d<>""){$s->query("INSERT INTO tbj0 (topic_c,date_c,ip_c) VALUES ('$su_d',now(),'$ip')");
}$re=$s->query("SELECT * FROM tbj0");
while($result=$re->fetch()){print <<<eot2<a href="bulletin.php?gu=$result[0]">$result[0] $result[1]</a><br>$result[2]创建<br><br>eot2;
}/************** 用于创建主题的表单,以及查询页面的链接 *************/
print <<<eot3<hr><div style="font-size:20pt">(创建主题)</div>请在这里创建新主题!<br><form method="GET" action="bulletin_top.php">新创建主题的标题<input type="text" name="su" size="50"><div><input type="submit" value="创建"></div></form><hr><span style="font-size:20pt">(查询消息)</span><a href="bulletin_search.php">点击这里查询</a><hr></body></html>
eot3;
?>

三、制作各个主题的页面(输入回帖和显示列表)

/**************bulletin.php*******************/<?php/*************** 读取数据库信息等 ***********/
require_once("data/db_info.php");/**************** 连接数据库,选择数据库 *********/
$s=new PDO("mysql:host=$SERV;dbname=$DBNM",$USER,$PASS);/*************** 获取主题的组号(gu),将其赋给$gu_d **********/
$gu_d=$_GET["gu"];/*************** 如果$gu_d中包含数字以外的字符,则停止处理**********/
if(preg_match("/[^0-9]/",$gu_d)){print <<<eot1输入了非法的值<br><a href="bulletin_top.php">请点击这里回到主题列表</a>
eot1;/************** 如果$gu_d中不包含数字以外的字符,则按普通值处理 **********/
}elseif(preg_match("/[0-9]/",$gu_d)){/************** 获取姓名和消息并删除标签 ****************/
$na_d=isset($_GET["na"])?htmlspecialchars($_GET["na"]):null;
$me_d=isset($_GET["me"])?htmlspecialchars($_GET["me"]):null;/************** 获取IP地址 **************************/
$ip=getenv("REMOTE_ADDR");/**************** 显示与主题组号(gu)相匹配的记录 **************/
$re=$s->query("SELECT topic_c FROM tbj0 WHERE group_c=$gu_d");
$result=$re->fetch();/***************** 创建显示主题内容的字符串$topic_c_com **********/
$topic_c_com="「".$gu_d." ".$result[0]."」";/**************** 输出主题显示的标题 *************/
print <<<eot2<!DOCTYPE html><html><head><meta charset="UTF-8"><title>海贼王 $topic_c_com 主题 </title></head><body style="background-color:silver"><div style="color:purple;font-size:35pt">$topic_c_com 主题!</div><br><div style="font-size:18pt">$topic_c_com 的消息</div>
eot2;/************ 如果输入了姓名($na_d),则将记录插入tbj1 **************/
if($na_d<>""){$re=$s->query("INSERT INTO tbj1 VALUES (0,'$na_d','$me_d',now(),$gu_d,'$ip')");
}/*************** 显示出水平线 ***************/
print "<hr>";/************** 按时间顺序显示回帖数据 *************/
$re=$s->query("SELECT * FROM tbj1 WHERE group_c=$gu_d ORDER BY date_c");$i=1;
while($result=$re->fetch()){print "$i($result[0]):$result[1]:$result[3] <br>";print nl2br($result[2]);print "<br><br>";$i++;
}print <<<eot3<hr><div style="font-size:18pt">请在这里向 $topic_c_com 中写消息</div><form method="GET" action="bulletin.php"><div>姓名 <input type="text" name="na"></div>消息<div><textarea name="me" rows="10" cols="70"></textarea></div><input type="hidden" name="gu" value=$gu_d><input type="submit" value="发送"></form><hr><a href="bulletin_top.php">返回主题列表</a></body></html>
eot3;/************ 当$gu_d中不包含数字也不包含数字以外的字符时的处理 *************/
}else{print "请选择主题。<br>";print "<a href='bulletin_top.php'>点击这里返回主题列表</a>";
}?>

四、制作消息的查询界面

/**************bulletin_search.php*******************/<?php/************ 读取数据库信息等 ****************/
require_once("data/db_info.php");/************* 连接数据库,选择数据库 **************/
$s=new PDO("mysql:host=$SERV;dbname=$DBNM",$USER,$PASS);/*************** 显示标题等 **************/
print <<<eot1<!DOCTYPE html><html><head><meta charset="UTF-8"><title>海贼王的查询页面</title></head><body style="breakground-color:aqua"><hr><div style="font-size:18pt">(查询结果如下)</div>
eot1;/****************** 获取查询字符串并删除标签 ************/
$se_d=isset($_GET["se"])?htmlspecialchars($_GET["se"]):null;/************* 如果查询字符串($se_d)中有数据,则执行查询处理 *********/
if($se_d<>""){/************ 查询的SQL语句,连接表tbj1和表tbj0 ********************/
$str=<<<eot2SELECT tbj1.empid,tbj1.name,tbj1.mess,tbj0.topic_cFROM tbj1JOIN tbj0ONtbj1.group_c=tbj0.group_cWHERE tbj1.mess LIKE "%$se_d%"
eot2;/************* 执行查询 ****************/
$re=$s->query($str);
while($result=$re->fetch()){print " $result[0] : $result[1] : $result[2] ($result[3])";print "<br><br>";
}
}/************ 用于输入查询字符串的页面,以及指向首页的链接 **************/
print <<<eot3<hr><div>请输入消息中含有的字符!</div><form method="GET" action="bulletin_search.php">查询字符串<input type="text" name="se"><div><input type="submit" value="查询"></div></form><br><a href="bulletin_top.php">返回主题列表</a></body></html>
eot3;?>

五、制作读取数据库信息的原始文件

/**************db_info.php*******************/<?php
$SERV="localhost";
$USER="root";
$PASS="root";
$DBNM="db1";?>

六、制作数据重置页面

/**************bulletin_reset.php*******************/<?php
require_once("data/db_info.php");
$s=new PDO("mysql:host=$SERV;dbname=$DBNM",$USER,$PASS);$s->query("DELETE FROM tbj0");
$s->query("DELETE FROM tbj1");
$s->query("ALTER TABLE tbj0 AUTO_INCREMENT=1");
$s->query("ALTER TABLE tbj1 AUTO_INCREMENT=1");print "将海贼王的表初始化了";?>

七、效果图

八、问题

1、目前无法处理此请求HTTP ERROR 500

找到对应版本的php.ini,将下面的值由off改为on,然后重启服务器。

display_errors = On
display_startup_errors = On

2、The requested URL was not found on this server

找到Apache文件下的httpd.conf配置文件,将下面的值由none改为all,然后重启服务器。

AllowOverride All

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

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

相关文章

FME教程:以根据自然幢给宗地红线在相交处添加节点为例,介绍图斑在公共边相交处加节点的实现方法,宗地红线批量加节点,图斑自动加界址点

目录 一、实现效果 二、实现过程 1.读取数据 2.提取自然幢的坐标节点 3.根据自然幢节点&#xff0c;给宗地红线添加节点 4.重构宗地红线面 5.输出成果 6.模板的使用 三、总结 今天以根据自然幢给宗地红线在相交处添加节点为例&#xff0c;介绍图斑在公共边相交处加…

C#学生信息管理系统

一、引言 学生信息管理系统是现代学校管理的重要组成部分&#xff0c;它能够有效地管理学生的基本信息、课程信息、成绩信息等&#xff0c;提高学校管理的效率和质量。本文将介绍如何使用SQL Server数据库和C#语言在.NET平台上开发一个学生信息管理系统的课程设计项目。 二、项…

【C++练级之路】【Lv.18】哈希表(哈希映射,光速查找的魔法)

快乐的流畅&#xff1a;个人主页 个人专栏&#xff1a;《算法神殿》《数据结构世界》《进击的C》 远方有一堆篝火&#xff0c;在为久候之人燃烧&#xff01; 文章目录 引言一、哈希1.1 哈希概念1.2 哈希函数1.3 哈希冲突 二、闭散列2.1 数据类型2.2 成员变量2.3 默认成员函数2.…

2013年认证杯SPSSPRO杯数学建模A题(第二阶段)护岸框架全过程文档及程序

2013年认证杯SPSSPRO杯数学建模 A题 护岸框架 原题再现&#xff1a; 在江河中&#xff0c;堤岸、江心洲的迎水区域被水流长期冲刷侵蚀。在河道整治工程中&#xff0c;需要在受侵蚀严重的部位设置一些人工设施&#xff0c;以减弱水流的冲刷&#xff0c;促进该处泥沙的淤积&…

余集和拉格朗日定理

L&#xff1a;一个群的例子&#xff08;在下面的文章中进一步详细介绍&#xff09;;R&#xff1a;约瑟夫路易拉格朗日&#xff08;1736-1813&#xff09;&#xff0c; 一、说明 数学家总是痴迷于根据乍一看似乎完全无关的事实/观察来形成概括。为什么&#xff1f;原因很简单&am…

基于 Quartz.NET 可视化任务调度平台 QuartzUI

一、简介 QuartzUI 是基于 Quartz.NET3.0 的定时任务 Web 可视化管理&#xff0c;Docker 打包开箱即用、内置 SQLite 持久化、语言无关、业务代码零污染、支持 RESTful 风格接口、傻瓜式配置、异常请求邮件通知等。 二、部署 QuartzUI 从 2022 年到现在没有提交记录&#xf…

第十二篇【传奇开心果系列】Python自动化办公库技术点案例示例:深度解读Python自动化操作Word

传奇开心果系列博文 系列博文目录Python自动化办公库技术点案例示例系列 博文目录前言一、Python自动化操作Word介绍二、使用python-docx示例代码二、**使用win32com示例代码**三、使用comtypes示例代码四、使用docx-mailmerge示例代码五、基本操作示例代码六、高级操作示例代码…

计算机网络——32差错检测和纠正

差错检测和纠正 错误检测 EDC 差错检测和纠错位&#xff08;冗余位&#xff09; D 数据由差错检测保护&#xff0c;可以包含头部字段 错误检测不是100%可靠的 协议会泄露一些错误&#xff0c;但是很少更长的EDC字段可以得到更好的检测和纠正效果 奇偶校验 单bit奇偶校验 …

精品PPT-2023年无人驾驶汽车车联网网络安全方案

以下是部分PPT内容&#xff0c;请您参阅。如需下载完整PPTX文件&#xff0c;请前往星球获取&#xff1a; 无人驾驶安全架构是一个复杂的系统&#xff0c;它涉及到多个关键组件和层次&#xff0c;以确保无人驾驶车辆在各种情况下都能安全、可靠地运行。以下是一些主要的无人驾驶…

基于springboot+vue的高效学生实习管理系统【管理员、学院、教师、企业单位、学生】

【管理员】 【院系负责人】 【教师】 【企业单位】 【学生】

Android Glide配置AppGlideModule定制化线程池,Kotlin(1)

Android Glide配置AppGlideModule定制化线程池&#xff0c;Kotlin&#xff08;1&#xff09; plugins {id org.jetbrains.kotlin.kapt }implementation com.github.bumptech.glide:glide:4.16.0kapt com.github.bumptech.glide:compiler:4.16.0 import android.content.Context…

【爬虫开发】爬虫从0到1全知识md笔记第3篇:数据提取概要,知识点【附代码文档】

爬虫开发从0到1全知识教程完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;爬虫课程概要&#xff0c;爬虫基础爬虫概述,,http协议复习。requests模块&#xff0c;requests模块1. requests模块介绍,2. response响应对象,3. requests模块发送请求,4. request…

YOLO电动车检测识别数据集:12617张图像,yolo标注完整

YOLO电动车检测识别数据集&#xff1a;12617张图像&#xff0c;电动车一类&#xff0c;yolo标注完整&#xff0c;部分图像应用增强。 适用于CV项目&#xff0c;毕设&#xff0c;科研&#xff0c;实验等 需要此数据集或其他任何数据集请私信

即刻体验 | 使用 Flutter 3.19 更高效地开发

我们已隆重推出全新的 Flutter 版本——Flutter 3.19。此版本引入了专为 Gemini 设计的新 Dart SDK、一个能让开发者对 Widget 动画实现精细化控制的全新 Widget&#xff0c;Impeller 更新带来的渲染性能提升、有助于实现深层链接的工具和对 Windows Arm64 的支持&#xff0c;以…

全局统一返数据类型封装记录

全局统一返回值封装 ​ 在Spring Boot中&#xff0c;实现全局统一返回值封装是一种常见的做法&#xff0c;它有助于保持API的一致性&#xff0c;并简化前端对响应数据的处理。创建一个响应体类&#xff0c;包含状态码、消息、数据等字段。这个类可以作为所有控制器返回值的通用…

达梦配置ODBC连接

达梦配置ODBC连接 基础环境 操作系统&#xff1a;Red Hat Enterprise Linux Server release 7.9 (Maipo) 数据库版本&#xff1a;DM Database Server 64 V8 架构&#xff1a;单实例1 下载ODBC包 下载网址&#xff1a;https://www.unixodbc.org/ unixODBC-2.3.0.tar.gz2 编译并…

python-django物流仓储进销存配送管理系统flask_1ea2k

实现了一个完整的物流管理系统&#xff0c;其中主要有站点信息模块、物流进度模块、用户表模块、司机模块、入库信息模块、签收信息模块、类型模块、快递信息模块、客户模块、客服模块、公告信息模块、服务类型模块、配置文件模块、出库信息模块、车辆信息模块、仓管模块、账户…

生成式AI的情感实验——AI能否产生思想和情感?

机器人能感受到爱吗&#xff1f;这是一个很好的问题&#xff0c;也是困扰了科学家们很多年的科学未解之谜。虽然我们尚未准备好向智能机器赋予情感&#xff0c;但智能机器却已经可以借助生成式人工智能&#xff08;AI&#xff09;来帮助我们表达自己的情感。 自然情感表达 AI正…

risc-v向量扩展strlen方法学习

riscv向量文档中给出了strlen的实现&#xff0c; 大概是这么一个思路&#xff0c; 加载向量: 使用向量加载指令&#xff08;如 vload&#xff09;从内存中加载一个向量长度的字符。比较向量与零: 使用向量比较指令&#xff08;如 vmask 或 vcmpeq&#xff09;来检查向量中的每…

Linux网络协议栈从应用层到内核层④

文章目录 1、网卡接受数据2、网络设备层接收数据3、ip层接受数据4、tcp层接受数据5、上层应用读取数据6、数据从网卡到应用层的整体流程 1、网卡接受数据 当网卡收到数据时&#xff0c;会触发一个中断&#xff0c;然后就会调用对应的中断处理函数&#xff0c;再做进一步处理。…