今天,我們把我們上一篇博文中的小項目做一個升級版本!
1、產(chǎn)生彩色的驗證碼
在上一篇文中,我們產(chǎn)生了隨機的驗證碼, 但是我們在有的網(wǎng)站上看到的驗證碼是彩色的,那么,我們怎么來產(chǎn)生彩色的驗證碼呢?
如果要產(chǎn)生彩色的驗證碼,那么就代表在網(wǎng)頁上的表現(xiàn)形式就是1AQ9這種形式了,那么就代表網(wǎng)頁中的源代碼的表現(xiàn)也就只能為<span style=”color:rgb(x,y,z)”>x</span>!原因很簡單,因為四個數(shù)字的顏色是不同的!當然,除了span標記,也可以由其他的標記來代替!如b、i、strong、em等內(nèi)聯(lián)標記!
我們再來討論一個問題:如果有多個頁面都要使用隨機數(shù)的話,每個頁面都寫這么多代碼,這個工作量是可想而知的!那么最好的解決方法就是:首先將其封裝成自定義函數(shù),并且其存儲在某一個文檔內(nèi),然后,我們想調(diào)用該函數(shù)的話,我們只需要調(diào)用該文件就可以了(還記得包含文件嗎?)!
好了,可以工作了!
function random()
{
$chars = "0123456789";
for($i=0;$i<4;$i++)
{
$char = substr($chars,rand(0,strlen($chars)-1),1);
$randChar .= "<span style=\"color:rgb(".rand(50,180).",".rand(50,180).",".rand(50,180).")\">" . $char . "</span>";
}
return $randChar;
}
現(xiàn)在我們再將上面的函數(shù)來升一級,那就是:我們已經(jīng)將隨機數(shù)的長度固定了,最好的方法是我們將系統(tǒng)的配置存儲在一個配置文件里,由用戶來決定隨機數(shù)的長度!
好了,我們來創(chuàng)建一個配置文件----www.yx67.com/config.include.php
$config[“random”][“l(fā)ength”] = 4;
那么現(xiàn)在的問題就是如何將$config[“random”][“l(fā)ength”]的變量引入到函數(shù)內(nèi)部,那就需要在函數(shù)內(nèi)部添加global關(guān)鍵詞了!
那么函數(shù)就變成了
function random()
{
global $config;
$chars = "0123456789";
for($i=0;$i<$config["random"]["length"];$i++)
{
$char = substr($chars,rand(0,strlen($chars)-1),1);
$randChar .= "<span style=\"color:rgb(".rand(50,180).",".rand(50,180).",".rand(50,180).")\">" . $char . "</span>";
}
return $randChar;
}
當然,RGB顏色理論上的范圍為0至255,但是我們一般的取值范圍為50-180之間!
運行后的效果如下:
另外,我們發(fā)現(xiàn)產(chǎn)生的驗證碼中存在相同的數(shù)字,如果我現(xiàn)在不想產(chǎn)生相同的數(shù)字,那該怎么辦呢?當產(chǎn)生一個數(shù)字后,我們就把產(chǎn)生的這個數(shù)字從原字符串中刪除就可以了!
那么函數(shù)就變成了:
function random()
{
global $config;
$chars = "0123456789";
for($i=0;$i<$config["random"]["length"];$i++)
{
$char = substr($chars,rand(0,strlen($chars)-1),1);
$chars = str_replace($char,null,$chars);
$randChar .= "<span style=\"color:rgb(".rand(50,180).",".rand(50,180).",".rand(50,180).")\">" . $char . "</span>";
}
return $randChar;
}
其效果如下:
2.數(shù)據(jù)庫問題
在一個項目中會存在多個頁面都會操作數(shù)據(jù)庫的情況,如果每個頁面都去連接數(shù)據(jù)庫,情況就會變成很繁瑣!根據(jù)隨機數(shù)的經(jīng)驗,我們也將其封裝成自定義函數(shù)!代碼如下:
<?php
function connect()
{
global $config;
$conn = mysql_connect($config["server"]["hostname"],$config["server"]["username"],$config["server"]["password"]);
mysql_select_db($config["server"]["database"]);
return $conn;
}
function query($sql)
{
$result = mysql_query($sql);
return $result;
}
function getRowsNum($result)
{
$rowsNum = mysql_num_rows($result);
return $rowsNum;
}
function getFieldsNum($result)
{
$fieldsNum = mysql_num_fields($result);
return $fieldsNum;
}
function getFieldName($result,$fieldIndex)
{
$fieldName = mysql_field_name($result,$fieldName);
return $fieldName;
}
function getRow($result)
{
$row = mysql_fetch_assoc($result);
return $row;
}
function checkUserLogin($sql)
{
$result = query($sql);
$rowsNum = getRowsNum($result);
$userLogined = $rowsNum ? true : false;
return $userLogined;
}
function freeResult($result)
{
return mysql_free_result($result);
}
function close()
{
return mysql_close();
}
?>
項目的運行結(jié)果如下