2013年7月14日 星期日

使用 PreferenceFragment 快速攻略

快速入門,撰寫一個使用 PreferenceFragment
做出設定的畫面
        
( ↑ 使用 PreferenceFragment 撰寫的畫面,如上圖)



Step1. 建立一個Android專案與Activity (細部省略)


Step2. 建立一個 PreferenceFragment 的 XML 設置檔
  • 在專案下新增一個 Android XML File
  • Resource Type 選擇 Preference
  • Root Element 選擇 PreferenceScreen
  • 輸入 File名稱
  • 完成 (注意該XML檔案是在目錄 res > xml 底下)



Step3. 開始新增元素
  1. 所有元素都要新增在根元素(PreferenceScreen)下
  2. 詳細元素使用請參閱官網



Step4. 在主Activity中呼叫 PreferenceFragment

  1. 首先必須知道 PreferenceFragment 屬於一個 Fragment 的其中一個子類別,如不知Fragment為何,請先閱讀介紹文章
  2. 接下來請為 PreferenceFragment 新增一個 class,目的是為了將 PreferenceFragment的XML檔與 PreferenceFragment 程式連接起來,並呼叫它啟動

    (1) 新增一個class,在superclass 填入 PreferenceFragment,目的是繼承PreferenceFragment類別


    (2) 因為每個 Fragment 都有自己的生命周期,在PreferenceFragment啟動(onCreate)時,應設定PreferenceFragment 的 XML配置檔

    (3) 點選 Source → Override/Implement Methods... → 選擇 PreferenceFragment下onCreate(Bundle),快速建立 onCreate 函式


    (4) 最後在 onCreate 內指定 PreferenceFragment 配置的XML檔案
    addPreferencesFromResource(R.xml.你的XML檔名);

    上述步驟完整Code:
    public void onCreate(Bundle savedInstanceState) {
      // TODO Auto-generated method stub
      super.onCreate(savedInstanceState);
      addPreferencesFromResource(R.xml.eee);
     }
  3. 接下來要讓主 Activity 喚醒上一步寫好的 FragmentManager ,在主Activity中寫入以下 :

    (1) 首先為了控制 Fragment,首先要先取得 Fragment 管理器
     FragmentManager fm = this.getFragmentManager();

    (2)接下來取得管理器編輯與操作的物件,才能開始操作
     FragmentTransaction ft = fm.beginTransaction();

    (3) 接下來要將主View 切換到 PreferenceFragment
    FragmentTransaction ft2 = ft.replace(android.R.id.content, new PrefsFragement());

    (4) 最後呼叫 commit 方法執行
     ft2.commit();
    上述步驟完整Code:
     FragmentManager fm = this.getFragmentManager();
     FragmentTransaction ft = fm.beginTransaction();
     FragmentTransaction ft2 = ft.replace(android.R.id.content, new PrefsFragement());
     ft2.commit();
  4. 完成上述步驟後,一個 PreferenceFragment 就完成囉 ~,趕快執行看看吧~

2012年5月20日 星期日

【PHP】基本陣列 (上)

一. 宣告


一個基本陣列 :$a = array( 0=>"a" , 1=>"b" , 2=>"c" , 3=>"d" ) ;


以下為陣列示意圖:




以下有幾種相同效果的宣告方法


方法1: 一個一個元素加上去。


$a = array();
$a[] = "a";
$a[] = "b";
$a[] = "c"
$a[] = "d"




方法2: 將元素全部排進去。


$a = array( "a", "b" , "c" , "d" ) ;




方法3: 指定一個初始的鍵值0,將元素全部排進去,陣列會自動編排第一個鍵值0、第二個鍵值1,以此類推。


$a = array( 0 => "a", "b" , "c" , "d" ) ;


方法4: 本文第一行的方法,將每個元素都指定鍵值,一個一個排下去。


$a = array( 0=>"a" , 1=>"b" , 2=>"c" , 3=>"d" ) ;





二.印出


一般來說,陣列印出都使用迴圈,當然還有特殊方法


$a = array( 0=>"a" , 1=>"b" , 2=>"c" , 3=>"d" ) ;

印出上面內容有下面幾個方法


方法1: 使用for迴圈


for$i = 0 ;  $i<count($a) ; $i++ )
{
print $a[$i]
}
//結果:abcd


方法2: 使用while


while( $i<count($a) )
{
print $a[$i++];
}
//結果:abcd


方法3: 用 implode( 每個元素中間要用什麼區隔 , 陣列 ) ,
                先將陣列合併成一個字串,在印出。此方法比較有效率。


print implode( "" , $a ) ;  //印出陣列元素,每個元素中間用 "," (逗號) 隔開。
//結果:a,b,c,d



方法4: foreach( 陣列 as 鍵值 => 數值 ) 印出陣列鍵值與元素。


foreach( $a as $key => $value )
print $key "," $value ."、" ;
//結果:0,a、1,b  2,c  3,d



foreach( $a as $value )
print  $value  ;
//結果:abcd




撰寫:zap
參考:Dreamweaver CS3 + PHP 網頁資料庫範例教學(文魁)

【SQL】多個資料表的SELECT搜尋


( 上為一個模擬的關聯資料表 )


如果只要顯示以下3個欄位

order.name food.name  還有  drink.name





整體語法:

SELECT 欄位
FROM 資料表1  INNER JOIN  資料表2  ON 資料表1的欄位 = 資料表2的欄位



INNER JOIN→連接2個資料表
ON→連接2個欄位




分析一下大原則:



SELECT 欄位1,欄位2,...
FROM 飲料資料表  INNER JOIN( 點餐資料表 INNER JOIN 食物資料表 ON 點餐資料表欄位 = 食物資料表欄位 ) ON 飲料資料表欄位 = 點餐資料表欄位



  1. 先連結 點餐資料表食物資料表
  2. 再連結 點餐資料表欄位食物資料表欄位
  3. 飲料資料表 再與 點餐資料表 連接
  4. 再連接 飲料資料表欄位點餐資料表欄位


SQL搜尋語法如下:


SELECT order.name , food.name , drink.name
FROM drink INNER JOIN
(order INNER JOIN food ON order.foodid = food.foodid ) 
ON drink.drinkid = order.drinkid




總結:


  1. 資料表連結誰先誰後都無所謂,但是一定要符合關聯資料表的原則
  2. 多個資料表連結,必須先連結其中2個,剩下的再逐一連結




撰寫:zap
參考:SQL SERVER 2008R2 資料庫設計實務(碁峯)

【PHP】mysql_connect 與 mysql_pconnect

在php裡面
要與mysql建立連線的兩個函式 
mysql_connect  與  mysql_pconnect
兩個有什麼差別呢?
mysql_connect很簡單
就是用完就丟
也不需要使用mysql_close()
因為它使用完畢就會自動關閉連線
只是每次建立時比較耗一些資源


mysql_pconnect
則是建立一個持續的連線
它會保留給下次連線使用
而且不能用mysql_close()來關閉
如果今天只對一個資料庫作存取
只需要注意mysql最大連線數即可
如果今天是要對兩個或多個資料庫作存取
要非常注意
假設今天連線數上限是300
當連線到a資料庫時有250
如果接下來有許多使用者要連線到b資料庫時
那還剩多少連線可以使用呢?
答案是50
因為已經分給a資料庫的連線
是不能關閉或是轉換給b資料庫的


所以使用mysql_pconnect
是不是完全好的?
我覺得要考慮許多的情況才行


依照你網站的需求
再去決定要使用哪種連線方式




文:葉小誠

【PHP】防止SQL注入攻擊 (mysql_real_escape_string)

mysql_real_escape_string()會自動在特殊字元前面加上\
例如: $a =what's what\'s
這樣一來就可以防止SQL攻擊。

例如有段程式碼如下:
$sql="SELECT * FROM test WHERE id = ' ".$id." '  pass= ' ".$passwd." ' ";

如果有人在pass裡面輸入 ' or '1'='1
那這樣不就會變 


$sql="SELECT * FROM test WHERE id =  ' test '    pass= '   ' or '1'='1  ' ";




$sql="SELECT * FROM test WHERE id =  test '    pass= '   ' or '1' '1' ";




所以我們把程式碼改成


$sql="SELECT * FROM test WHERE id =


' ".mysql_real_escape_string($id)." '


pass= ' ".mysql_real_escape_string($passwd)."";


這樣就不怕有心人了