2010年5月21日 星期五

PHP筆記(1)

最近回頭唸了些PHP的東西
回溫一點記憶跟想一些以前沒有體會的想法
把零零碎碎的部分寫成記事

寫PHP時先要準備撰寫環境
需要的有Apache、PHP(以上必備)、MySQL(或其他資料庫軟體)
單獨抓或者 是用套裝軟體都可以
常見的有AppServ、Xampp
套裝軟體管理上比較方便,而且整合比較好
管理資料庫上 通常也使用整合好的phpmyadmin圖形介面
算是方便的選擇
安裝完記得把WWW資料夾下除了phpMyAdmin以外的全砍了以保持安全
php.ini 裡的 extension=php_mysqli.dll    extension=php_gd2.dll
這兩行如果前面有;要先去掉

這篇談的有:
1."和'的差別
2.連結資料庫使用的語法
3.SQL陳述式分號
4. mysqli_query()函式結果輸出
5.PHP寄送mail的方法
6.使用驗證變數的php函式
7.超全域變數$_SERVER['PHP_SELF'] 的使用方法

1."和'的差別

PHP裡對字串的處理方式有兩種,以單引號或雙引號括起來
不同的地方是單引號表達未經處理的字串
變數在裡面不會特別轉換出來
雙引號則是會將句子裡的變數自動替換成變數裡的值
 當然如果有需要,是可以兩種引號混合使用

另外 . 這個符號也可以拿來分隔字串
例如 $a = "I eat ".$lunch." for lunch"怎樣處理都可以
維持易讀易修改的文章風格即可

下面有一個稍微特殊的例子

      for($i = 1; $i <=3; $i++){
        if(!empty($_POST["p$i"])){
            $var = "p$i";
            $$var = mysqli_real_escape_string($dbc, strip_tags(trim($_POST["p$i"])));
            $query =  'SELECT `state` FROM `commodity_state` WHERE `serial number` ='.$$var;
      .........

上面這個例子要做到動態物件配置
$$var可以先視作 以$var的值,再做一次變數宣告,但是在雙引號中只能變換一次
所以query那行只能用此寫法,否則字串的值會變成  "$$var"  =  $p1

2.連結資料庫使用的語法

$dbc = mysqli_connect('localhost','root','pw','db') or die("can't link to database");
//mysqli_connect第四個參數可以不輸入,而改用加上mysqli_select_db()進行
$query = "INSERT INTO xxx (firstname, lastname, tel) VALUES ('Salty','Jobs', 'kkkk')";
//result僅儲存是否執行成功,回傳一個query物件
$result = mysqli_query($dbc, $query) or die('Error ocurr');
mysqli_close($dbc);                     //只能在已經確實呼叫資料庫時才能夠呼叫此函數
 //SELECT * form dbname WHERE xxx = 'yes';  這串是查詢用的展示碼
 
mysqli是舊有的mysql函式的改良(improved)


3.SQL陳述式分號

只有在MySQL的終端執行SQL碼時需要加上分號,使用PHP的mysqli_query則不需要

4. mysqli_query()函式結果輸出

這個函式需要搭配mysqli_fetch_array()函式
否則只會看到伺服器所給定的資源編號
使用上為mysqli_fetch_array(query結果),每做一次擷取一筆資料
傳回結果當然是陣列,要讀取值的話就要用 $Array名稱[' column名稱  ']
搭配while迴圈更可以寫成如下範例:
while($row = mysqli_fetch_array($result)){
  echo $row['name'].' '.$row['email'].'<br />';
}

當沒有傳回資料,這個就會被判定成false
而PHP判定true的條件很寬鬆,只要不為0都可以,所以可以這樣寫

另外有一個跟mysqli_fetch_array()相似的mysqli_fetch_field()函式
它的用途是取得傳回資料的相關資訊
例如:
while($row = mysqli_fetch_field($result)) {
$column = $row->name;
...

在每一次查詢的迴圈裡都會回傳一個欄位名稱
上述的範例可以求得該張資料表的所有欄位

5.PHP寄送mail的方法

mail($To, $subject, $msg, $from ); //msg就使用跳脫符號 \n 打成長長的字串吧

6.使用驗證變數的php函式

isset()與empty()這兩個函式可以幫助辨識變數的值
isset() 會確認變數是否存在,而empty則可以進一步辨識函數是否為空值
$v1 = 'a';   $v2 = '';
以這兩個變數來說,即使v2是空值,但是isset還是會判定成true

這個函式最常被使用的方法是確認表單的資訊是否有傳過來
接著再用empty判 斷變數值
每個表單裡一定也會有submit按鈕
if(isset($_POST['submit']))可以讓我們知道表單是不是有被遞送,這也是使 用上的一個方法

7.超全域變數$_SERVER['PHP_SELF'] 的使用方法

當 有個頁面需要傳送資料給自己
例如:<form action="index.php" method="post">
改 成<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
這項改變當然不是那麼誇張,但他是使頁面更易於維護的小方法之一

沒有留言:

張貼留言