SQL+HTML+PHP?一個簡單論壇網站的綜合開發(fā)案例(注冊、登錄、注銷、修改信息、留言等)
1 實驗環(huán)境
(1)服務端:本實驗基于虛擬機win2008系統(tǒng)的WAMP環(huán)境進行,該環(huán)境相關配置過程參考文章《【語言環(huán)境】WAMP環(huán)境部署及優(yōu)化—以win2008R2SP1為操作系統(tǒng)》。
(2)客戶端:使用瀏覽器訪問與控制。
(3)服務端與客戶端處于同一個局域網下,開啟服務端的phpstudy并確保能從客戶端瀏覽器訪問。
2 網站頁面功能規(guī)劃
寫一個網站,在首頁能看用戶的留言,同時能實現包括用戶注冊、登錄、注銷、上傳頭像、修改個性簽名等。其中網站的所有代碼文件均放在默認站點位置下的文件夾jrltbbs中。
2.1 論壇首頁
論壇首頁文件為index.php,并具有如下功能
顯示論壇標題;根據用戶是否登錄分支顯示:已登錄則顯示“歡迎來到論壇首頁”字樣,同時顯示個人中心、注銷、新增留言等按鈕;未登錄則顯示注冊和登錄按鈕,未登錄僅能看留言。網頁主體用于顯示留言(后續(xù)實驗完善留言功能) 2.2 個人中心
個人中心相關的代碼文件均放入個人中心文件夾為member中 ,個人中心相關的代碼文件包含:
(1)個人中心的首頁./member/index.php。具有如下功能:
個人中心頁面標題顯示個人中心;根據用戶是否登錄分支顯示:已登錄則顯示歡迎“歡迎來到個人中心”字樣、顯示個人賬號、頭像及個性簽名信息、同時顯示信息修改和注銷按鈕;未登錄則顯示注冊和登錄按鈕。
(2)注冊頁面./member/register.php。用于實現注冊功能,具體功能如下:
設置表單用于首次收集用戶信息(包括輸入的賬號及兩次輸入的密碼),設置提交按鈕用于提交表單數據。后臺完成賬號密碼的驗證:①賬號或密碼為空,則返回注冊頁面“提示賬號密碼不能為空,請重新輸入”;②若兩次密碼不一致,則返回注冊頁面并提示“兩次密碼輸入不一致”;③若賬號已在數據庫中存在,則返回注冊頁面并提示“賬號已存在,請重新注冊”;④賬號密碼沒問題則存入數據庫中,并返回COOKIE。
(3)接收來自注冊頁面的表單數據并完成賬號密碼驗證./member/addUser.php 。具體功能如下:
接收來自注冊頁面的表單數據完成賬號密碼的驗證,沒問題后將表單數據寫入數據庫
①賬號或密碼為空,則返回注冊頁面“提示賬號密碼不能為空,請重新輸入”;
② 若兩次密碼不一致,則返回注冊頁面并提示“兩次密碼輸入不一致”;
③若賬號已在數據庫中存在,則返回注冊頁面并提示“賬號已存在,請重新注冊”;
④賬號密碼沒問題則存入數據庫中,并返回COOKIE。
(5)登錄頁面./member/login.php。用于用戶登錄,具體功能如下:
設置表單用于收集用戶輸入賬號及密碼,設置提交按鈕用于提交表單數據。后臺完成賬號密碼與數據庫數據驗證,賬號密碼正確則返回COOKIE、顯示歡迎字樣、并提供返回首頁與個人中心按鈕;賬號密碼錯誤則重定向到登錄頁面重新輸入。暫時不考慮設置驗證碼的功能。
(6)注銷頁面./member/logout.php。用于用戶注銷,具體功能如下:
刪除COOKIE;并根據是否注銷成功分支顯示:成功則提示成功并顯示返回首頁按鈕,失敗則顯示注銷失敗。
(7)頭像上傳及更新頁面./member/updatePhoto.php。主要用于更新頭像。
頭像修改頁面,顯示按鈕讓用戶選擇新頭像,修改成功后頁面顯示修改成功,提供返回個人中心和返回首頁等按鈕。
(8)生成驗證碼頁面./member/vcode.php。用于生成隨機字符串的驗證碼。
2.3 實現留言功能
(1)顯示留言內容頁面./showmessage.php。
讀者點擊網站首頁留言標題時,跳轉到此頁面,用于展示該留言內容。
(2) 新增留言頁面./addMessage.php。用于已登錄的用戶新增留言。
2.4 數據庫及連接數據庫
(1)數據庫名稱為jrlt,數據庫中新建兩個數據表,分別為:
users表:保存用戶注冊與修改的數據。該表共有5個字段,分別是id、name、password、photo、money。messages表:保存首頁用戶留言數據。該表共有4個字段,分別是id、uname、title、content。
(2) 與mysql數據庫建立連接./inc/dblink.inc.php。具體功能如下:
用于實現PHP與mysql數據庫建立連接,當其他PHP腳本需要與mysql數據庫建立連接時,使用include引入。 3 實驗階段一:實現注冊、登錄、注銷和更新頭像等功能 3.1 數據庫
數據庫的創(chuàng)建以及與PHP之間的連接可具體參考《【PHP基礎-10】實現PHP與SQL數據庫之間的交互》,在本綜合案例中,創(chuàng)建數據庫及其相應的數據表步驟如下:
(1)先在數據庫中創(chuàng)建一個jrlt的數據庫。
(2)在該數據庫下創(chuàng)建兩個表,一個是users,一個是messages,所含字段分別如下:
3.2 論壇首頁./index.php
首頁位于默認站點位置下的位置為\PHP\jrltbbs\index.php。
代碼如下。
<html> <head> <meta charset="utf-8"> <title> 首頁----今日論壇</title> </head> <body> <h1>今日論壇BBS</h1> <?php if(isset($_COOKIE['name'])){ echo "歡迎來到今日論壇BBS,".$_COOKIE['name']."<br/>"; echo "<a href='./member/index.php'>個人中心</a> "; echo "<a href='./member/logout.php'>注銷</a>"; }else{ echo " <a href='./member/register.php'>注冊</a> "; echo "<a href='./member/login.php'>登錄</a> "; } ?> <hr/> <h3>留言板</h3> </body> </html>
3.3 個人中心注冊頁面./member/register.php
設置表單用于收集用戶輸入的賬號及兩次輸入的密碼,設置提交按鈕用于提交表單數據。
代碼如下:
<html> <head> <meta charset="utf-8"> <title> 注冊----今日論壇</title> </head> <body> <h1>今日論壇BBS</h1> <form action="./addUser.php" method="post" > 用戶名:<input type="text" name="userName"><br/> 密碼:<input type="password" name="userPass1"><br/> 確認密碼:<input type="password" name="userPass2"><br/> <input type="submit" name="userSubmit" value="注冊"> </form> <hr/> </body> </html>
3.4 接收來自注冊頁面的表單數據./member/addUser.php
接收來自注冊頁面的表單數據,并完成賬號密碼的驗證:①賬號或密碼為空,則返回注冊頁面“提示賬號密碼不能為空,請重新輸入”;②若兩次密碼不一致,則返回注冊頁面并提示“兩次密碼輸入不一致”;③若賬號已在數據庫中存在,則返回注冊頁面并提示“賬號已存在,請重新注冊”;④賬號密碼沒問題則存入數據庫中,并返回COOKIE。
代碼:
<meta charset="utf-8"> <?php include "../inc/dblink.inc.php"http://將數據庫連接的文件包含到此文件中 ?> <?php //var_dump($_POST); if(isset($_POST['userSubmit'])){ $userName=$_POST['userName']; $userPass1=$_POST['userPass1']; $userPass2=$_POST['userPass2']; if((bool)($userName) && (bool)($userPass1) && (bool)($userPass2)){ // 查詢數據庫中是否有此用戶,若無則新增,若有則要求重新輸入 $sql1="select * from users where name='".$userName."'"; if(!$results1=mysqli_query($link,$sql1)){ die("SQL語句有誤"); }else{ if(!mysqli_num_rows($results1)){//非空往數據庫中增加 if($userPass1===$userPass2){ $sql2="insert into users(name, password) values('".$userName."', md5($userPass1))"; if(!$results2=mysqli_query($link,$sql2)){ die("SQL語句有誤"); }else{ echo "注冊成功,<a href='./login.php'>請登錄<a>"; } }else{ echo "兩次密碼輸入不一致,<a href='./register.php'>請重新注冊<a>"; } }else{ echo "用戶名已存在,<a href='./register.php'>請重新注冊<a>"; } } $results1=mysqli_query($link,$sql1); }else{ echo "賬號或密碼不能為空, <a href='./register.php'>請重新注冊<a>"; } }else{ header("Location:./register.php"); } //var_dump((bool)($userName)); //var_dump((bool)($userPass1)); //var_dump((bool)($userPass2)); ?> <?php mysqli_close($link); ?>
tips:
注意:isset() 函數用于檢測變量是否已設置并且非 NULL,如果已經使用 unset() 釋放了一個變量之后,再通過 isset() 判斷將返回 FALSE。若使用 isset() 測試一個被設置成 NULL 的變量,將返回 FALSE。同時要注意的是 null 字符(“\0”)并不等同于 PHP 的 NULL 常量。
3.5 與mysql數據庫建立連接./inc/dblink.inc.php
為其他需要連接數據庫的網頁提供連接,避免重復定義。
<?php $dbHost="127.0.0.1"; $dbUser="root"; $dbPass="root"; $dbName="jrlt"; $link=mysqli_connect($dbHost, $dbUser, $dbPass, $dbName);//建立數據庫連接 if(!$link){ die(mysqli_connect_error());//捕獲數據庫連接時的錯誤信息 } mysqli_set_charset($link,"utf-8"); ?>
3.6 個人中心的首頁./member/index.php
利用COOKIE信息中的name值是否存在來判斷是否已登錄,如果未登錄,則需要先登錄;如果已經登錄,可以利用COOKIE信息中的name字段,將用戶輸入的信息與數據庫中的信息進行對比,只有數據庫中已有的用戶才能登錄。
代碼如下
<?php include "../inc/dblink.inc.php"http://將數據庫連接的文件包含到此文件中 ?> <html> <head> <meta charset='utf-8'> <title>今日論壇--個人中心</title> </head> <body> <h1>今日論壇--個人中心</h1> <?php if(isset($_COOKIE['name'])){ $userName=$_COOKIE['name']; $sql="select * from users where name='". $userName."'"; if($results=mysqli_query($link,$sql)){ if(mysqli_num_rows($results)>0){ $result=mysqli_fetch_assoc($results); echo "<hr/>"; echo "歡迎來到您的個人中心,".$_COOKIE['name'] ."! <a href='../index.php'>返回首頁</a> "; echo "<a href='./logout.php'>注銷</a><br/>"; echo "<hr/>"; echo "<h3>個人信息</h3>"; echo "帳號名:".$_COOKIE['name'] ."<br/>"; echo "您的頭像是<img src='".$result['photo']."'/> "; echo "<a href='./updatePhoto.php'>修改頭像</a> <br/>"; echo "帳戶余額:".$result['money']." <span style='color:red;'>請聯系管理員</span>"; }else{ die("該用戶不存在"); } }else{ die("sql語句有誤"); } }else{ echo "<a href='./login.php'>請登錄</a>"; } ?> </body> </html> <?php mysqli_close($link); ?>
3.7 登錄頁面 ./member/login.php
當$_POST['userSubmit']
具有數據時,則判斷將用戶輸入的信息與數據庫信息進行對比,正確則可以成功登錄;若$_POST['userSubmit']
無數據時,則設置表單用于收集用戶輸入賬號及密碼,設置登錄按鈕用于提交表單數據(表單數據提交到當前頁面)。
setcookie設置路徑:設置成 ‘/’ 時,為網站默認路徑,Cookie 對整個域名 domain 有效。 如果設置成 ‘/PHP/’, Cookie 僅僅對 domain 中 /PHP/ 目錄及其子目錄有效。 設置 Cookie 時的默認值為代碼文件所在的當前目錄。因此,為了讓網站首頁也能獲取到cookie,需要設置路徑為/PHP/jrltbbs
。
代碼:
<?php include "../inc/dblink.inc.php"http://將數據庫連接的文件包含到此文件中 ?> <html> <head> <meta charset="utf-8"> <title> 登錄----今日論壇</title> </head> <body> <h1>今日論壇BBS</h1> <?php if(isset($_POST['userSubmit'])){ if($_POST['vcode']==$_COOKIE['vcode']){ $userName=$_POST['userName']; $userPass=$_POST['userPass']; $sql="select * from users where name='".$userName."' && password='".md5($userPass)."'"; if($results=mysqli_query($link,$sql)){ if(mysqli_num_rows($results)>0){ setcookie('name',$userName,time()+3600*24, "/PHP/jrltbbs"); //注意cookie的路徑,不同路徑的cookie認為是兩條cookie echo "登錄成功,返回<a href='../index.php'>首頁</a>或<a href='./index.php'>個人中心</a>"; }else{ echo "用戶名或密碼錯誤,<a href='./login.php'>請重新登錄</a>"; } }else{ die("sql語句有誤"); } }else{ echo "驗證碼錯誤,<a href='./login.php'>請重新登錄</a>"; } }else{ $html=<<<HTML <form method="post"> 用戶名:<input type="text" name="userName"><br/> 密碼:<input type="password" name="userPass"><br/> 驗證碼:<input type="text" name="vcode"> <iframe src= "./vcode.php" width="100" height=30 frameboder="0"></iframe><br> <input type="submit" name="userSubmit" value="登錄"> </form> HTML; echo $html; } ?> <hr/> </body> </html> <?php mysqli_close($link); ?>
3.8 注銷頁面./member/logout.php
使COOKIE過期;
代碼:
<meta charset="utf-8"> <?php if(setcookie('name',$_COOKIE['name'],time()-3600,"/PHP/jrltbbs")){ //注意cookie的路徑,不同路徑的cookie認為是兩條cookie echo "注銷成功,<a href='../index.php'>返回首頁</a>"; }else{ die("error"); } ?>
3.9 更新頭像./member/updatePhoto.php
用于上傳或更新頭像。
代碼:
<meta charset='utf-8'> <?php include "../inc/dblink.inc.php"http://將數據庫連接的文件包含到此文件中 ?> <?php if(isset($_POST['userSubmit'])){ $userName=$_COOKIE['name']; $tmp_path=$_FILES['userFile']['tmp_name']; $path=".\\images\\".$_FILES['userFile']['name']; if(move_uploaded_file($tmp_path,$path)){ $path=mysqli_real_escape_string($link,$path); $sql="update users set photo='".$path."'where name='".$userName."'"; if($results=mysqli_query($link,$sql)){ echo "圖片上傳成功,<a href='./index.php'>返回個人中心</a>"; }else{ die("sql語句有誤"); } }else{ echo "圖片上傳失敗"; } }else{ $html=<<<HTML <form method="post" enctype="multipart/form-data" > <input type="file" name="userFile"><br/> <input type="submit" name="userSubmit" value="提交"> </form> HTML; echo "$html"; } ?> <?php mysqli_close($link); ?>
3.10 生成驗證碼./member/vcode.php
用于簡單生成隨機的字符串驗證碼。
<?php $str=""; for($i=0;$i<5;$i++){ $str.=chr(rand(97,122)); setcookie("vcode",$str); } echo "<div style='background-color:red'>$str</div>"; ?>
3.11 測試
(1)訪問今日論壇首頁,顯示結果為:
(2)點擊注冊,輸入賬號1,不輸入密碼。
(3)點擊注冊時,頁面顯示如下,提示”賬號或密碼不能為空, 請重新注冊“。
(4)點擊重新注冊,然后輸入賬號1,密碼2,點擊注冊,彈出以下提示
(5)點擊重新注冊,然后輸入賬號a,密碼1,確認密碼輸入2,點擊注冊,彈出以下提示
(6)點擊重新注冊,然后輸入賬號a,密碼1,確認密碼輸入1,點擊注冊,彈出以下提示
(7)點擊登錄,輸入賬號a,密碼1,并輸入驗證碼(驗證碼輸入不一致),嘗試下會出現什么結果,點擊登錄,出現以下提示。
(8)點擊”請重新登錄“,輸入賬號a,密碼1,并輸入驗證碼,點擊登錄,
(8)顯示登錄成功,返回首頁與個人中心。網頁獲取到服務端發(fā)來的COOKIE,返回首頁與個人中心均可用。
(9)當點擊返回首頁時的頁面結果如下。
(10)當點擊返回個人中心時,頁面結果如下。
(11)點擊修改頭像,選擇自己的圖片文件,并點擊提交。
(12)圖像上傳成功,點擊返回個人中心。
(13)返回個人中心后可以看到自己上傳的頭像。
(14)點擊注銷即可退出登錄,系統(tǒng)將刪除COOKIE。
(15)點擊返回首頁,可以重新回到首頁
4 實驗階段二:完善留言板功能 4.1 ./index.php 首頁功能完善
讓原本的首頁增加留言相關功能,包括顯示留言及新增留言。
代碼:
<?php include "./inc/dblink.inc.php"http://將數據庫連接的文件包含到此文件中 ?> <html> <head> <meta charset="utf-8"> <title> 首頁----今日論壇</title> </head> <body> <h1>今日論壇BBS</h1> <?php if(isset($_COOKIE['name'])){ echo "歡迎來到今日論壇BBS,".$_COOKIE['name']."<br/>"; echo "<a href='./member/index.php'>個人中心</a> "; echo "<a href='./member/logout.php'>注銷</a> "; }else{ echo " <a href='./member/register.php'>注冊</a> "; echo "<a href='./member/login.php'>登錄</a> "; } echo "<a href='./addMessage.php'>我要留言</a>"; ?> <hr/> <h3>留言板</h3> <?php $sql="select * from messages"; if($results=mysqli_query($link,$sql)){ if(mysqli_num_rows($results)>0){ echo "<table border=2>"; echo "<tr><td>ID</td><td>AUTHOR</td><td>TITLE</td></tr>"; while($result=mysqli_fetch_assoc($results)){ echo "<tr><td>{$result['id']}</td><td>{$result['uname']}</td> <td><a href='showmessage.php?id={$result['id']}' target='_blank'>{$result['title']}</a></td></tr>"; } echo "</table>"; }else{ echo "暫無留言內容"; } }else{ echo mysqli_error($link); } ?> </body> </html> <?php mysqli_close($link); ?>
4.2 顯示留言內容頁面./showmessage.php
用讀者點擊首頁留言標題時,跳轉到此頁面,用于展示該留言內容。
代碼:
<?php include "./inc/dblink.inc.php"http://將數據庫連接的文件包含到此文件中 ?> <html> <head> <meta charset = "utf-8"> <title>留言論壇</title> </head> <body> <h1>留言內容</h1><a href = './index.php'>返回首頁</a><hr /> <?php if(isset($_GET['id'])){ $id=$_GET['id']; $sql="select * from messages where id=".$id; if($results=mysqli_query($link,$sql)){ $result=mysqli_fetch_assoc($results); echo $result['uname'].":".$result['title']."<hr/>"; echo $result['content']; }else{ echo mysqli_error($link); } }else{ echo "id error"; } ?> </body> </html> <?php mysqli_close($link); ?>
4.3 新增留言頁面./addMessage.php
作用:用于已登錄的用戶新增留言。
代碼:
<?php include "./inc/dblink.inc.php"http://將數據庫連接的文件包含到此文件中 ?> <html> <head> <meta charset = "utf-8"> <title>留言論壇</title> </head> <body> <?php if(isset($_COOKIE['name'])){ $html=<<<HTML <form method="post"> 標題:<input type="text" name="userTitle"><br/> 留言內容:<br/> <textarea name="userContent"></textarea> <input type="submit" name="userSubmit" value="提交"> </form> HTML; echo $html."<br>"; if(isset($_POST['userSubmit']) && isset($_POST['userTitle'])){ $userName=$_COOKIE['name']; $title=mysqli_real_escape_string($link,$_POST['userTitle']) ;//將提交的文本進行轉義 $content=mysqli_real_escape_string($link,$_POST['userContent']); $sql="INSERT INTO `messages`( `uname`, `title`, `content`) VALUES ('".$userName."','".$title."','".$content."')"; if($results=mysqli_query($link,$sql)){ echo "留言成功,<a href='./index.php'>返回首頁</a>"; }else{ echo mysqli_error($link); } }else{ echo "請?zhí)峤?; } }else{ echo "您還未登錄,<a href='./member/login.php'>請登錄</a>"; } ?> </body> </html> <?php mysqli_close($link); ?>
4.4 測試
(1)瀏覽器打開網站首頁,首頁內容如下:
(2)點擊”我要留言“,彈出如下提示
(3)點擊請登錄,輸入賬號a,密碼1,并輸入驗證碼,點擊提交。
(4)登錄后點擊返回首頁,并點擊“我要留言”。此時可以輸入留言。
(5)輸入自己的留言并點擊提交。
(6)可以看到留言成功,點擊返回首頁。
(7)在首頁可以看到剛剛新增的留言列表。
(8)點擊剛剛新增的這個留言標題,查看留言內容。
到此這篇關于SQL+HTML+PHP 一個簡單論壇網站的綜合開發(fā)案例(注冊、登錄、注銷、修改信息、留言等)的文章就介紹到這了,更多相關論壇網站的綜合開發(fā)案例內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
ThinkPHP5.0框架使用build 自動生成模塊操作示例
這篇文章主要介紹了ThinkPHP5.0框架使用build 自動生成模塊操作,結合實例形式分析了thinkPHP5使用build自動生成模塊的具體步驟、方法與相關操作注意事項,需要的朋友可以參考下2019-04-04