オリジナルシングルファイル掲示板gbk版
ビデオチュートリアルを見た後に書かれたメッセージボード
基本的に、PHP、変数、定数、ループ (if、switch)、変数スコープ、セッション、関数、再帰関数、セキュリティ処理、クラス、コンストラクター、静的変数、データベース接続、追加、クエリ、更新の基本的な知識ポイントのほとんどをカバーしています。 、
を削除しますHTML、隠しフォーム、JS フォーム検証、スケジュールされたページ リダイレクト、CSS 一時停止の知識ポイント
実装関数:
メッセージの追加、メッセージの削除、ページめくり、管理者によるパスワードの変更など、1 つのページに基づいて掲示板の完全な機能を実現します
コメントはより詳細です
ユーザー名: 管理者
パスワード: 123456
session_start(); //セッションを開始します
/*
* 単一ファイルのゲストブック
* PHP100.com からのものであることを明記してください
*/
//変数の定義と代入
$db_host = 'localhost:3306'; //データベースのホストのポート番号を設定します。通常は localhost:3360 ですが、通常は変更する必要はありません
$db_user = 'root' //データベースのユーザー名を設定します
;$db_pass = 'liijie' //データベースのパスワードを設定します
;$db_name = 'test' //データベース名を設定します
;$db_char = 'GBK' // デフォルトは GBK です。
//定数を定義します
define('Per_page',6) //ページごとのレコード数を定義します
?>
<頭>
<スタイル>
<スクリプト言語="javascript">
<スクリプト言語="javascript">
//基本クラスをインスタンス化します
$base = 新しいベース($db_host,$db_user,$db_pass,$db_name,$db_char);
//基本クラスを定義します
クラスベース{
プライベート静的 $conn ;
var $err ;
//php5 コンストラクターが接続を初期化します
function __construct($db_host,$db_user,$db_pass,$db_name,$db_char='GBK'){
/*データベースに接続し、データベースの文字セットを設定*/
@ $dbo = mysql_connect($db_host,$db_user,$db_pass) または die('データベースのパスワードが正しいか確認してください。');
mysql_select_db($db_name,$dbo) または die ('データベースが存在しません。正しくインストールされているか確認してください');
mysql_query("セット名 '$db_char'",$dbo);
$this->conn = $dbo;
}
//php4 コンストラクター
関数ベース($db_host,$db_user,$db_pass,$db_name,$db_char='GBK'){
$this->__construct($db_host,$db_user,$db_pass,$db_name,$db_char);
}
//メッセージを追加
関数 add(&$data){
$username = $data['username']?$data['username']:'anonymous';
$title = $data['title'];
$msg = $data['msg'];
$sql = sprintf("`liuyan` 値に挿入('','%s','%s','%s','%s')",$username,$title,$msg,time() );
mysql_query($sql,$this->conn);
return mysql_insert_id($this->conn);
}
//メッセージリスト
関数リスト($p=0){
$c = 0;
if($p>0)$c=($p-1) * ページごと;
$limit = " 制限 ".$c.",".Per_page;
$where = '1';
$r = '';
$sql = sprintf("SELECT * from `liuyan` where '%s' $limit",$where.$limit);
$query = mysql_query($sql,$this->conn);
while($row = mysql_fetch_array($query)){
$r[] = $row;
}
$r を返します;
}
//統計ページング
関数ページ(){
$sql = "`liuyan` から count(id) を選択";
$query = mysql_query($sql,$this->conn);
$row = mysql_fetch_row($query);
$page['totals'] = $row[0];
$page['nums'] = ceil($row[0]/ページごと);
$page を返す;
}
//メッセージを削除
関数 del($id){
$this->check();
if(is_array($id)){
$ids .= implode(',',$id);
}その他{
$ids = $id;
}
$sql = "ID が ($ids) にある `liuyan` から削除";
mysql_query($sql,$this->conn);
return mysql_affected_rows($this->conn);
}
//ログイン
関数ログイン($admin_name,$admin_pass){
$pass = md5($admin_name.$admin_pass.$admin_name);
$sql="select * from `admin` where `name`='$admin_name' and `pass` = '$pass' ";
$query = mysql_query($sql,$this->conn);
$row = mysql_fetch_array($query);
if($row['id']>0){
$_SESSION=$row;
ShowMsg('ログイン成功、管理者様'.$_SESSION['name'],3,'?do=manage');
}その他{
ShowMsg('ログインに失敗しました'.$_SESSION['name'],3,'?do=login');
}
}
//パスワードの変更
関数 repass($admin_name,$admin_pass,$admin_id){
$this->check();
$pass = md5($admin_name.$admin_pass.$admin_name);
$sql = "UPDATE `admin` set name='$admin_name' , pass='$pass' where id=$admin_id";
mysql_query($sql,$this->conn);
return mysql_affected_rows($this->conn);
}
//終了
関数 logout(){
$this->check();
session_destroy();
}
// ログインしているかどうかを確認します
関数 check(){
if($_SESSION['name'] && $_SESSION['pass']){
//ShowMsg('登录成功,欢迎管理员'.$_SESSION['name'],3,'?do=manage');
}else{
ShowMsg('请先登录'.$_SESSION['name'],3,'?do=login');
}
}
function getErr(){
return $this->err;
}
function setErr(){
$this->err = mysql_error($this->conn);
}
}
//安全处理 递归函数
function Post_check($arr){
if(is_array($arr)){
foreach($arr as $n=>$k){
$data[$n] = Post_check($k);
}
}else{
return addslashes(trim($arr));
}
return $data;
}
//定时跳转
function ShowMsg($msg,$time=0,$url=''){
echo "<script>ShowMsg('$msg',$time,'$url');</script>";
exit;
}
?>
//流程处理 不同操作显示不同界面
$do = $_REQUEST['do'];
switch($do){
//添加留言
case 'add':
if($_POST['do'] == 'add'){
$data = Post_check($_POST);
if(@$base->add($data)>1){
echo '留言添加成功';
}else{
echo $base->err;
}
}
break;
//删除留言
case 'del':
$data = Post_check($_POST);
$affected_rows=$base->del($data['id']);
if($affected_rows>0){
echo '成功删除'.$affected_rows.'行'.'返回';
}else{
echo '删除失败';
}
break;
//管理员修改密码
case 'repass':
$data = Post_check($_POST);
$r = $base->repass($data['name'],$data['admin_pass'],$data['id']);
if($r){
echo '密码修改成功';
}else{
echo '密码修改失败';
}
break;
//管理员退出登录
case 'logout':
$base->logout();
ShowMsg('成功退出登录'.$_SESSION['name'],3,'?do=');
break;
//管理员登录
case 'login':
if($_POST['admin_name'] && $_POST['admin_pass']){
$data = Post_check($_POST);
$base->login($data['admin_name'],$data['admin_pass']);
}
?>
//管理留言
break;
case 'manage':
$base->check();
$p = intval($_GET['p']);
$lists = $base ->lists($p);
if(!$lists){
echo '留言为空';
}else{
?>
}
//分页
$baseurl = '?do=manage&p=';
$pages = $base->page();
echo '共'.$pages['totals'].'条 '.$p.'/'.$pages['nums'].'页';
echo "首页";
for($i=0;$i<3;$i++){
$class='';
$link = 1;
if($p-1>0)$link =$p-1;
$link+=$i;
if($link>$pages['nums'])break;
if($link==$p){
$class="class='current'";
}
echo "".$link."";
}
echo "末页";
?>
休憩;
?>
//默认显表示留言列表
デフォルト:
$p = intval($_GET['p']);
$lists = $base ->lists($p);
if(!$lists){
echo '留言は空';
}その他{
?>
<テーブル幅="880px">
?>
}
?>
テーブル>
}
//分页部分
$pages = $base->page();
echo '共'.$pages['totals'].'条 '.$p.'/'.$pages['nums'].'页';
echo "首页";
// 表示当前页、上一页 下一页 并自定样式
for($i=0;$i
$class='';
$link = 1;
if($p-1>0)$link =$p-1;
$link+=$i;
if($link>$pages['nums'])break;
if($link==$p){
$class="class='current'";
}
echo "".$link."";
}
echo "末页";
?>
休憩;
}?>