&nbs美西p; 1、用文本操作實現支持頭像上傳的用戶司要注冊與登陸
設計一簡單的身日用戶注冊和登陸界面(miàn),將(jiān木做g)用戶注冊信息記入文本文件,并實現用戶登銀老陸與上傳個人照片的功能(néng)。
一畫知、案例分析
仔細分析本案例,實際上請微就(jiù)是文件操作和文件上傳的綜合應用,具體制作步書大驟如下。
 老靜;1)設計一簡單的用戶注冊界面(miàn),務國含有上傳頭像的表單項。
2)新建一接收用戶站照注冊信息的文件,本文件所要完成(但科chéng)的主要功能(néng)爲有:接收注冊的用戶名、登陸口令和頭像物妹文件,實現頭像(圖片)的上傳,把用戶名、登陸口令和上傳後(hòu)的頭像文件師林信息記錄到一個文本文件中。
3)懂作設計一簡單的用戶登陸界面(miàn)(將(jiāng)用戶注冊的界面(mià子弟n)稍加修改即可)。
 又不; 4)新建一接收用戶登陸信息的文件,本文件所要完成(chéng)筆我的主要功能(néng)有:接受登陸用戶的用討個戶名和登陸口令,從記錄注冊信息的文本文件中讀出注冊用戶信息,檢查接受子微的登陸用戶名是否存在以及登陸口令是否正确,兒我若正确輸出登陸成(chéng)功信息和頭像圖片,否則輸出高內錯誤信息。
&nbs見很p; 二、實施步驟
通過(guò)對(duì)本案例的具體分析,就一哥(jiù)可以依次編寫下面(miàn)的文我樂件和代碼。
1)先制作一用戶注冊界面(miàn)文件login.html,具體代碼如下。
1: <!--文件login.html:用戶注冊-->
2: <html>
3: <head>
4: <title>用戶注冊</title>
5: </head>
6: <body>
7: <form encty現朋pe="multipart/f頻綠orm-data" name="小靜form1" method="post"新報 action=
&n小紙bsp;  刀會; &nbs呢人p; "login_action雜用.php">
8: <table森中 width="329" heig拍窗ht="150" bo生玩rder="0&quo窗做t; cellpadding=
 能我; 計樹 "0" cellspacing="雪相1" bgcolor="#0000FF&舞讀quot;>
9: <tr紙站>
10: &nbs信這p; <td colspan=&qu風會ot;2" bgcolor="#FF遠拍FFFF">用 戶 注 冊</td>
11: </tr>
12: <tr>
13:  民農; <td width="82&quo微資t; bgcolor="#FFFFFF&物多quot;>用戶名:</td>
14: &n電習bsp; <td width="244"裡理 bgcolor="#FFFFFF"&g秒習t;
15: &nbs厭我p; &nbs區城p; <input type="te物村xt" name="user_n吃白ame" size=慢科"16"> 雪要 </td>
16: 筆兒 </tr>
17: 影不 <tr>
18: 森音 <td bgcolor=&q山花uot;#FFFFFF&quo算她t;>登陸口令:</td>
19: 個藍 <td bgcolor="#FFFFFF&qu海要ot;><input type=&兒機quot;password" nam兵如e=
"user_pw1" size=&quo線內t;16"></td>對舞;
20: </tr>少話;
21: <tr>
22: &媽微nbsp; <下算;td bgcolor="討綠;#FFFFFF">西什登陸口令:</td>
23: <醫店td bgcolor="#FFFFFF錢紅"><input type="p們木assword" name=
"user_pw2" size="16"><微了;/td>
24: &n在國bsp; </tr>
25: <快遠tr>
26:  志店; <td bg窗黑color="#FFFFFF">頭像:</td>
27: 們水<td bgcolor="#FFFFFF司日"><in可資put type="file" name=
"pic_name"土讀></td>
28: <志要;/tr>
29: <tr>
30: &n我家bsp; <td colsp山是an="2" bgcolor=&quo科光t;#FFFFFF">
31: <朋農input type="su的長bmit" name="Submit" 了光value="注冊">
32: &n水數bsp; &nb小子sp; <input type="門火;reset" name="Submit2&quo南還t; value="重置"></td>
33: 音兵 </tr>
34: </table>
35: </form>
36: </body&g我資t;
37: </html>
這(zhè)是一個靜态的HTML頁面金樂(miàn),其運行效果也非常簡單,如圖6-29所示上為。
圖6-29
2)再編寫一接收用戶注冊信息,并使用文本寫入的方法記錄注冊信息的文件login_ action.php,其具體代碼如下。
1: <!--文件login_action.php:用戶注冊-->
2: <html>
3: <hea喝下d>
4: <title>用戶注冊</title>
5: </head>
6: <body>
7: <?php月她
8: &nbs林照p; //接收标單數據
9: $user拍習_name=$_POST[&quo的你t;user_name"];
10:  從飛; $user_pw1=$_PO西空ST["user_pw1&亮長quot;];
11: $user_p下請w2=$_POST["user_pw2"];
12: 老喝 &nb跳水sp; //表單數據基本性驗證,省略用戶名重名驗證
13: if ($user_na藍腦me=="" or $user_算東pw1=="" or河樂 $user_pw2=="&土很quot; or $_FILES ['pic_name'慢報;]['name']==山身""){
14: echo 舞文"用戶名、兩(liǎng)次輸入的登陸口令和頭像全不能(néng)爲空,說要請<a href=login.html>返回</a>重新填寫";
15: &nbs睡員p; exit;
16: }
17:  體跳; if ($user水妹_pw1!=$user_pw2){
18: echo"您兩(liǎng)次輸入的登陸口令不匹配,請<a href=login.html>返回</a>重新填寫";
19: &n喝朋bsp; 靜靜}
20: &nb開什sp;  拿離;  那呢; //生成(chéng)自動文件名
21: &n近雜bsp; &nb些答sp;$rand1=rand(0,9);
22: 到看 &關我nbsp; $rand2=你間rand(0,9);
23: &nbs低門p; &nb行樂sp; $rand3=ra見草nd(0,9);
24: 懂分 &n木資bsp; $音報filename=date("Ymdhms").$我林rand1.$rand2.$rand3;
25: &音好nbsp;  暗東;//頭像上傳
26:  大一; &來村nbsp; &n西這bsp; $oldfilename=$_FILES[&西西#39;pic_name']['name'];話匠
27: $filetype = s見和ubstr ($oldfilename, str多男rpos ($oldfilename, "."),海船 strlen ($oldfilename) 技女-strr pos($oldfilename業分,"."));
28:  暗場; &刀有nbsp;if(($filetype!='.gif到村39;) &&($filetype!='.GIF&子水#39;) &&($filetype!= 一年9;.jpg') &&($file type!='.JPG水影9;)){
29:  媽長;  站微; e湖風cho "<s分去cript>alert('文件類型或地址錯誤');</script>";
30:  熱下; ec舊畫ho "<script>location.href=&裡廠#39;login.html';</script&g快靜t;";
31: &nbs光從p; &nb火月sp; exit;
32:  地鐵;  舊電; }
33: &答在nbsp;  從舊; if ($_好我FILES['pic_name']['size輛腦39;]>1000000嗎筆) {
34: &nbs能看p; 很制 echo爸很 "<script>a國問lert('文件太大,不能(néng)上傳');</scrip議購t>";
35: &匠低nbsp; &技坐nbsp; 我們 ech文線o "<scri關南pt>location.href='login.htm舊姐l';</scr學西ipt>";
36: 月弟 的信 exit;
37: &n分錢bsp; &nbs聽會p; &n務民bsp; }
38: &n了腦bsp; 長河 &nb玩爸sp; 照男//取得保存文件的臨時(shí)文件名快門(含路徑)
39: &n哥微bsp; 議城 $filename=$filename.$f如鄉iletype;
40: 光站 慢議$savedir=$filename;
41: &nbs了好p; i光視f(move_uploaded_file ($樹得_FILES['pic_name'懂劇]['tmp_name'], $司有savedir)){
42: &nbs內朋p; $file_name=basename($savedir);&n南近bsp; //取得保存文件的文件名(不含路徑)
43: &nb大自sp; 村樂 }else{
44: &nb裡化sp; 公問 &nbs頻大p; 我美echo "<script lang購讀uage=javascript>";
45: &nb做訊sp;  月的;  錯城; echo "aler熱大t('錯誤,無法將(jiāng)附件寫入服務器!本次發(fā)布失敗!');";
46: &n微哥bsp; &n月吧bsp; &nb日坐sp; echo "location北我.href='login.家是html';"山科;;
47: 地票 &nb去高sp; &n信短bsp; echo &qu暗麗ot;</script>";
48: 畫要 &n著大bsp; 子明 exit在媽;
49: &nbs房從p; &n刀紙bsp; } &nb數現sp;
50: //記錄注冊信息到user_info.txt文件中
51:  費飛; $file=fopen(&自公quot;user_info.t筆日xt","a");&nbs短草p;
52: 南我 flock($file,LOCK_EX);
53: &nb車物sp; $string=為問$user_name." ";
54:  唱短; fputs($file,$string);
55: 購微 $string=$user_pw1." &家雨quot;;
56: &nbs機著p; fputs($file,$光影string);
57: $s森西tring=$filename." ";
58: fputs去都($file,$string);
59: &n門讀bsp; fputs($機和file," ");
60: 白長 echo "恭喜您,注冊成(chéng)功!<br>";
61: echo &q為影uot;用戶名:".$user_na土輛me."<br>";
62: 信用 echo "登陸口令:".$user_pw1."<br>&qu綠水ot;;
63: ec黑員ho "頭像:<img src=".$filename."&g嗎日t;<br>";
64: echo &qu近章ot;請<a href=land.html>登陸</a>";
65: &n用街bsp; ?>
66: </body>
67: </html>
分析上面(miàn)的代碼,不難發(fā)現本代碼飛習由兩(liǎng)個難點,其一就(jiù)是文件的上傳(20~49行),其二就(jiù)是向(xiàng)一文本文件中追加記錄用戶拿街注冊信息,并在記錄每條信息後(hòu)換行(51~59行)。當用戶全部且正确填寫注冊信息後(h們務òu),其運行效果如圖6-30所示。
圖6-30
3)還(hái)需要建立一個用戶登年跳陸表單“land.html”,也就(jiù)是南劇單擊圖6-30中的“登陸”鏈接所湖器調轉到的頁面(miàn),其具體代碼如下。
1: <!--文件land.html:用戶登陸-->
2: <html>
3: <head>民一;
4: <title>用戶登陸</title>
5: </head>
6:
7: <body>
8: <form name="form1"離科; method="post" action=&qu錯新ot;land_action.php">
9: <table width="297&quo男視t; height="105" border="說媽;0"cellpadding = "0&q對報uot; cells pacin吧朋g="1" bgcolor=&qu藍醫ot;#0000FF">
10: <t子物r>
11: 家關<td colspan=&不鐘quot;2" bgcolor="#FF街南FFFF">用戶登陸</td>
12: &子下nbsp; </tr>
13: 了到 <tr>
14: 對筆 <td wi請地dth="85" bgcolor="#F土短FFFFF">用戶名:</td>
15:  數現; <td width="紅她209" bgcolor="#FFFFFF"&g鐵船t;
16: &n低民bsp; &nbs如南p; <input type="城術text" name="use議微r_name" size="船話;16"> 看雜</td>
17: &放民lt;/tr>
18: <tr>站花
19: &廠內lt;td bgcolor="#FFFFFF">登陸口令:</td>
20: 民南 <td bgc理校olor="#FFFFFF"&g睡但t;<input type="password"舊小 name= "user_pw" size=&熱報quot;16"></亮中td>
21: </tr>
22: &老學nbsp; <tr>
23: &nb分煙sp; <td colspan="2家去" bgcolor="#FFFF少風FF">
24: &nbs讀票p; <input type="submit銀區" name="Submit"刀器 value="登陸"> &a北匠mp;nbsp;
25: 山頻 &nb紅嗎sp; <input type="r書金eset" name="Submit2&qu國制ot; value="重置"></td>
26: <文森;/tr>
27: </tabl一讀e>
28: </form>
29: </body&g鐵學t;
30: </html&g筆有t;
這(zhè)場訊也是一個靜态的HTML頁面(m資用iàn),其運行的效果如圖6-3爸個1所示。
圖6-31
4)建立最後(hòu市上)一個頁面(miàn),也就(jiù)是接收用戶登陸信息,并進(jìn問廠)行判斷用戶名和密碼是否正确,輸出相應信息或頭像的頁科得面(miàn)。其基本思路和具體的實施步驟是:
 來家;①接受登陸用戶的用戶名和登陸口令,并做相應的處理(妹自連接上換行符)。
&nb鐵員sp;②初始化登陸是否成(chéng)功标志位。
③打窗媽開(kāi)文本文件并鎖定,指針定位于第一行。
農人④如果③成(chéng)功,判斷是否說線爲文件尾,若不爲文件尾,循環執行⑤~⑦步。
⑤讀出紙紙指針所指行的數據,同時(shí)文件指針下移,判斷是否爲弟呢登陸的用戶名。
購事 ⑥若⑤正确,讀出指針所指行照資的數據,判斷是否爲登陸口令,同時(shí)文件腦離指針下移。
&nb近看sp; ⑦若⑥正确,輸出登陸正确信息和用戶日影頭像,并跳出循環。
&nbs都兵p;⑧判斷登陸标志位,如果爲初始值,輸出登陸錯誤信息。
章能根據具體的實施步驟,可以編寫出如下代碼。
1: <!--文件login_action.php:用戶登陸-->
2: <html>
3: <head>
4: <title>用戶登陸</title>
5: </head> 睡身
6: <body>
7: <?php
8: $user_的答name=$_POST[&quo間老t;user_name"];
9: $user_pw=$_窗河POST["user_p資民w"];
10: $user_nam話地e2=$user_name." ";
11: $user_pw2=$user_pw.&quo廠少t; ";
12: $tag=0; &n妹草bsp; //登陸是否成(chéng)功标志位0-不成(chéng)功;1-成(chéng)功
13: $file=數內@fopen("user_info.txt",&可煙quot;r");
14: if ($file){
15: while (!fe雪河of($file)){ &nb件懂sp; //循環,文件指針下移
16: &生科nbsp; &n紅師bsp; $buffer=fgets($file,4096友要); //取一行文本,同時(shí)文件指針下移
17: &n吧請bsp;  一醫; if ($buffer==$user_name2){林會
18: 少雨 &nbs女國p; &n哥近bsp; $buffer=fgets秒間($file,4096);
19:  東志; &視鄉nbsp; &n購時bsp; if ($buffer==$user_答公pw2){
20: &nbs媽間p; &nbs理東p; &n熱人bsp; echo "您輸入的用戶名密碼正确,登陸成(chéng)功!<br>";
21: &n關年bsp;  些畫; $好理image=fgets($file,4096);
22: &nbs工藍p; &nb窗間sp; &謝關nbsp; echo "懂爸您的頭像:<img src=&quo冷街t;.$image."><請兒br>";
23: &如師nbsp; &nbs時做p;  科紅; $tag=1;
24: &n煙北bsp; &nbs吃歌p; &唱男nbsp; &nbs訊員p; break;
25: &nb友都sp; &nbs去熱p; }
26: &n放村bsp; }計微 &事暗nbsp;
27: }
28: &nb農話sp; if ($會子tag==0){
29: &n高森bsp; &nb城員sp; echo "您輸入的用戶名和密碼不正确,請<a href=land.html>返回</a>重新輸入";
30:  校很; }
31:  術嗎; fclose($file);
32: }
33: ?>
34: </body>
35: </html>
不難發(fā)現,本程序得以實現的難自舊點是對(duì)文本文件的逐行讀取。當用戶正确填寫用戶登陸讀人信息後(hòu),運行效果如圖6-32所示。
圖6-32