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

目录

一、创建表

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

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

四、制作消息的查询界面

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

六、制作数据重置页面

七、效果图

八、问题

[1、目前无法处理此请求HTTP ERROR 500](#1、目前无法处理此请求HTTP ERROR 500)

[2、The requested URL was not found on this server](#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地址 |

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

php 复制代码
/**************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;
?>

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

php 复制代码
/**************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>";
}
 ?>

四、制作消息的查询界面

php 复制代码
/**************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;
 ?>

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

php 复制代码
/**************db_info.php*******************/

<?php
$SERV="localhost";
$USER="root";
$PASS="root";
$DBNM="db1";
 ?>

六、制作数据重置页面

php 复制代码
/**************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

相关推荐
奋斗的小花生36 分钟前
c++ 多态性
开发语言·c++
C吴新科38 分钟前
MySQL入门操作详解
mysql
魔道不误砍柴功38 分钟前
Java 中如何巧妙应用 Function 让方法复用性更强
java·开发语言·python
闲晨41 分钟前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
2401_850410831 小时前
文件系统和日志管理
linux·运维·服务器
老猿讲编程1 小时前
一个例子来说明Ada语言的实时性支持
开发语言·ada
Chrikk2 小时前
Go-性能调优实战案例
开发语言·后端·golang
幼儿园老大*2 小时前
Go的环境搭建以及GoLand安装教程
开发语言·经验分享·后端·golang·go
canyuemanyue2 小时前
go语言连续监控事件并回调处理
开发语言·后端·golang
杜杜的man2 小时前
【go从零单排】go语言中的指针
开发语言·后端·golang