这是一个模仿QQ空间里面的留言板,所写的一个简单留言板。运用的知识有PHP,mysql,还有一些简单的编程思想,这个里面没有管理员的功能。希望和大家一起交流一下。
首先建立一个Message的文件,里面有一个Public文件夹,用来存放CSS,JS,和Image。再就是核心的PHP文件。
一.public文件夹里面的CSS文件,JS文件。
1.message.css文件代码如下:
/*
留言板的css样式设计
*/
/*
Created on : 2015-8-20, 11:04:46
Author : 鑫鑫
*/
.div1{
margin: 10px 200px;
border:2px solid orange;
background: palegoldenrod;
}
.div2{
background-image:url("../public/51.png");
height: 250px;
}
.div3{
background: palegoldenrod;
height: 60px;
border-top:1px solid orange;
border-bottom:1px solid orange;
}
.div4{
background: palegoldenrod;
height: 100px;
border-bottom:1px solid orange;
}
.div5{
height: 1075px;
}
.div6{
background: palegoldenrod;
height: 40px;
}
.div7{
border-top:0.3px solid olive;
border-bottom:0.3px solid olive;
height: 100px;
}
img{
height: 200px;
}
span{
font-size: 18px;
font-weight: 700px;
}
#span1{
text-align: center;
}
#span2{
border:1px solid orange;
}
#span3{
font-size: 15px;
font-weight: 500px;
}
2.JS文件代码如下:
/*
留言板js文件
*/
function dte() {
if (window.confirm("删除操作不可恢复,您确认继续操作?") == true) {
return true;
} else {
return false;
}
}
</pre><p></p><p>二.login.php留言板首页面的显示的,代码如下:</p><p></p><pre name="code" class="php"><pre name="code" class="php"><!--
留言板的主页面
-->
<?php
require_once 'handle.class.php';
?>
<html>
<head>
<title>Message board</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<link href="./public/message.css" rel="stylesheet" type="text/css"/>
<script language='javascript' type='text/javascript' src="./public/message.js"></script>
</head>
<body>
<?php
require_once 'handle.class.php';
header("Content-type:text/html;charset=utf-8");
if (!empty($_POST['liuyan'])) {
$info = $_POST['liuyan'];
$user = new handle();
$user->add($info);
}
if (!empty($_GETT['num'])) {
$info = $_GET['num'];
$user = new handle();
$user->delete($info);
}
?>
<div class="div1">
<form action="login.php" method="post">
<span >主人寄语</span></br>
<div class="div2">
</div>
<div class="div3"><span>好友印象</span></br>
<?php
require_once 'handle.class.php';
header("Content-type:text/html;charset=utf-8");
$user = new handle();
$user->show_impression();
?>
</div>
<div class="div4">
<span>发表留言</span></br>
<textarea name="liuyan" rows="2" cols="100"></textarea>
<input type="submit" value="发表"></input>
</div>
<div class="div5">
<span>留言</span>
<?php
require_once 'sql_server.class.php';
header("Content-type:text/html;charset=utf-8");
$user = new sql_server();
echo $user->show_page();
?>
</div>
</form>
</div>
</body>
</html>
三.sql_server.class.php封装一个对数据库处理的类。核心处理函数是对数据进行分页处理,代码如下:
<?php
/*
封装一个对数据库操作的类
*/
require_once 'handle.class.php';
class sql_server {
private $mysqli;
private $host = "localhost:3306";
private $user = "root";
private $password = "";
private $db = "message";
function __construct() {
$this->mysqli = new mysqli($this->host, $this->user, $this->password, $this->db);
if ($this->mysqli->connect_error) {
die("连接失败" . $this->mysqli->conecct_error);
}
}
//设置编码
function set_character() {
$this->mysqli->query("set names utf8");
}
//执行sql语句
function execute_dql($sql) {
$res = $this->mysqli->query($sql) or
die("操作失败" . $this->mysqli->error);
return $res;
}
//返回一个数组
function execute_dqls($sql) {
$arr = array();
$res = $this->mysqli->query($sql) or
die("操作失败" . $this->mysqli->error);
$i = 0;
while ($row = $res->fetch_row()) {
$arr[$i++] = $row;
}
$res->free();
return $arr;
}
//分页操作函数
function show_page() {
//创建一个handle类对象
$handle = new handle();
$sql = "select * from m_liuyan";
$res = $this->mysqli->query($sql) or
die("操作失败" . $this->mysqli->error);
$count = $res->num_rows; //总的留言数
$page_size = 10; //每页显示的留言数
$page_count = ceil($count / $page_size); //总的页数
$page_len = 3; //显示的总的页码数
$init = 1;
$max_p = $page_count; //最大的页码
$pages = $page_count; //总页数
$space = ' ';
//判断当前的页码
if (empty($_GET['page']) || $_GET['page'] < 0) {
$page = 1;
} else {
$page = $_GET['page'];
}
//对最后一页和其他页做两个不同情况来处理
if ($page == $pages) {
$offset = 0;
$max_offset = $count - ($pages - 1) * $page_size;
$sql1 = "select * from m_liuyan limit $offset,$max_offset";
} elseif ($page == 1) {
$offset = $count - $page_size; //每一页开始的留言坐标
$sql1 = "select * from m_liuyan limit $offset,$page_size"; //每一页留言的开始坐标与末坐标的控制
} else {
$offset = $page_size * ($pages - $page) - 1; //每一页开始的留言坐标
$sql1 = "select * from m_liuyan limit $offset,$page_size"; //每一页留言的开始坐标与末坐标的控制
}
$result = $this->mysqli->query($sql1) or
die("操作失败" . $this->mysqli->error);
$i = 0;
//把查询的结果都放在一数组中去,然后再次获取即可
while ($row = $result->fetch_row()) {
$arr[$i++] = $row; //把获取的记录存放在$arr数组中去
}
$res->free();
$num = count($arr);
for ($i = $num - 1; $i >= 0; $i--) {
$nums = rand(0, 4);
switch ($nums) {
case 0:$color = 'red';
break;
case 1:$color = 'blue';
break;
case 2:$color = 'black';
break;
case 3:$color = 'green';
break;
case 4:$color = 'purple';
break;
default:
break;
}
echo '<div class="div7"><font color="' . $color . '">';
$num = $arr[$i][3];
$res1 = $handle->get_nickname($num);
echo ' <span>' . $res1[0][0] . '</span> ◀卍▶ <span>第' . $arr[$i][0] . '楼</span></br></br></br>';
echo ' ' . @$arr[$i][1] . '' . $space . '<span id="span3"><a href="controller.php?num=' . $arr[$i][0] . '" οnclick="return dte()">删除</a></span>';
echo '</font></div>';
}
//对上下爷与首页,尾页进行操作
$key = " <font size='3px'><b>批量管理</b></font></br>" . " <span>第" . $page . "页/共" . $pages . "页</span> ";
if ($page != 1) {
//当前页面不是首页的时候显示首页与上一页的超链接
$key.="<a href=\"" . $_SERVER['PHP_SELF'] . "?page=1\">首页</a> ";
$key.="<a href=\"" . $_SERVER['PHP_SELF'] . "?page=" . ($page - 1) . "\">上一页</a> ";
} else {
//当前页面是首页的时候,不显示首页与上一页的超链接
$key.="首页 ";
$key.="上一页 ";
}
//对当前数字页码显示效果的处理
//对当前数字页码显示效果的处理
$num = min($count, $page_len);
if ($page > $count || $page < 1) { //处理非法页号的情况
return;
}
$end = $page + floor($num / 2) <= $count ? $page + floor($num / 2) : $count; //计算结束页码
$start = $end - $num + 1; //计算开始页码
if ($start < 1) { //处理开始页号小于1的情况
$end -= $start - 1;
$start = 1;
}
for ($i = $start; $i <= $end; $i++) { //输出分页条,请自行添加链接样式
if ($i == $page) {
$key.='<span>' . $i . '</span>';
} else {
$url = $_SERVER['PHP_SELF'];
$key.="<a href='{$url}?page=" . $i . "'>" . "{$i}" . "</a> ";
}
}
if ($page != $pages) {
//当前页面不是最后一页的时候,显示下一页和尾页的超链接
//$_SERVER['PHP_SELF']是当前页面的路径
$key.=" <a href=\"" . $_SERVER['PHP_SELF'] . "?page=" . ($page + 1) . "\">下一页</a> ";
$key.="<a href=\"" . $_SERVER['PHP_SELF'] . "?page={$pages}\">尾页</a>";
} else {
//当前页面是最后一页的时候,则下一页和尾页的超链接没有作用
$key.=" 下一页 ";
$key.="尾页";
}
return $key;
}
//关闭连接
function close_connect() {
if (!empty($this->mysqli)) {
$this->mysqli->close();
}
}
}
四.handle.class.php 封装对留言信息的操作类(增加,删除,显示等处理)代码如下:
<?php
/*
封装所有对留言板的内容的操作方法
*/
header("Content-type:text/html;charset=utf-8");
require_once 'sql_server.class.php';
class handle {
//添加留言
function add($info) {
$dat = date('Y-m-d H:i:s');
$nums = rand(0, 8);
$sql = "insert into m_liuyan values('null','$info','$dat','$nums')";
$sql_ser = new sql_server();
$sql_ser->execute_dql($sql);
$sql_ser->close_connect();
}
//删除留言
function delete($info) {
$sql = "delete from m_liuyan where l_id=$info";
$sql_ser = new sql_server();
$sql_ser->execute_dql($sql);
$sql_ser->close_connect();
}
//显示留言
function show() {
$user = new sql_server();
$sql = "select * from m_liuyan";
$arr = $user->execute_dqls($sql);
return $arr;
}
//显示印象
function show_impression() {
$user = new sql_server();
$sql = "select * from m_impression";
$arr = $user->execute_dqls($sql);
for ($i = 0; $i <= count($arr) - 1; $i++) {
echo ' <span id="span2"><font color="red">';
echo $arr[$i][1];
echo "</font></span>";
}
}
//获取留言人的昵称函数封装
function get_nickname($num) {
$user = new sql_server();
$sql = "select u_nickname from m_user where u_id=$num";
$arr = $user->execute_dqls($sql);
return $arr;
}
}
五.数据的设计:
创建一个message数据库,建立三个数据表m_impression,m_liuyan,m_user。
1.m_impression 好友印象表
DROP TABLE IF EXISTS `m_impression`;
CREATE TABLE `m_impression` (
`m_id` int(11) NOT NULL,
`m_content` varchar(126) NOT NULL,
PRIMARY KEY (`m_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2.m_liuyan 留言表
DROP TABLE IF EXISTS `m_liuyan`;
CREATE TABLE `m_liuyan` (
`l_id` int(11) NOT NULL AUTO_INCREMENT,
`l_content` varchar(256) NOT NULL,
`l_time` datetime NOT NULL,
`l_user` int(11) DEFAULT NULL,
PRIMARY KEY (`l_id`),
KEY `l_user` (`l_user`),
CONSTRAINT `m_liuyan_ibfk_1` FOREIGN KEY (`l_user`) REFERENCES `m_user` (`u_id`)
) ENGINE=InnoDB AUTO_INCREMENT=37 DEFAULT CHARSET=utf8;
3.m_user 留言好友表
DROP TABLE IF EXISTS `m_user`;
CREATE TABLE `m_user` (
`u_id` int(11) NOT NULL,
`u_name` varchar(20) NOT NULL,
`u_nickname` varchar(50) NOT NULL,
PRIMARY KEY (`u_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
六.调试成功后的实体图