留言板功能介紹
用戶利用留言板可以發表自己的留言,管理員可以在後臺對留言進行回覆或刪除管理。
前臺:
- 從數據庫中讀出已有的留言信息,最新的留言顯示在最前面。
- 當留言數較多時,需要分頁顯示。
- 留言表單留言者可以輸入的信息爲:暱稱、電子郵箱(前臺不顯示)、及留言內容,並通過JAVASCRIPT腳本初步檢測信息。
- 留言處理部分需要對輸入的信息再做長度限制級安全性處理,並將合法信息寫入數據表中。
- 如果留言成功,使用html meta的refresh屬性自動返回留言顯示頁面。
後臺:
- 管理員輸入管理密碼,改密碼與user便的信息進行比較驗證,也可與配置文件中配置的密碼比較
- 驗證通過後,回到留言管理界面,每一條留言都提供一個表單以便於回覆留言。
- 對於不巧當的留言,管理員可以直接刪除。
PHP留言板頁面佈局
conn.php:數據庫連接包含文件
config.php:系統配置文件,用於配置每頁顯示留言條數等
index.php:留言板主界面,用於留言數讀取顯示及用戶留言表單(留言表單在留言顯示下方)
submiting.php:助理留言者提交的留言信息
login.php:管理員登錄及驗證頁面
admin.php:留言管理主界面,讀取留言數據,提供回覆表單及刪除等操作界面
reply.php:用於留言回覆,刪除等具體操作
在phpmyadmin中需要創建兩個表guestbook用於儲存留言信息(包括暱稱,日期,留言內容,電子郵箱,回覆),user用於儲存管理員信息(包括管理員編號,管理員名稱,管理員密碼)。
config.php:
<?php
$pagesize = 3;
$gb_password = 123456;
?>
index.php(核心代碼):
<?php
require("./conn.php");
require("./config.php");
//確定當前頁面$p的參數
$p = $_GET['p']?$_GET['p']:1;
//數據指針
$offset = ($p-1)*$pagesize;
$query_sql = "SELECT * FROM guestbook1 ORDER BY id DESC LIMIT $offset , $pagesize";
$result = mysql_query($query_sql);
//如果出現錯誤則退出
if(!$result)exit("查詢數據錯誤:".mysql_error());
//循環輸出
while($gb_array = mysql_fetch_array($result)){
$content = nl2br($gb_array['content']);
$name = nl2br($gb_array['nickname']);
echo $name;
echo'發表於:'.date("Y-m-d H:i",$gb_array['createtime']).'<br/>';
echo'內容:'.nl2br($gb_array['content']).'</br></br>';
if(!empty($gb_array['replytime'])) {
echo '----------------------------<br />';
echo '管理員回覆於:',date("Y-m-d H:i", $gb_array['replytime']),'<br />';
echo nl2br($gb_array['reply']),'<br /><br />';
}
echo '<hr />';
}
//計算留言頁數
$count_result = mysql_query("select count(*) from guestbook");
$count_array =mysql_fetch_array($count_result);
$pagesize = ceil($count_array['count(*)']/$pagesize);//向上舍入爲最接近的整數
echo'共 '.$count_array['count(*)'].' 條留言';
if($pagenum > 1){
for($i=1;$i<=pagenum;$i++){
if($i == $p){
echo'$nbsp;[',$i,']';
} else {
echo'$nbsp;<a href="index.php?p=',$i,'">'.$i.'</a>';
}
}
}
?>
效果圖:
submiting.php:
<?php
error_reporting(E_ALL^E_NOTICE^E_WARNING);
//禁止非POST方式訪問
if(!isset($_POST['submit'])){
exit('非法訪問!');
}
//表單信息處理
if(get_magic_quotes_gpc()){
$nickname = htmlspecialchars(trim($_POST['nickname']));
$email = htmlspecialchars(trim($_POST['email']));
$content = htmlspecialchars(trim($_POST['content']));
}
else{
$nickname = addslashes(htmlspecialchars(trim($_POST['nickname'])));//addslashes() 函數返回在預定義字符之前添加反斜槓的字符串。
$email = addslashes(htmlspecialchars(trim($_POST['email'])));
$content = addslashes(htmlspecialchars(trim($_POST['content'])));
}
if(strlen($nickname)>16){
exit('錯誤:暱稱不得超過16個字符串 [ <a href="javascript:history.back()">返 回</a> ]');
}
if(strlen($nickname)>60){
exit('錯誤:郵箱不得超過60個字符串 [ <a href="javascript:history.back()">返 回</a> ]');
}
// 數據寫入庫表
require("./conn.php");
$createtime = time();
$insert_sql = "INSERT INTO guestbook1(nickname,email,content,createtime)VALUES";
$insert_sql .= "('$nickname','$email','$content',$createtime)";
if(mysql_query($insert_sql)){
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtm
l1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta http-equiv="Refresh" content="2;url=index.php">
<title>留言成功</title>
</head>
<body>
<div class="refresh">
<p>留言成功!非常感謝您的留言。<br />請稍後,頁面正在返回...</p>
</div>
</body>
</html>
<?php
} else {
echo '留言失敗:',mysql_error(),'[ <a href="javascript:history.back()">返 回</a> ]';
}
?>
效果圖:
login.php(略)
效果圖:
admin.php(核心代碼):
<?php
require("./conn.php");
require("./config.php");
$p = $_GET['p']?$_GET['p']:1;
$offset = ($p-1)*$pagesize;
$query_sql = "SELECT * FROM guestbook1 ORDER BY id DESC LIMIT $offset , $pagesize";
$result = mysql_query($query_sql);
if(!$result) exit('查詢數據錯誤:'.mysql_error());
// 循環輸出當前頁顯示數據
while($gb_array = mysql_fetch_array($result)){
echo $gb_array['nickname'],' ';
echo '發表於:',date("Y-m-d H:i:s", $gb_array['createtime']);
echo ' ID號:',$gb_array['id'],'<br />';
echo '內容:',nl2br($gb_array['content']),'<br />';
?>
效果圖:
reply.php:
<?php
error_reporting(E_ALL^E_NOTICE^E_WARNING);
session_start();
if(!isset($_SESSION['username'])){
header("Location: http://".$_SERVER['HTTP_HOST'].rtrim(dirname($_SERVER['PHP_SELF']), '/\\'
)."/login.php");
exit;
}
require("./conn.php");
if($_POST){
if(get_magic_quotes_gpc()){
$reply = htmlspecialchars(trim($_POST['reply']));
} else {
$reply = addslashes(htmlspecialchars(trim($_POST['reply'])));
}
// 回覆爲空時,將回復時間置爲空
$replytime = $reply?time():'NULL';
$update_sql = "UPDATE guestbook1 SET reply = '$reply',replytime = $replytime WHERE id = $_POST[id]";
if(mysql_query($update_sql)){
exit('<script language="javascript">alert("回覆成功!");self.location="admin.php";</script>');
} else {
exit('留言失敗:'.mysql_error().'[ <a href="javascript:history.back()">返 回</a> ]');
}
}
// 刪除留言
if($_GET['action'] == 'delete'){
$delete_sql = "DELETE FROM guestbook1 WHERE id = $_GET[id]";
if(mysql_query($delete_sql)){
exit('<script language="javascript">alert("刪除成功!");self.location = "admin.php";</script>');
} else {
exit('留言失敗:'.mysql_error().'[ <a href="javascript:history.back()">返 回</a> ]');
}
}
?>
更新線
———————————————————————————————————————————
正常留言後發現顯示的留言時間與當前時間相差八個小時整,找到的原因是php.ini文件配置裏的時區不對。
1、打開php.ini文件,ctrl+f查找到DATE如下:
將其中的date.timezone 後面的改爲GMT-8。
2、date_defalut_timezone_set方法
在使用date()函數前加入如下代碼:
date_defalut_timezone_set(“Etc/GMT-8”)
3、直接加上八小時的秒數
<?php
echo date("Y-m-d H:i:s",time()+8*60*60);
?>