一、 產生隨機的驗證碼
二、 在客戶端驗證表單的合法性
三、 提交表單後,驗證用戶的合法性
四、 根據用戶是否合法,返回信息到客戶端
第一步:產生隨機的驗證碼
在PHP中產生隨機驗證碼的方式主要有兩種:字符和圖像(須要GD庫支持);而字符型的驗證碼又具體的分爲數字型和字型符(也就是數字和字母的組合體),在版本1中咱們先來看一下數字的隨機驗證碼!
字符串處理函數中的rand、mt_rand能夠產生在指定範圍內的隨機數,這個正好符合咱們的要求!
因此
$validCode = rand(1000,9999);//也就是說從1000至9999之間產生一個隨機數,固然也可使用mt_rand。
如今產生隨機驗證碼後,應該將其顯示在GUI中,用戶以其爲參照,因此,在「驗證碼」文本框後,將其輸出就能夠了!代碼以下:
<?=$validCode?>
當第一步完成後,效果以下圖
第二步:在客戶端驗證表單的合法性
所謂的在客戶端驗證表單的合法性,其實就是指使用JS來查看錶單中必選項是否填寫、必選項是否選擇、表單中某些元素的數據是否合法(如用戶名中禁止包含特殊符號)等。如今,咱們先簡單的驗證一下,用戶和密碼是否填寫!
function validateLogin()
{
if($(「username」).value == 「」)
{
window.alert(「用戶名必須填寫」);
return false;
}
if($(「password」).value == 「」)
{
window.alert(「密碼必須填寫」);
return false;
}
return true;
}
function $(id)
{
return document.getElementById(id);
}
程序運行的結果以下:
如今的問題就是如何驗證」驗證碼」的合法性,而驗證碼自己又是隨機數!!!???
咱們可不能夠這樣說:上圖中紅圈括起來的部分,必定是正確的驗證碼?答案是確定的,那麼也就是說,咱們只須要判斷用戶所輸入的驗證碼是否與紅圈部分一致,從而就能夠獲取用戶所輸入的驗證碼是否正確了!
如今的問題又出來了,那麼怎麼獲取紅色部分的文本呢?咱們還記得在JS中存在innerHTML和innerText屬性嗎?若是咱們將紅色區域放置在某一個標記內,而且爲該標記添加ID屬性,那麼,咱們就能夠經過document.getElementById(「xxx」).innerText或document.getElementById(「xxx」).innerHTML來獲取其中的文本了(固然這二者之間是存在區別的!),好了,就這麼幹!因此代碼部分應改成
<span id=」showValidCode」><?=$validCode?></span>
那麼JS部分的代碼就變成了:
function validateLogin()
{
if($(「username」).value == 「」)
{
window.alert(「用戶名必須填寫」);
return false;
}
if($(「password」).value == 「」)
{
window.alert(「密碼必須填寫」);
return false;
}
if($(「validCode」).value != $(「showValidCode」).innerText)
{
window.alert(「驗證碼錯誤」);
return false;
}
return true;
}
好了,運行一下,其結果以下:
第三步:提交表單後,驗證用戶的合法性
其實,所謂用戶登陸過程,就是將用戶名和密碼提交至服務器後,在數據庫中查找是否存在此用戶,若是存在,則證實用戶登陸成功,不然,登陸失敗,因此:
1. 咱們須要在服務器上獲取用戶輸入的用戶名和密碼
$username = $_POST[‘username’];
$password = md5($_POST[「password」])
由於,在數據庫裏用戶的密碼使用MD5加密了,因此,當獲取出密碼後,也必須進行加密!
2. 以用戶輸入的用戶名和密碼爲條件,在數據庫進行查詢!
既然在數據庫中查詢,鏈接數據庫服務器就成爲必然了!
$conn = mysql_connect(「localhost」,」root」,」」);
mysql_select_db(「test」);
$sql = 「select * from users where username=’{$username} and password=’{$password}’」;
$result = mysql_query($sql);
如今的問題就是如何判斷用戶是否登陸成功?若是SQL命令成功執行的話(也就是不存在語法錯誤),其返回的數據類型爲資源,也就是其存放告終果的結果集,若是咱們能夠知道結果集中包含的行數(記錄數),由於其結果集中的行數只能是零或非零的數字,若是爲零的話,則證實用戶登陸失敗,不然成功(即便成功,結果集中的行數也只能爲1,緣由…)!因此:
$rowsNum = mysql_num_rows($result);
3. 如今,咱們能夠根據用戶登陸的狀態返回給客戶端信息了,也就是第四步
if($rowsNum)
echo(「用戶登陸成功」);
else
echo(「用戶登陸失敗,單擊這裏<a href=\」login.php\」>從新登陸</a>」);
其運行的結果以下: