廣告聯播

2012年9月29日 星期六

jQuery plugin: Validation 表單驗證

From: Polin Wei

表單驗證往往是網站開發者常所需要撰寫的功能之一, jQuery 的 plugin:validation是一個不錯的工具,撰寫的程式很少,功能卻能符合所需。 首先,先準備一般 HTML 的表單

<form id="userform" name="userform" method="post" class="validateform">
<table width="600" border="0" cellspacing="3" cellpadding="1" class="table">
 <tr>
  <th>欄位名稱</th>
  <th>內容</th>
 </tr>
 <tr>
  <td>姓名 *</td>
  <td><input type="text" name="username" id="username"  required/></td>
 </tr>
 <tr>
  <td>信箱 *</td>
  <td><input type="text" name="useremail" id="useremail" size="35" value="" class="required email"/></td>
 </tr>
 <tr>
  <td height="50">&nbsp;</td>
  <td>
   <input class="submit" type="submit" value="Submit"/>
  </td>
 </tr>
</table>

然後再啟動驗證即可

<script type="text/javascript">   
$().ready(function() {
 //設定驗證
 $("#userform").validate();
});
</script>

但有時為了作一些處理,在 Form 裡我們並沒有<input class="submit" type="submit" value="Submit"/>,如:

<form id="userform" name="userform" method="post" class="validateform">
<table width="600" border="0" cellspacing="3" cellpadding="1" class="table">
 <tr>
  <th>欄位名稱</th>
  <th>內容</th>
 </tr>
 <tr>
  <td>姓名 *</td>
  <td><input type="text" name="username" id="username"  required/></td>
 </tr>
 <tr>
  <td>信箱 *</td>
  <td><input type="text" name="useremail" id="useremail" size="35" value="" class="required email"/></td>
 </tr>
 <tr>
  <td height="50">&nbsp;</td>
  <td>
   <a id="fsubmit" name="fsubmit" class="sexybutton"><span><span><span class="save">儲存</span></span></span></a> 
   <a id="freset"  name="freset"  class="sexybutton"><span><span><span class="reload">重設</span></span></span></a>
  </td>
 </tr>
</table>

這時 jQuery 要改成

<script type="text/javascript">   
$().ready(function() {
 設定驗證
 var frmValidate=$('#userform').validate({
  rules:{
   username: {
    required: true,
    maxlength: 10
   }
  },
  messages:{
   username: {
    required: "請輸入您的中文姓名"
   }
  }
 });
 
 $('#fsubmit').click(function() {
    var chkResult=frmValidate.form();
 });
});
</script>

這樣才能成功

 

進階閱讀: MIS Workplace 資訊空間

2012年9月4日 星期二

PHP 與 Microsoft AD(Active Directory)作認證

From: Polin Wei

Windows Server AD 是一個 LADP 伺服器,可讓您將資訊儲存在目錄服務中,在資料庫中進行查詢,並可以使用他來作為身份的認證授權。

使用PHP撰寫程式難免會遇到需要作身份認證的問題,除了自行撰寫這部份程式的選擇外,PHP 的函式庫中亦提供了標準的 LDAP 函式,如果公司組織中已經有架設 Windows 2K/2003 網域的環境 ,將身份認證的工作交由 Windows AD 亦是一個不錯的選擇。
在寫此程式前,請先到php.ini檔,打開php_ldap.dll的功能(預設是關閉的),否則執行時會出現未定義函數的錯誤訊息。(打開後記得要重啟apache服務,功能才會生效)
ldap.png
PHP可以一筆一筆撈出AD資料(ldap_first_entry / ldap_next_entry),然後將每一筆資料的欄位屬性解析出來(ldap_get_values)。

實作如下:
案例環境說明:
1.公司組織內有一個Windows 網域,名稱為: domain.com。
2.domain.com 的網域有兩部網域主控站(DC)分別為:dc.domain.com、dc2.domain.com。
3.PHP版本:5.2.1 由下載 AppServ 2.5.10 安裝

PHP程式碼範例:

$domain = 'domain.com'; //設定網域名稱
$dn="dc=domain,dc=com";

$user = 'administrator'; //設定欲認證的帳號名稱
$password = 'password'; //設定欲認證的帳號密碼

// 使用 ldap bind 
$ldaprdn = $user . '@' . $domain; 
// ldap rdn or dn 
$ldappass = $password; // 設定密碼

// 連接至網域控制站
$ldapconn = ldap_connect($domain) or die("無法連接至 $domain");

// 如果要特別指定某一部網域主控站(DC)來作認證則上面改寫為
//$ldapconn = ldap_connect('dc.domain.com) or die("無法連接至 dc.domain.com"); 
// 或 
// $ldapconn = ldap_connect('dc2.domain.com)or die("無法連接至 dc2.domain.com"); 

//以下兩行務必加上,否則 Windows AD 無法在不指定 OU 下,作搜尋的動作
ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0);

if ($ldapconn) 
{ 
 // binding to ldap server
 echo("連結$domain 
".$ldaprdn.",".$ldappass."
");
 $ldapbind = ldap_bind($ldapconn, $user, $password);     
 //$ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass);     
 //$ldapbind = ldap_bind($ldapconn);     
 // verify binding     
 if ($ldapbind) 
 {         
  $filter = "(sAMAccountName=$user)";        
  $result = @ldap_search($ldapconn, $dn, $filter);        
  if($result==false) 
   echo "認證失敗(找不到 $user)";        
  else 
  {            
   echo "認證成功...";             
   //取出帳號的所有資訊             
   $entries = ldap_get_entries($ldapconn, $result);
   $data = ldap_get_entries( $ldapconn, $result );
   
   echo $data ["count"] . " entries returned\n";
   
   for($i = 0; $i <= $data ["count"]; $i ++) {
    for($j = 0; $j <= $data [$i] ["count"]; $j ++) {
     echo "[$i:$j]=".$data [$i] [$j] . ": " . $data [$i] [$data [$i] [$j]] [0] . "\n
";
    }
   }        
  }    
 } 
 else 
 {         
  echo "認證失敗...";     
 } 
}
//關閉LDAP連結
ldap_close($ldapconn);


進階閱讀:

PHP 與 Microsoft AD(Active Directory) 認證