登錄功能(三)
之前的準備工作及登錄的前端頁面都做好了,現在我們來介紹登錄的功能代碼。
首先創(chuàng)建一個login.php的文件,用來寫我們的登錄php代碼,
第一步就是要先連接數據庫,不然獲取不到數據庫里的信息,代碼如下:
<?php $link = mysqli_connect("localhost","root","root","joke");//注意后面的這幾個參數,服務器名,數據庫的用戶名,密碼,數據庫名。密碼沒有可以不填 if (!$link) { die("連接失敗: " . mysqli_connect_error()); } ?>
第二步:不管是用戶名也好還是密碼也好,我們都是通過前臺的表單傳遞值到php程序中,然后再進行驗證,所以,我們接下來就是要首先獲取前臺表單傳遞過來的值是多少,才能去驗證它的對和錯,獲取值的代碼如下:
<?php $username = $_POST['username']; $password = $_POST['password']; ?>
我們?yōu)槭裁词莗ost而不是get呢?這就需要看下我們前臺的表單了,看form標簽中的信息:
<form action="login.php" method="post"> ... </form>
action是講信息提交到哪里,method是通過什么方式傳遞,這里我們是post方法
第三步:我們獲取到值之后就需要去驗證這個值和數據庫中的是不是一樣的,必須都相同才可以登錄,驗證代碼如下:
<?php $sql="select * from login where username = '{$username}' and password = '{$password}'";//先從數據庫中查詢戶名和密碼 $rs=mysqli_query($link,$sql); //執(zhí)行sql查詢 $row=mysqli_fetch_array($rs);//將查詢的結果放入變量$row中 ?>
第四步:查詢到結果之后,我們就要開始進行驗證了:
<?php if($row) { if ($username == $row['username'] && $password == $row['password']) //判斷表單獲取的用戶名,密碼和數據庫中的是否一致 { echo "登陸成功,正在為你跳轉至后臺頁面"; header("location:index.html");//如果一致會跳轉到后臺的首頁 } }else{ echo "賬號或密碼錯誤" . "<br/>"; echo "<a href='login.html'>返回登陸頁面</a>";//如果不一致,將重新跳轉至登錄頁面重新登錄 } ?>
好像漏了點什么?
...
...
驗證碼好像沒說....
最后我們來說下驗證碼。
我們需要一個生成驗證碼的程序,首先創(chuàng)建個PHP文件,叫passcode.php,用來寫驗證碼生成。
下面我將驗證碼的詳細寫法寫出來,每個重點難點都會有注釋,方便你們去理解,注意,看碼:
<?php //設置開啟session session_start(); $image = imagecreatetruecolor(100, 30); //設置驗證碼圖片大小的函數 //設置驗證碼顏色,用法:imagecolorallocate(int im, int red, int green, int blue); $bgcolor = imagecolorallocate($image,255,255,255); //#ffffff //區(qū)域填充 int imagefill(int im, int x, int y, int col) (x,y) 所在的區(qū)域著色,col 表示欲涂上的顏色 imagefill($image, 0, 0, $bgcolor); //設置變量 $captcha_code = ""; //生成隨機數字 for($i=0;$i<4;$i++){ //設置字體大小 $fontsize = 10; //設置字體顏色,隨機顏色 $fontcolor = imagecolorallocate($image, rand(0,120),rand(0,120), rand(0,120)); //0-120深顏色 //設置數字 $fontcontent = rand(0,9); //10>.=連續(xù)定義變量 $captcha_code .= $fontcontent; //設置坐標 $x = ($i*100/4)+rand(5,10); $y = rand(5,10); imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor); } //存到session $_SESSION['authcode'] = $captcha_code; //增加干擾元素,設置雪花點 for($i=0;$i<200;$i++){ //設置點的顏色,50-200顏色比數字淺,不干擾閱讀 $pointcolor = imagecolorallocate($image,rand(50,200), rand(50,200), rand(50,200)); //imagesetpixel — 畫一個單一像素 imagesetpixel($image, rand(1,99), rand(1,29), $pointcolor); } //增加干擾元素,設置橫線 for($i=0;$i<4;$i++){ //設置線的顏色 $linecolor = imagecolorallocate($image,rand(80,220), rand(80,220),rand(80,220)); //設置線,兩點一線 imageline($image,rand(1,99), rand(1,29),rand(1,99), rand(1,29),$linecolor); } //設置頭部,image/png header('Content-Type: image/png'); //imagepng() 建立png圖形函數 imagepng($image); //imagedestroy() 結束圖形函數 銷毀$image imagedestroy($image); ?>
如果想形象的具體的了解每行代碼的功能,你可以講代碼更改(盡量與之前差異很大,這樣才明顯),然后看其變化,和之前會有什么不一樣,這樣,你就知道這行代碼的作用了。
接下來就是對驗證碼的驗證了,看碼:
<?php //判斷驗證碼是否填寫并且是否正確 if(!$_POST['code']){ //首先判斷前端頁面是否有驗證碼的值傳過來,沒有就提示驗證碼不能為空 echo('驗證碼不能為空'); return; }else if($_POST['code']!=$_SESSION['authcode']){ //如果有,判斷是否正確 echo('驗證碼不正確'); return; } ?>
好了,這就是我們的完整的一個登陸功能。