PHP——個人資訊管理系統
阿新 • • 發佈:2019-01-31
樓主近來無事,做了一個個人資訊管理系統,希望能給小白一點啟發,大神不要吐槽,歡迎技術交流,文明批評。鞋鞋!
先貼上資料庫結構圖
表單中有id,使用者名稱,暱稱,性別,密碼,註冊時間,個性簽名,頭像,詳細 共9個欄位。
檔名稱 | 描述 |
reg.inc.php | 註冊頁面 |
login.inc.php | 登入頁面 |
func.inc.php | 系統函式庫存放指令碼,宣告處理上傳和刪除上傳圖片的兩個函式 |
index.php | 主頁檔案,個人資訊首頁 |
info.php | 修改資訊檔案,用於修改個人資訊並更新表單 |
upload.php | 上傳檔案,用於上傳個人頭像 |
image.class.php | 圖片處理函式 |
fileupload.class.php | 檔案上傳函式 |
- 註冊頁面,對使用者名稱和密碼的輸入做了要求,用jquery程式碼實現前臺驗證,用PHP實現後臺驗證,程式碼如下:
<?php /** file:reg.inc.php 使用者註冊*/ date_default_timezone_set('prc');/*設定時區*/ @$username = htmlspecialchars($_POST['username']); @$password = $_POST['pass']; $password = MD5($password); $regdate = date('Y-m-d H:i:s',time()); $pic_dir="default.png"; $url="login.inc.php"; if(isset($_POST['reg'])){ /*新增資料需要先連線並選資料庫,包含conn.inc.php檔案連線資料庫*/ include"conn.inc.php"; $sql_2="SELECT * FROM userdata WHERE username = '$username'"; /*執行INSERT語句*/ $result_2=mysql_query($sql_2,$link); $rows=mysql_fetch_array($result_2); mysql_free_result($result_2); if($rows>0){ echo "<script type='text/javascript'>alert('使用者名稱已存在');location='javascript:history.back()';</script>"; }else{ /*根據使用者通過POST提交的資料組合插入資料庫的SQL語句*/ if(strlen($username)>=5&&strlen($pass)>=6){ $sql = "INSERT INTO userdata(username,pass,regdate,pic) VALUES('".$username."','".$password."','".$regdate."','".$pic_dir."')"; $result=mysql_query($sql,$link); echo "<script> alert('使用者註冊成功!'); </script>"; echo "<meta http-equiv='Refresh' content='0;URL=$url'>"; } } } ?> <html> <head> <title>登入系統</title> <meta charset="utf-8" /> <link rel="stylesheet" href="css/login.css" /> <script src="js/jquery-3.1.0.js"></script> <script src="js/check.js"></script> </head> <body> <div class="content"> <!-- 登入面板 --> <div class="panel"> <form action="reg.inc.php" method="post"> <div class="group"> <label for="username">使用者名稱:</label> <input id="username" class="required" type="text" name="username" placeholder="請輸入至少5位的使用者名稱" /> </div> <div class="group"> <label for="pass">密碼:</label> <input id="pass" type="password" class="required" name="pass" placeholder="密碼必須大於6位"/> </div> <div class="login"> <button type="submit" name="reg" id="send">確認註冊</button> </div> </div> <div class="register"> <a href="login.inc.php"><button type="button">返回首頁</button></a> </div> </form> </div> </body> </html>
- 登入頁面,後臺驗證使用者名稱和密碼是否匹配,匹配則用COOKIE記錄登入狀態及使用者資訊,然後跳轉至主頁面,程式碼如下:
<?php /** file:login.inc.php 登入系統的主控制檔案和主入口檔案*/ /*宣告一個刪除Cookie的函式,呼叫時消除在客戶端設定的所以Cookie*/ function clearCookies(){ //只指定Cookie識別名稱一個引數,即刪除客戶端中這個指定名稱的Cookie資料 //生存空間預設為空,則生存期限與瀏覽器一樣,瀏覽器關閉時Cookie就會被刪除 setcookie('username'); setcookie('isLogin'); } include "conn.inc.php"; @$username = htmlspecialchars($_POST['username']); @$password = $_POST['pass']; $password = MD5($password); /*如果使用者的操作是提交表單,則條件成立*/ if(isset($_POST['submit'])){ clearCookies(); $sql = "SELECT * FROM userdata WHERE username = '$username' and pass='$password'"; $res = mysql_query($sql,$link); /*mysql_num_rows只能用於select語句*/ $rows=mysql_num_rows($res); if($rows>0){ /*向Cookie中設定識別符號為username,值是表單中提交的,期限為一週*/ setcookie('username',$username,time()+60*60*24*7); /*向Cookie中設定識別符號為isLogin,用來在其它頁面檢查使用者是否登入*/ setcookie('isLogin','1',time()+60*60*24*7); /*如果Cookie設定成功則轉向網站首頁*/ header("Location:index.php");//跳轉頁面,注意路徑 }else{ echo '<font color="red">使用者名稱或密碼錯誤!</font>'; } }else if(@$_GET["action"]=="logout"){ //退出時消除在客戶端設定的所有Cookie clearCookies(); } ?> <html> <head> <title>登入系統</title> <meta charset="utf-8" /> <link rel="stylesheet" href="css/login.css" /> </head> <body> <div class="content"> <!-- 登入面板 --> <div class="panel"> <form action="login.inc.php" method="post"> <div class="group"> <label for="username">使用者名稱:</label> <input id="username" type="text" name="username" placeholder="請輸入賬號" /> </div> <div class="group"> <label for="pass">密碼:</label> <input id="pass" type="password" name="pass" placeholder="請輸入密碼" /> </div> <div class="login"> <button type="submit" name="submit">登入</button> </div> </div> <div class="register"> <a href="reg.inc.php"><button type="button">建立新賬號</button></a> </div> </form> </div> </body> </html>
- 主頁面,顯示使用者頭像及暱稱、性別、個性簽名等資訊,程式碼如下:
<?php /** file:index.php 登入系統的首頁*/ /*如果使用者沒有通過身份驗證,頁面跳轉至登入頁面*/ if(!(isset($_COOKIE['isLogin'])&&$_COOKIE['isLogin']=='1')){ header("Location:login.inc.php"); exit; } $username=$_COOKIE['username']; include "conn.inc.php"; /*分別從資料庫中獲取nickname,sex,pic的值*/ $sql_1 = "SELECT pic FROM userdata WHERE username = '$username'"; $res_1 = mysql_query($sql_1,$link); $pic = mysql_result($res_1,0); $sql_2 = "SELECT nickname FROM userdata WHERE username = '$username'"; $res_2 = mysql_query($sql_2,$link); $nickname = mysql_result($res_2,0); $sql_3 = "SELECT sex FROM userdata WHERE username = '$username'"; $res_3 = mysql_query($sql_3,$link); $sex = mysql_result($res_3,0); if($sex==1) { $sex="男"; }else if($sex==2) { $sex="女"; }else if($sex==0) { $sex=="保密"; } $sql_4 = "SELECT message FROM userdata WHERE username = '$username'"; $res_4 = mysql_query($sql_4,$link); $mess = mysql_result($res_4,0); ?> <html> <head> <title>我的資料</title> <link rel="stylesheet" href="css/login.css" media="screen" /> <script src="js/jquery-3.1.0.js"></script> <script src="js/show_time.js"></script> </head> <body> <div class="content"> <div class="person"> <div class="showPic"> <a href="upload.php"><img src="upload/<?php echo $pic ?>" height="80px" width="80px" /></a> </div> <?php /*從Cookie中獲取使用者名稱name*/ echo $_COOKIE['username'].'的空間'; ?> <div id="clock"></div> </div> </div> <div class="content"> <!-- 登入面板 --> <div class="panel"> <form action="index.php" method="post" id="regForm"> <div class="group"> <label for="nickname">暱稱:</label> <input type="text" name="nick" placeholder="<?php echo $nickname ?>" disabled=""/> </div> <div class="group"> <label for="sex">性別:</label> <input type="text" name="sex" placeholder="<?php echo $sex ?>" disabled=""/> </div> <div class="group"> <label for="mess">個性簽名:</label> <textarea name="mess" rows="4" cols="30" readonly=""><?php echo $mess ?></textarea> </div> <div class="login"> <a href="info.php"><button type="button">修改資料</button></a> </div> </div> <div class="register"> <a href="login.inc.php?action=logout"><button type="button">退出</button></a> </div> </form> </div> </body> </html>
- 資訊修改頁面,修改個人資訊,更新表單資料,程式碼如下:
<?php /** file:info.php 修改個人資訊*/ /*如果使用者沒有通過身份驗證,頁面跳轉至登入頁面*/ if(!(isset($_COOKIE['isLogin'])&&$_COOKIE['isLogin']=='1')){ header("Location:login.inc.php"); exit; } $username=$_COOKIE['username']; $url="index.php"; include "conn.inc.php"; $sql = "SELECT pic FROM userdata WHERE username = '$username'"; $res = mysql_query($sql,$link); $pic = mysql_result($res,0); $sql_2 = "SELECT nickname FROM userdata WHERE username = '$username'"; $res_2 = mysql_query($sql_2,$link); $show_nickname = mysql_result($res_2,0); $sql_3 = "SELECT sex FROM userdata WHERE username = '$username'"; $res_3 = mysql_query($sql_3,$link); $show_sex = mysql_result($res_3,0); $sql_4 = "SELECT message FROM userdata WHERE username = '$username'"; $res_4 = mysql_query($sql_4,$link); $show_mess = mysql_result($res_4,0); @$nickname = htmlspecialchars($_POST['nickname']); @$sex = $_POST['sex']; @$mess = $_POST['mess']; ?> <html> <head> <title>我的資料</title> <link rel="stylesheet" href="css/login.css" media="screen" /> <script src="js/jquery-3.1.0.js"></script> </head> <body> <div class="content"> <div class="person"> <div class="showPic"> <a href="upload.php"><img src="upload/<?php echo $pic ?>" height="100px" width="100px" /></a> </div> <?php /*從cookie中獲取使用者名稱username*/ echo $_COOKIE['username'].'的資料'; ?> <div id="clock"></div> </div> </div> <div class="content"> <!-- 登入面板 --> <div class="panel"> <form action="info.php" method="post" id="regForm"> <div class="group"> <label for="nickname">暱稱:</label> <input type="text" name="nickname" value="<?php echo $show_nickname ?>" /> </div> <div class="group"> <label for="sex" class="sex">性別:</label> <div class="sex"> <input id="sex" type="radio" name="sex" value="1" />男 <input id="sex" type="radio" name="sex" value="2"/>女 <input id="sex" type="radio" name="sex" value="0" checked/>保密 </div> </div> <div class="group"> <label for="mess">個性簽名:</label> <textarea name="mess" rows="4" cols="30"><?php echo $show_mess ?></textarea> </div> <div class="login"> <button type="submit" name="mod">確認修改</button> </div> </div> <div class="register"> <button type="reset">重置</button> <a href="index.php"><button type="button">返回</button></a> </div> </form> </div> <?php if(isset($_POST['mod'])){ include"conn.inc.php"; /*根據使用者通過POST提交的資料組合插入資料庫的SQL語句*/ $sql_1 = "UPDATE userdata SET nickname='".$nickname."' WHERE username = '$username'"; $sql_2 = "UPDATE userdata SET sex='".$sex."' WHERE username = '$username'"; $sql_3 = "UPDATE userdata SET message='".$mess."' WHERE username = '$username'"; $result_1=mysql_query($sql_1,$link); $result_2=mysql_query($sql_2,$link); $result_3=mysql_query($sql_3,$link); /*如果INSERT語句執行成功,並對資料表userdata有行數影響,則插入成功*/ if($result_1||$result_2||$result_3){ echo "<script> alert('修改成功!'); </script>"; echo "<meta http-equiv='Refresh' content='0;URL=$url'>"; }else{ echo "<script> alert('修改失敗!'); </script>"; } }?> </body> </html>
- 頭像上傳頁面,上傳個人頭像,本地儲存頭像,資料庫儲存頭像地址,程式碼如下:
<?php /*如果使用者沒有通過身份驗證,頁面跳轉至登入頁面*/ if(!(isset($_COOKIE['isLogin'])&&$_COOKIE['isLogin']=='1')){ header("Location:login.inc.php"); exit; } include "func.inc.php"; include "conn.inc.php"; $username=$_COOKIE['username']; $sql = "SELECT pic FROM userdata WHERE username = '$username'"; $res = mysql_query($sql,$link); $pic = mysql_result($res,0); if(@$_GET['action']=="update"){ /*如果使用者需要修改圖片,用新上傳的圖片替換原來的圖片*/ if($_FILES["pic"]["error"]=="0"){ /* $_FILES['myFile']['error'] 該檔案上傳相關的錯誤程式碼。['error'] 是在 PHP 4.2.0 版本中增加的。下面是它的說明:(它們在PHP3.0以後成了常量) UPLOAD_ERR_OK 值:0; 沒有錯誤發生,檔案上傳成功。 UPLOAD_ERR_INI_SIZE 值:1; 上傳的檔案超過了 php.ini 中 upload_max_filesize 選項限制的值。 UPLOAD_ERR_FORM_SIZE 值:2; 上傳檔案的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值。 UPLOAD_ERR_PARTIAL 值:3; 檔案只有部分被上傳。 UPLOAD_ERR_NO_FILE 值:4; 沒有檔案被上傳。 值:5; 上傳檔案大小為0. */ $up=upload(); /*如果有新上傳的圖片,就使用上傳圖片名修改資料庫*/ if($up[0]) $pic=$up[1]; else die($up[1]); }else{ /**如果沒有上傳圖片,還是使用原來的圖片*/ @$pic=$_POST["picname"]; } include "conn.inc.php"; $sql_1="UPDATE userdata SET pic='{$pic}' WHERE username = '$username'"; /*執行update語句*/ $result=mysql_query($sql_1); /*如果語句執行成功,並對記錄行有所影響,則表示修改成功*/ if($result&& mysql_affected_rows()>0){ /*修改新圖片成功後,將原來的圖片要刪除掉,以免佔用磁碟空間*/ if($up[0]) @delpic($_POST["pic"]); echo "<script> alert('頭像上傳成功!'); </script>"; }else{ echo "<script> alert('頭像上傳失敗!'); </script>"; } } ?> <html> <head> <title></title> <link rel="stylesheet" href="css/login.css" media="screen" /> </head> <body> <div class="content"> <form enctype="multipart/form-data" action="upload.php?action=update" method="post"> <div class="person"> <div class="showPic"> <img src="upload/<?php echo @$pic ?>" height="150px" width="150px" /> </div> <div class="box"> <input type="text" disabled="" class="i-text" value="<?php echo @$pic?>" /> <div class="btnbox"> <input type="file" name="pic" value="<?php echo @$pic?>" /><br /> </div> <button type="submit" name="add" class="up">上傳</button> <a href="index.php"><button type="button" class="back">返回主頁</button></a> </div> </div> </form> </div> </body>
- 函式庫檔案
<?php /*file:func.inc.php 函式庫檔案*/ include "fileupload.class.php"; include "image.class.php"; /*宣告一個函式upload()處理圖片上傳*/ function upload(){ $path="./upload/";//設定圖片上傳路徑 $up=new FileUpload($path);//建立檔案上傳類物件 if($up->upload('pic')){//上傳圖片 $filename=$up->getFileName();//獲取上傳後的圖片名 $img=new Image($path);//建立影象處理類物件 $img -> thumb($filename,300,300,"");//將上傳的圖片都縮放至300x300以內 $img -> thumb($filename,80,80,"icon_");//縮放一個80x80的圖示,使用icon_作字首 return array(true,$filename); //如果成功,返回成功狀態和圖片名稱 }else{ return array(false,$up->getErrorMsg());//如果失敗,返回失敗狀態和錯誤訊息 } } function delpic($picname){ $path="./upload/"; @unlink($path,$picname);//刪除原圖 @unlink($path.'icon_'.$picname);//刪除圖示 } ?>
- 頭像上傳
見我的程式碼片:image.class.php - 檔案上傳
見我的程式碼片:fileupload.class.php