1. 程式人生 > >PHP——個人資訊管理系統

PHP——個人資訊管理系統


樓主近來無事,做了一個個人資訊管理系統,希望能給小白一點啟發,大神不要吐槽,歡迎技術交流,文明批評。鞋鞋!

先貼上資料庫結構圖

表單中有id,使用者名稱,暱稱,性別,密碼,註冊時間,個性簽名,頭像,詳細  共9個欄位。

個人資訊管理的檔案結構
檔名稱 描述
reg.inc.php 註冊頁面
login.inc.php 登入頁面
func.inc.php 系統函式庫存放指令碼,宣告處理上傳和刪除上傳圖片的兩個函式
index.php 主頁檔案,個人資訊首頁
info.php 修改資訊檔案,用於修改個人資訊並更新表單
upload.php 上傳檔案,用於上傳個人頭像
image.class.php 圖片處理函式
fileupload.class.php 檔案上傳函式
  1. 註冊頁面,對使用者名稱和密碼的輸入做了要求,用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>

  2. 登入頁面,後臺驗證使用者名稱和密碼是否匹配,匹配則用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>

  3. 主頁面,顯示使用者頭像及暱稱、性別、個性簽名等資訊,程式碼如下:
    <?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>

  4. 資訊修改頁面,修改個人資訊,更新表單資料,程式碼如下:
    <?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>

  5. 頭像上傳頁面,上傳個人頭像,本地儲存頭像,資料庫儲存頭像地址,程式碼如下:
    <?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>
    

  6. 函式庫檔案
    <?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);//刪除圖示
    	}
    ?>
  7. 頭像上傳
    見我的程式碼片:image.class.php
  8. 檔案上傳
    見我的程式碼片:fileupload.class.php