前端資料可以用前一篇所介紹的方法進行大部份的驗證,但是還有一些必須要靠後端的資料比對才能做到,最直接的方法就是使用AJAX技術,jQuery提供了很簡單的AJAX呼叫函數,用起來也沒有什麼痛苦。繼續前一篇的例子,我希望能夠在使用者輸入完帳號的時候確認這個帳號在系統中還沒有任何人使用,因此在username這個文字盒離開的時候綁上一個處理函數。

$("#username").blur( function() {
    $.ajax( {url: "check_username.php", type: "post",
            cache:false, dataType:"text",
            data: "username="+$("#username").val(),
            success: function(retdata) {
                toggleErr("#err02", (retdata=="") );
            }
        }
    );
});

這個函數的意義是,透過AJAX的機制向check_username.php詢問username是否存在,而check_username.php會檢查資料庫,如果有資料那就傳回這筆資料的userid,因此只要判斷是否有傳回資料就知道username是否存在了。程式同樣透過前面那一篇的toggleErr來顯示錯誤訊息,因此是否能夠提交的程式不用改。check_username.php程式如下:

<?PHP
define('app_root',$_SERVER['DOCUMENT_ROOT']);    //每一頁一定要加,這樣才能正確使用require_once、include
require_once(app_root."/include/ConnMySQL.php");
$userid=DLookup("UserID","User","Username=".QTR($_POST["username"]));
echo $userid;
?>

首先引入的程式是資料庫鏈接程式,程式內容如下,是很標準的資料庫開檔程式,再加上兩個函數,QTR是爲了解決SQL Injection的問題所加的,簡單說就是把傳入的資料內容的單引號變成兩個單引號,並且前後加上單引號,如果是空值,那就傳回字串NULL。另一個是延續Microsoft Access的好用函數,用特定條件取回特定欄位的值。所以上面這個程式也很單純,就是拿到UserId之後,將它輸出到頁面上,就這麼簡單。

<?PHP
$db_host="localhost";
$db_database="hotel";
$db_username="aaaaaaaa";
$db_password="22222222";
if (!@mysql_connect($db_host, $db_username, $db_password))
    die("資料庫伺服器連線失敗");
if (!@mysql_select_db($db_database))
    die("資料庫選擇失敗");
mysql_query("SET NAMES 'utf8'");

function QTR($value) {
    return ($value=="") ? "NULL" : "'".ereg_replace("'","''",$value)."'";
}
function DLookup($field,$table,$criteria) {
    $sql = "select $field from $table where $criteria;";
    $result = mysql_query($sql);
    return mysql_result($result,0,0);
}
?>

使用這樣的手法就可以回應AJAX的查詢了,當然還有複雜資料的處理動作,可以透過XML或JSON的格式將資料傳回去的,這樣的動作以後再聊。做完了檢查接著就是存檔了,存檔的手法也是有兩個,一個是直接讓form傳送給另一頁,這樣的方法沒有什麼特別的,前面這些程式就是這麼做,另一種就是使用AJAX不刷新頁面的方式傳資料給伺服器,其實方法跟上面查UserID也差不了多少,就是要多一個搜集資料並且組合成像GET的查詢字串,下一篇再演示這種方法。

創作者介紹
創作者 漠哥 的頭像
漠哥

人生四十宅開始 二號宅

漠哥 發表在 痞客邦 留言(0) 人氣()