使用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=<<<eot2
  SELECT tbj1.empid,tbj1.name,tbj1.mess,tbj0.topic_c
    FROM tbj1
  JOIN tbj0
  ON
      tbj1.group_c=tbj0.group_c
  WHERE 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

轻量应用服务器16核32G28M腾讯云租用优惠价格4224元15个月

腾讯云16核32G服务器租用价格4224元15个月&#xff0c;买一年送3个月&#xff0c;配置为&#xff1a;轻量16核32G28M、380GB SSD盘、6000GB月流量、28M带宽&#xff0c;腾讯云优惠活动 yunfuwuqiba.com/go/txy 活动链接打开如下图&#xff1a; 腾讯云16核32G服务器租用价格 腾讯…

三栏布局——面试/笔试题

目录 三栏布局(两端指定宽度&#xff0c;中间自适应)三栏布局(平均分布) 三栏布局(两端指定宽度&#xff0c;中间自适应) 只介绍简单的写法&#xff0c;圣杯布局之类的比较复杂&#xff0c;实际上越简单越好&#xff0c;所以复杂的就不介绍了 flex布局 <!DOCTYPE html>…

vultr ubuntu 服务器远程桌面安装及连接

一. 概述 vultr 上开启一个linux服务器&#xff0c;都是以终端形式给出的&#xff0c;默认不带 ui 桌面的&#xff0c;那其实对于想使用服务器上浏览器时的情形不是很好。那有没有方法在远程服务器安装桌面&#xff0c;然后原程使用呢&#xff1f;至少ubuntu的服务器是有的&am…

HTTP/1.1、HTTP/2、HTTP/3 演变(计算机网络)

HTTP/1.1 相比 HTTP/1.0 提高了什么性能&#xff1f; HTTP/1.1 相比 HTTP/1.0 性能上的改进&#xff1a; 使用长连接改善了短连接造成的性能开销。支持管道网络传输&#xff0c;只要第一个请求发出去了&#xff0c;不必等其回来&#xff0c;就可以发第二个请求出去&#xff0c…

数据库----数据类型正确选择

mysql支持的数据类型&#xff1a; 数值型&#xff0c;如INT&#xff0c;BIGINT&#xff0c;FLOAT和decimal 日期和时间类型&#xff0c;如DATE,TIME和TIMESTAMP等 字符串类型&#xff0c;如VARCHAR,CHAR和BLOB 空间数据类型&#xff0c;如GEOMETRY&#xff0c;POINT和POLYGON J…

解决创建springboot项目时,无法选中java8的问题

主要原因是springboot3.0.0以上版本需要jdk17. 问题描述&#xff1a; 解决办法&#xff1a; 在Server url上点击齿轮&#xff0c;把http://start.springboot.io/更改为https://start.aliyun.com/ 效果如下

速通汇编(三)寄存器及汇编mul、div指令

一&#xff0c;寄存器及标志 AH&ALAX(accumulator)&#xff1a;累加寄存器BH&BLBX(base)&#xff1a;基址寄存器CH&CLCX(count)&#xff1a;计数寄存器DH&DLDX(data)&#xff1a;数据寄存器SP(Stack Pointer)&#xff1a;堆栈指针寄存器BP(Base Pointer)&#…

C#调用FreeSpire.Office读取word数据的基本用法

FreeSpire.Office是Spire.Office的免费版本&#xff0c;后者支持全面、复杂的office文件操作功能&#xff0c;包括文件格式转换、文档操作、文档打印等&#xff0c;详细介绍见下图及参考文献1。本文学习FreeSpire.Office的基本用法并用其获取word文档的基本信息。   新建Win…

python统计分析——双样本均值比较

参考资料&#xff1a;python统计分析【托马斯】 1、配对样本t检验 在进行两组数据之间的比较时&#xff0c;有两种情况必须区分开。在第一种情况中&#xff0c;同一对象在不同时候的两个记录值进行相互比较。例如&#xff0c;用学生们进入初中时的身高和他们一年后的身高&…

学习transformer模型-Positional Encoding位置编码的简明介绍

今天介绍transformer模型的positional encoding 位置编码 背景 位置编码用于为序列中的每个标记或单词提供一个相对位置。在阅读句子时&#xff0c;每个单词都依赖于其周围的单词。例如&#xff0c;有些单词在不同的上下文中具有不同的含义&#xff0c;因此模型应该能够理解这…

鸿蒙OS开发实例:【ArkTS 实现MQTT协议】

介绍 MQTT是物联网中的一种协议&#xff0c;在HarmonyOS API9平台&#xff0c;解决方案以C库移植为实现方案。 遥遥领先的平台&#xff0c;使用MQTT怎能不遥遥领先呢&#xff01; 新年快乐&#xff0c;本篇将带领你手把手实现HarmonyOS ArkTS语言的MQTT协议。 准备 阅读…

LLM--提示词Propmt的概念、作用及如何设计提示词

文章目录 1. 什么是提示词&#xff1f;2. 提示词的作用3. 如何设计提示词&#xff1f;3.1. 提供详细的信息3.2. 指定角色3.3. 使用分隔符和特殊符号3.4. 提供示例3.5. 少量示例的思维链&#xff08;COT&#xff09;模型3.6. 思维树&#xff08;TOT&#xff09;模型3.7. 自洽性 …

【4】单链表(有虚拟头节点)

【4】单链表&#xff08;有虚拟头节点&#xff09; 1、虚拟头节点2、构造方法3、node(int index) 返回索引位置的节点4、添加5、删除6、ArrayList 复杂度分析(1) 复杂度分析(2) 数组的随机访问(3) 动态数组 add(E element) 复杂度分析(4) 动态数组的缩容(5) 复杂度震荡 7、单链…

【Linux 10】环境变量

文章目录 &#x1f308; Ⅰ 命令行参数⭐ 1. main 函数的参数⭐ 2. main 函数参数的意义⭐ 3. 查看 argv 数组的内容⭐ 4. 命令行参数结论⭐ 5. 为什么要有命令行参数⭐ 6. 命令行参数传递由谁执行 &#x1f308; Ⅱ 环境变量基本概念⭐ 1. 常见环境变量 &#x1f308; Ⅲ 查看…

LeetCode_876(链表的中间结点)

//双指针//时间复杂度O(n) 空间复杂度O(1)public ListNode middleNode(ListNode head) {ListNode slowhead,fast head;while (fast!null && fast.next!null){slow slow.next;fast fast.next.next;}return slow;} 1->2->3->4->5->null 快指针移动两个…

9款免费云服务器,最长永久免费使用

随着云计算技术的快速发展&#xff0c;越来越多的企业和个人开始选择使用云服务器。云服务器提供了灵活、可扩展且易于管理的资源&#xff0c;使得用户可以根据需求随时调整计算能力。本文将分享9款免费云服务器&#xff0c;其中最长可永久免费使用&#xff0c;为用户提供了更多…

flutter官方案例context_menus

1&#xff1a;根据项目中的案例进行部署 2&#xff1a;运行查看有什么用&#xff0c;可不可以直接复制粘贴 案例地址 https://github.com/flutter/samples/tree/main/context_menus案例展示方法 直接把这个文件夹中的文件复制到lib文件夹中 3&#xff0c;19&#xff0c;4的fl…

HTML常用的图片标签和超链接标签

目录 一.常用的图片标签和超链接标签&#xff1a; 1.超链接标签&#xff1a; 前言: 超链接的使用&#xff1a; target属性: 1)鼠标样式&#xff1a; 2)颜色及下划线: 总结: 2.图片标签&#xff1a; 前言: img的使用: 设置图片&#xff1a; 1.设置宽度和高度: 2.HTM…

内网渗透之黄金票据的制作

1、黄金票据是用来留后门的也叫做未知权限&#xff0c;前提条件是你已经拿到了域控的最高权限 一、开始之前我们先来了解一下kerberos Kerberos是一种由MIT&#xff08;麻省理工大学&#xff09;提出的一种网络身份验证协议。它旨在通过使用密钥加密技术为客户端/服务器应…

基于muduo网络库实现的集群聊天服务器

目录 项目内容开发环境安装说明技术介绍项目目录数据库设计项目介绍启动服务器启动客户端注册账号登录成功一对一聊天业务创建群聊业务加入群聊业务群聊业务添加好友业务离线消息存储业务 特殊说明 &#xff01;&#xff01;&#xff01;项目是照着腾讯课堂施磊老师的视频学习&…