一個網站,其實說白了就是某幾個特定功能的組合,而更換帳戶圖片就在這些功能之中。今天就來做個測試,針對不同的使用者,實現頭像上傳功能。
成品圖
思路
登陸頁面
表單製作
<form role="form" action="./forindex.php"> <p class="form-group"> <label for="name">使用者名稱</label> <input type="text" class="form-control" id="username" name="username" placeholder="請輸入名稱"> </p> <p class="form-group"> <label for="inputfile">檔案輸入</label> <input type="password" id="inputfile" name="password"> <p class="help-block">這裡是塊級協助文本的執行個體。</p> </p> <p class="form-group"> <label>請輸入驗證碼</label> <input type="text" id="checkcode" name="checkcode" /> <img id="imagecheckcode" src="./store.php?r=<?php echo rand();?>" /> <a href="javascript:void(0);" onclick="change()" >看不清</a> </p> <script> function change(){ document.getElementById("imagecheckcode").src = "./store.php?r="+ Math.random(); } </script> <button type="submit" class="btn btn-default">提交</button></form>
驗證碼製作
<?phpsession_start();// 必須在php的最開始部分聲明,來開啟session// 使用gd的imagecreatetruecolor();建立一張背景圖$image = imagecreatetruecolor(100,40);// 產生填充色$bgcolor = imagecolorallocate($image,255,255,255);// 將填充色填充到背景圖上imagefill($image,0,0,$bgcolor);//////// 產生隨機4位字母以及數字混合的驗證碼$checkcode='';for($i=0;$i<4;$i++){ $fontsize = rand(6,8); $fontcolor = imagecolorallocate($image,rand(0,255),rand(0,255),rand(0,255)); // 為了避免使用者難於辨認,去掉了某些有歧義的字母和數字 $rawstr = 'abcdefghjkmnopqrstuvwxyz23456789'; $fontcontent = substr($rawstr,rand(0,strlen($rawstr)),1); // 拼接即將誕生的驗證碼 $checkcode.=$fontcontent; // 避免產生的圖片重疊 $x += 20; $y = rand(10,20); imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor); }// 儲存到session變數中$_SESSION['checkcode']=$checkcode;// 產生一些幹擾的點,這裡是200個for($i=0;$i<200;$i++){ $pointcolor = imagecolorallocate($image,rand(50,255),rand(50,255),rand(50,255)); imagesetpixel($image,rand(0,100),rand(0,30),$pointcolor);}// 產生一些幹擾線 這裡是4個for($i=0;$i<4;$i++){ // 設定為淺色的線,防止喧賓奪主 $linecolor = imagecolorallocate($image,rand(50,255),rand(50,255),rand(50,255)); imageline($image,rand(0,99),rand(0,29),rand(0,99),rand(0,29),$linecolor);}header('content-type:image/png');imagepng($image);// 釋放資源,銷毀執行對象imagedestroy($image);
JavaScript重新整理驗證碼
<a href="javascript:void(0);" onclick="change()" >看不清</a><script> function change(){ document.getElementById("imagecheckcode").src = "./store.php?r="+ Math.random(); }</script>
驗證頁面
由於本次實驗最核心的是對帳戶圖片的更換,所以使用者名稱我們暫且不管,以Root為準。
驗證邏輯
<?php session_start(); header("Content-Type:text/html;charset=utf-8"); $username = $_REQUEST['username']; $password = $_REQUEST['password']; if(strtolower($_REQUEST['checkcode']==$_SESSION['checkcode'])){ if(!is_dir($username)){ mkdir($username); } echo "恭喜您,登陸成功!"."<br />3秒後將自動跳轉到個人首頁!"; $_SESSION['username'] = $username; header("refresh:3;url=./personalpage.php"); }else{ echo "對不起,登陸失敗了!"; header("refresh:3;url=./index.php"); //echo "<script>window.location.href='./index.php'</script>"; }
頁面跳轉
在PHP中,要先實現頁面的跳轉,有很多方式。本文使用了增加header資訊的方式,下面介紹幾個關於頁面跳轉的小執行個體。
header函數
< ?php //重新導向瀏覽器header("Location: http://www.php.cn/"); //確保重新導向後,後續代碼不會被執行 exit;?>
注意:Location和:之間不能有空格
Meta標籤
< meta http-equiv = "refresh" content = "1;url=http://www.php.cn/" >
注意: content可以控制在幾秒之內完成跳轉。
JavaScript
< ?php $ url = "http://bbs.lampbrother.net" ; echo " < script language = 'javascript' type = 'text/javascript' > "; echo " window.location.href = '$url' "; echo " < /script > "; ?>
注意: 使用JavaScript方式,代碼放置的位置可以隨意,只要是符合文法要求即可。
上傳頁面
個人首頁
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " <html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title><?php session_start(); echo $_SESSION['username']."的個人首頁"; ?></title><style> img { width:128px; height:auto; }</style></head><body><p> <img id="userphoto" src="./root/lover.png" /><br /> <form action="./uploadphoto.php" method="post" enctype="multipart/form-data"> <input type="file" name="photo" /> <input type="submit" onclick="uploadphoto()" value="上傳新頭像"/> </form> <script> function uploadphoto(){ document.getElementById("userphoto").src = "./root/<?php echo $_SESSION['username'];?>.png" } window.onload = function(){ uploadphoto(); } </script></p></body></html>
上傳核心
上傳的核心還是一個表單,我們把要進行上傳的圖片上傳到伺服器,然後php使用move_uploaded_file來實現檔案的遷移,實現上傳。
<?php session_start(); header("Content-Type:text/html;charset=utf-8");// 附件的儲存位置、附件的名字$path = "./root/";$username = $_SESSION['username'];// 拼接成該檔案在伺服器上的名稱$server_name = $path.$username.".png";if($_FILES['photo']['error']>0) { die("出錯了!".$_FILES['photo']['error']); }if(move_uploaded_file($_FILES['photo']['tmp_name'],$server_name)){ //echo "<BR>"."Upload Success!"; echo "恭喜您,上傳成功!"."<br />3秒後將自動跳轉到個人首頁!"; header("refresh:3;url=./personalpage.php");}else{ //echo "<BR>"."Upload Failed!".$_FILES['photo']['error']; echo "對不起,上傳頭像失敗了!"; header("refresh:2;url=./index.php");}?>
最終結果
登陸頁面
驗證結果
個人首頁
最新頭像
總結
回顧一下,本次實驗的收穫。
大致的內容就是這麼多,雖然沒有增加美化效果,但是麻雀雖小,五髒也算是俱全了。