1
2
3
4
5
6
7
8
9
10
11

獨立探索

發(fā)布時(shí)間:2017-07-20 08:04 林刀  發(fā)布人:毛書朋&朋電nbsp;  浏很從覽次數:6528

    &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="注冊">&nbsp;&nbsp;

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.jpg

圖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ù)是文件的上傳(2049行),其二就(jiù)是向(xiàng)一文本文件中追加記錄用戶拿街注冊信息,并在記錄每條信息後(hòu)換行(5159行)。當用戶全部且正确填寫注冊信息後(h們務òu),其運行效果如圖6-30所示。

6-30.jpg

圖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="登陸">&nbsp;&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.jpg

圖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.jpg

6-32