2013年6月9日 星期日

JS print 的設定參數

<script type="text/javascript">
  window.print();
  if(window.print)
  {
    factory.printing.header = ""
    factory.printing.footer = ""
    factory.printing.portrait =false
    factory.printing.leftMargin = 0
    factory.printing.topMargin = 0
    factory.printing.rightMargin = 0
    factory.printing.bottomMargin = 0
    factory.printing.Print(true);            
  }    
</script>';

2013年3月30日 星期六

AJAX簡介

AJAX 只是一個商業化的名詞,全名就是 Asynchronous JavaScript XMLHttpRequest,簡單說來就是非同步的 XMLHttpRequest。
非同步跟同步有什麼不一樣呢?最簡單的說法就是,同步的更新等於是每一次都需要重讀整個網頁,而非同步只是針對部分的區域變更,而且每一個部分都有各自的資料更新,所以會在各自接收到資料的時候更新(也就是所謂的非同步)。

使用 AJAX 的最大優點,就是可以在不需要重新讀取整個網頁的狀態下,更新部分資訊,很多時候其實頁面更新的資料只有一小部分,而使用同步更新必須整個網頁重新讀取、顯示,不但比較緩慢而且要浪費許多資源。最重要的是讓使用者有中斷感,而 AJAX 的非同步更新會讓人感覺不到中段,就好像我們平常在電腦是用的程式一樣,而不像初期的網頁,每一次更新資料就需要整個重讀一次。



2013年3月13日 星期三

PHP的物件模式


在這裡介紹一下一些PHP物件的模式:


__construct 建構子:會在物件宣告時執行,如果需要代入參數,在宣告時必須一併帶入。
__destruct 解構子:在物件被釋放的時候會執行。

__clone 複製整個物件


class point
{
var $x;
var $y;

function __construct($var1=0, $var2=0)
{
$this->x = $var1;
$this->y = $var2;
}

function show_center()
{
echo "<BR>The center is: ".$this->x."|".$this->y;
}

}

$a = new point(2,3);
$b = $a->_clone();  //複製物件, b 的中心點一樣會是 2,3

物件保護模式

public (公有模式):任何人都可以使用
private(私有模式):只有物件內自己可以使用
protected (保護模式):只有物件以及子物件可以使用



__call() 使用方法:
當__call函式存在時,如果不存在的物件函式被呼叫,就會觸發__call(),這樣可以防止錯誤的呼叫。


class point
{
var $x;
var $y;

function __construct($var1=0, $var2=0)
{
$this->x = $var1;
$this->y = $var2;
}

function show_center()
{
echo "<BR>The center is: ".$this->x."|".$this->y;
}


function __call($name, $arg)
{
echo "<BR>".$name." does not exist! ";
}

}


$point1 = new point;
$point1->test1();

就會出現 test1 does not exist!的訊息


_set 以及 _get 的用法
這兩個方法可以用來預防錯誤的參數存取,如果再上面的類別加上下面這兩個函式。



function __set($name, $val){
echo "I'm sorry, but ".$name." is not exist, you can't set it to ".$val;
}

function __get($name){
echo "I'm sorry, but ".$name." is not exist";
}

當嘗試錯誤存取的時候就會顯示訊息:

$point1->xxx = 10;  會顯示 I'm sorry, but  xxx is not exist, you can't set it to 10
echo $point->yyy; 會顯示 I'm sorry, but yyy is not exist













PHP類別與物件

類別的定義方法

class 類別名稱
{
  var $a;
  var $b;  //定義類別的變數

  //定義類別的函數
  function 函數名稱1(參數1, 參數2)
  {
    :
  }


  function 函數名稱2(參數1, 參數2)
  {
    :
  }


}

在類別中如果要呼叫類別的變數時必須使用 $this->變數名稱,
列如在上面的類別要呼叫 $a 必須使用 $this->a (後面的 a 不用加 $)

類別寫完之後必須宣告為物件才能使用,假如上述類別名稱為 class1,
我們必須先宣告一個物件:

  $test = new class1;

這樣就可以使用上述類別的功能了,物件可以呼叫類別所有開放的變數以及函數,
以上述物件為例子:

  $test->a;  可以取得參數 a
  $test->函數名稱1;  可以呼叫函數 1



建構式(__construct)

設定類別的時候,可以設定建構式,當物件被宣告的時候,建構式就會同時被觸發。
如果建構式必須輸入參數,當宣告物件的時候要一起輸入。


class point
{
var $x;
var $y;

function __construct($var1=0, $var2=0)
{
$this->x = $var1;
$this->y = $var2;
}

function show_center()
{
echo "The center is: ".$this->x."|".$this->y;
}

}

$point1 = new point(2,1); (如果不輸入值,會跑預設)
$point1->show_center();  (會列印出中心點)


繼承(inheritance)的寫法

類別是可以繼承的,繼承父類別的子類別會擁有父類別已經設定好的參數。
繼承的方法是使用 extend


class circle extends point
{
var $radius;
function __construct($var1=0, $var2=0, $var3=1)
{
parent::__construct($var1, $var2);
$this->radius = $var3;
}
function show_info()
{
echo "center is: ".$this->x."|".$this->y. " and radius is: ".$this->radius;
}
}

$point1 = new circle(2,1,3);

$point1->show_center();
$point1->show_info();


新的子類別 circle ,一樣可以呼叫父類別 point 的參數以及函式。


子類別也可以寫自己的建構式,但是如果子類別有建構式就不會執行父類別的建構式,如果需要執行,就在建構式裡面使用 parent::__construct(); 這樣就會呼叫父類別的建構式。如果子類別沒有建構式,就會直接繼承父類別的建構式。



多型(polymorphism)的寫法

子類別可以覆蓋父類別的函數,改成執行自己的方法,這種繼承方式稱為多型。


class circle extends point
{
var $radius;
function __construct($var1=0, $var2=0, $var3=1)
{
parent::__construct($var1, $var2);
$this->radius = $var3;
}
function show_center()
{
echo "center is: ".$this->x."|".$this->y. " and radius is: ".$this->radius;
}
}


$point1 = new circle(2,1,3);
$point1->show_center();

子類別會直接執行自己的 show_center() 而不是父類別的




另外如果再子類別的程式中想要呼叫擁有相同名稱的父類別函數都可以使用 parent:: 加上函數名稱來呼叫。


class circle extends point
{
var $radius;
function __construct($var1=0, $var2=0, $var3=1)
{
parent::__construct($var1, $var2);
$this->radius = $var3;
}
function show_center()
{
parent::show_center();
echo "center is: ".$this->x."|".$this->y. " and radius is: ".$this->radius;
}
}







PHP 條件判斷

PHP 的條件判斷跟其他語言也是大同小異。

if 寫法:

if (條件關係)
{
     條件成立時所執行的程式
}else
{
     條件不成立時所執行的程式
}


switch 選擇:

switch (條件關係){
    case 條件 1 :
       符合條件 1 所執行的程式;
       break;

    case 條件 2 :
       符合條件 2 所執行的程式;
       break;

    case 條件 3 :
       符合條件 3 所執行的程式;
       break;
   default:
      預設值行的程式(當上方所有條件都不符合時執行)
      break;


}


for 迴圈的用法:

for (條件 1; 條件 2 ; 條件 3 )
{

}

條件 1 為起始運算,條件 2 是迴圈結束條件,條件 3 是迴圈變數方式
舉例:

for( $i = 1; $i <= 100; $i++)
{
    echo $i;
}

會把 1 到 100 列印出來


如果不設定條件 2 ,會進入無限迴圈,可以在迴圈中用 break; 來停止



foreach 迴圈的用法:

foreach 可以將陣列中的每一個值都取出執行一次

foreach( 陣列名稱 as 變數名稱){
   程式
}

舉例:
foreach($ary as $i)
{
    echo $i;
}

會把陣列裡面每一個值都列印出來


foreach 也可以把索引值一起拉出來

foreach ( $ary as $key => $val ){

    echo $key. " -> ". $val;

}
會先列印出索引值名稱然後接上值



while 條件迴圈的用法:

語法為:
while (條件敘述)
{
    當符合條件時執行的程式
}

當條件一直符合的時候,迴圈會一直執行下去
舉例:

$i=1;
while( $i <= 100 )
{
     echo $i++;
}

會列印 1 ~ 100 出來



do while 條件迴圈的用法:

do while 跟 while 的用法幾乎一樣,唯一的區別在於,do while 會先執行一次程式後在來檢查是否要繼續下去,而 while 則會先確認條件符合之後才執行第一次。

$i = 10;

while( $i<1 )
{
    echo $i;
}

因為條件不和合,所以不會列印任何東西。


do
{
    echo $i;
}while( $i<1 )

會列印出一次 $i 的內容之後才停止。



















PHP 基本運算值

PHP 的基本運算跟其他C語言大致相同

+    加法運算
-     減法運算
*    乘法運算
/     除法運算
%   求餘數運算
=    指派值


再來就是指派運算值

++    累加 1 到指定值
--     累減 1 到指定值
+=   執行累加某值的運算
-=    執行累加某值的運算
*=   執行累加某值的運算
/=    執行累加某值的運算

$a++ 等於自動幫 $a + 1
也可以寫 ++$a 這時候值會 + 1

$a = 10;
$b = $a++;
$b 會是 10,而 $a 會變成11
$b = ++$a;
$b 會是 11,而 $a 還是變成11

$a = $a + 2;
等同於 $a += 2;


位元運算子

&   進行 AND 運算
|     進行 OR 運算
~   進行  NOT 運算
^   進行 XOR 運算
>   進行位元右移運算


關係運算子

==     相等關係運算   (回傳 true 如果兩者值相同)
===   完全相等關係運算 (兩者必須型態以及值都相同才會回傳 true )
!=      不相等關係運算
!==    完全不相等關係運算
>       大於關係運算
<       小於關係運算
>=     大於等於關係運算
<=     小於等於關係運算
?:       進行條件式運算

條件式運算使用法:

(判斷式)?  (條件成立時回傳的值):(條件不成立時回傳的值)

範例:
$a = 10;
$b = 20;
$a > $b  ?  "Yes" : "No";
會得到 No ,假如把 $b 改成 5 ,那就會得到 Yes


邏輯運算子

!     進行 NOT 邏輯
&&   進行 AND 邏輯
||     進行 OR 邏輯


字串運算子

.     進行字串相加
.=   進行字串累加
















2013年3月11日 星期一

Session 簡述

Session 跟 Cookie 一樣也是用來暫時儲存資料變數,不同的地方是, Cookie 是將資料儲存在客戶端上,而 Session 則是儲存在伺服器上。

在安全性上, Session 儲存在伺服器上安全很多,但是限制也較為複雜,因此一些簡單的參數還是建議直接使用 Cookie 就好。

每一次使用 Session 之前一定要呼叫 session_start() 接下來就可以直接設定要使用的變數,
例如:


session_start();
$_SESSION['var1'] = "test1";

在另外一個頁面的時候也只要呼叫 session_start() 之後,就可以直接使用這些變數了。

如果不要使用這些變數的時候,可以把他們的值使用 unset() 清空,但是要注意不要直接 unset 整個 $_SESSION ,這樣會造成錯誤。