Bài giảng Lập trình web động với PHP/MySQL - Phần 3 - Tống Phước Khải
Gán biến trong một Script
Bạn không cần phải khai báo EXPLICIT cho biến như trong một số ngôn ngữ khác. Chỉ cần
khai báo tên biến là nó sẽ sẵn sàng làm việc. Bạn hãy xét các ví dụ sau để hiểu cách khai
báo biến trong PHP uyển chuyển như thế nào:
$a = "Toi thich hoc PHP"; //day la bien chuoi
$b = 4; //day la bien so
$c = 4.837; //day la bien so thuc
$d = "2"; //day cung la bien chuoi
Để ý rằng dấu = là dấu dùng để gán. Còn khi thực hiện phép so sánh bằng thì bạn dùng hai dấu bằng (= = ). Ví
dụ: IF ($x= =1)
PHP rất thông minh trong việc biến đổi kiểu. Ví dụ, bạn thực hiện phép cộng một số nguyên
với một chuỗi chứa ký tự số (trong ví dụ trên là $b và $d).
$a = "Toi thich hoc PHP"; //day la bien chuoi
$b = 4; //day la bien so
$c = 4.837; //day la bien so thuc
$d = "2"; //day cung la bien chuoi$e = $b + $d;
echo $e;
PHP sẽ nhận ra rằng bạn muốn xem chuỗi trong $d (chuỗi "2") như là một số nguyên. Thế là
nó sẽ hoán chuyển sang trị nguyên và thực hiện phép toán cộng cho ra kết quả là $e = 6.
Ngoài ra, PHP còn có thể hiểu được các chuỗi vừa số vừa chữ như ví dụ sau:
$a = 2;
$b = "2 con heo con";
$c = $a + $b;
Kết quả cho ra là $c = 4. Nếu một số nguyên hay thập phân đứng ở vị trí đầu một chuỗi thì
PHP có thể hiểu được như ví dụ trên. Tương tự, PHP thực hiện tương tự đối với các kiểu số
khác nhau:
$f = 2; //$f la mot so nguyen
$g = 1.444; // $g la mot so thuc
$f = $f + $g; //$f tu bien doi thanh so thuc
Trang 1
Trang 2
Trang 3
Trang 4
Trang 5
Trang 6
Trang 7
Trang 8
Trang 9
Trang 10
Tải về để xem bản đầy đủ
Tóm tắt nội dung tài liệu: Bài giảng Lập trình web động với PHP/MySQL - Phần 3 - Tống Phước Khải
ookie - Giá trị của mycookie my_id - Cookie tồn tại trong vòng 30 ngày kể từ ngày nó phát sinh (time()+(30*24*60*60) ngày giờ hiện tại + 30 ngày được quy ra giây). - Cookie có tác dụng đến tất cả các trang trong domain. Bạn có thể hạn chế lại bằng các chỉ ra đường dẫn đến một số trang nào đó trong domain. - Nó sẽ hiện diện trong tất cả các website có địa chỉ - Không có xác lập đặc biệt nào về bảo mật. Một khi cookie được xác lập, các biến phát sinh từ cookie có tác dụng giống như biến phát sinh từ form mà chúng ta đã bàn trước đây. Chúng sẽ hiện diện với chức năng là biến global. Sau khi script PHP xác lập cookie, các script khác trong domain có thể truy cập cookie một cách tự động. Nếu như bạn muốn cẩn thận hơn để $mycookie không xung đột với một biến nào khác cũng có tên $mycookie, bạn có thể truy xuất nó thông qua mảng HTTP_COOKIE_VARS và sử dụng lệnh: HTTP_COOKIE_VARS["mycookie"]. Bạn có thể xác lập cookie cung cấp khả năng truy xuất như là một mảng: setcookie("mycookie[first]","dddd",time()+2592000,"/","192.168.1. 1", 0); setcookie("mycookie[second]","my_second_id",time()+2592000,"/","1 92.168.1.1", 0); Cả hai biến trên đều có thể truy cập đến như là một mảng liên hợp. Sessions PHP4 cũng giống như ASP và ColdFusion đều có hỗ trợ session, việc này giúp ích rất nhiều cho việc truy cập web. Vậy session là gì? Đơn giản nó chỉ là một cách thức để duy trì và truyền biến trong khi chuyển tiếp giữa các trang web. Chương trình của bạn khai báo một session được bắt đầu với hàm start_session(). PHP đăng ký một SesssionID duy nhất, và thường thì ID này được gởi đến user thông qua một cookie. PHP sau đó tạo một tập tin trên server để theo dõi sự thay đổi của biến. Tập tin này có tên giống như tên của SessionID. Một khi session được tạo, bạn có thể đăng ký bất kỳ số lượng biến. Các giá trị của những biến này được lưu giữ trong tập tin trên server. Cũng như sự tồn tại của cookie, các biến trong session sẽ hiện diện trên bất kỳ trang nào được truy cập đến trong phạm vi một domain. Việc xác lập này rất thuận tiện hơn là chuyển tiếp các biến từ trang này sang trang khác thông qua các phần tử ẩn trong form hay cookie. Session nói chung là khá đơn giản. Hãy xem script sau sẽ đăng ký một biến session tên là $my_var, và sẽ gán cho nó một giá trị là "hello world". <? session_start(); session_register("my_var"); $my_var = "hello world"; ?> Trên những trang tiếp theo biến $my_var sẽ hiện diện, nhưng chỉ sau khi bạn chạy hàm sesssion_start(). Hàm này bảo PHP tìm kiếm một session xem có tồn tại hay không, rồi làm cho các biến session trở thành global. Nó có thể sử dụng câu lệnh IF để làm cho các biến session hoàn toàn có thể truy cập được. Hãy xem xét ví dụ sau: <?php session_start(); session_register("your_name"); //check to see if $your name contains anything if(!empty($your_name)) { echo "I already know your name, $your_name"; } //this portion will probaby run the first time to //this page. elseif(empty($your_name) && !isset($submit)) { echo " first name last name "; //if the form has been submitted, this portion will //run and make an assignment to $your_name. } elseif (isset($submit) && empty($your_name)) { $your_name = $first_name . " " . $last_name; echo "Thank you, $your_name"; } Sau khi chạy chương trình này, chọn refresh trên trình duyệt. Bạn sẽ thấy script sẽ nhớ được rằng bạn là ai. Các hàm setcookie() và session_start() nên ở vị trí gần đầu tập tin. Nếu bạn thử chuyển đến trình duyệt trước để xác lập một cookie bạn sẽ nhận được một thông báo lỗi. Biến sẵn có Có rất nhiều biến sẵn có của PHP và Server. Bạn có thể liệt kê một danh sách đầy đủ bằng cách sử dụng lệnh phpinfo() để xem. Bạn hãy tạo một file php và cho chạy thử xem: <?php phpinfo(); ?> Bạn có thể sử dụng các biến này bằng nhiều cách thức khác nhau. Tôi sẽ trình bày một sau ngay sau đây, và sẽ chỉ ra bạn nên dùng vào trường hợp nào. Một số biến đến từ PHP engine, một số khác bắt nguồn từ Webserver. Biến sẵn có của PHP PHP_SELF Biến này nhận giá trị là địa chỉ hiện tại của tập tin .php đang được duyệt. Địa chỉ này sẽ là địa chỉ đầy đủ từ gốc (bắt đầu từ http://) . Bạn sẽ sử dụng nó khi muốn truy cập lại chính trang web đang thi thành. Xét ví dụ sau, đây là một form tương tự như form sign.php mà các bạn đã có dịp xét qua. Nếu khách thực hiện thao tác khác với submit thì chính form này sẽ được thi hành lại: <? if(isset($submit)) { //Xuat ra thong bao tai day echo "Cam on ban da submit"; } else { ?> > first name last name <? } ?> HTTP_POST_VARS Đây là một mảng chứa tất cả các biến được chuyển tiếp thông qua POST method từ một form. Bạn có thể truy cập từng biến riêng rẽ như là một phần tử của mảng liên hợp (ví dụ: $PHP_POST_VARS["myname"]). HTTP_GET_VARS Đây là một mảng chứa tất cả các biến được chuyển tiếp thông qua GET method. Bạn có thể truy cập từng biến riêng rẽ như là một phần tử của mảng liên hợp (ví dụ: $PHP_GET_VARS["myname"]). HTTP_COOKIE_VARS Tất cả các cookie chuyển đến trình duyệt đều có thể được truy xuất trong mảng liên hợp này. Nó bao gồm cả session cookie. Nếu bạn còn thắc mắc cookie sẽ thi hành như thế nào thì hãy xem hàm phpinfo() để biết được trình duyệt của bạn đang chuyển đến server những gì. BIẾN CỦA APACHE Apache có sẵn rất nhiều biến. Tôi không trình bày đầy đủ tất cả các biến ra đây. Các biến bạn sử dụng, chúng tuỳ thuộc vào xác lập hiện tại của bạn như thế nào. Sau đây là một số biến mà có lẽ bạn sẽ sử dụng thường xuyên trong chương trình của bạn. DOCUMENT_ROOT Biến này trả về đường dẫn của Webserver. Biến này được tôi sử dụng trong xuyên suốt quyển sách này. Hãy xét ví dụ sau: include"$DOCUMENT_ROOT/book/functions/charset.php"; Bằng cách sử dụng biến DOCUMENT_ROOT thay vì dùng đường dẫn tuyệt đối, chúng ta có thể di chuyển toàn bộ một thư mục sang một Apache Server khác mà không lo lắng rằng đường dẫn sẽ bị sai lệch trong include path. Nên nhớ rằng nếu như bạn không sử dụng Apache Server thì biến này không sử dụng được. Nếu bạn sử dụng include_path trong tập tin php.ini, bạn không cần phải lo lắng phải xác định đường dẫn như thế nào bởi vì PHP sẽ duyệt hết tất cả các thư mục và tìm ra tập tin bạn đã chỉ định. HTTP_USER_AGENT Bất kỳ ai đã từng thiết kết Web site đều hiểu rằng tầm quan trọng của việc nhận dạng được trình duyệt của người sử dụng là gì. Một số trình duyệt thì không sử dụng được JavaScript, một số khác thì đòi hỏi dạng HTML đơn giản. Biến user_agent cung cấp cho bạn khả năng uyển chuyển đối với từng trình duyệt khác nhau. Một user_agent chuẩn có dạng như thế này: Mozilla/4.0 (compatible; MSIE 5.01; Windows 98) Nếu bạn phân tích chuỗi này ra bạn sẽ biết được những gì bạn cần tìm. Có thể bạn chỉ thích hàm get_browser() của PHP. Về lý thuyết mà nói, hàm này định nghĩa khả năng cho phép của trình duyệt của user đang sử dụng. Cho nên bạn có thể biết được là chương trình của bạn đang phục vụ tốt hay không. Các sách PHP có những hướng dẫn về cách cài đặt và sử dụng get_browser(), nhưng tôi khuyên bạn không nên sử dụng nó. Bởi vì sử dụng get_browse bạn sẽ được bảo rằng IE 5 dùng cho PC và Netscape 4.01 dùng cho Mac có hỗ trợ CSS (cascading stylesheets) và JavaScript. Nhưng bất kỳ người sử dụng nào cũng biết rằng: viết lệnh DHTML để chạy trên cả hai môi trường trình duyệt này là một công việc phức tạp. Thông tin bạn nhận được từ get_browser() có thể dẫn đến những tính năng giả trong bảo mật. Cách tốt nhất là bạn sử dụng HTTP_USER_AGENT và thực hiện quyết định của mình dựa trên trình duyệt hoặc platform xác định nào đó. REMOTE_ADDR Dùng để lấy địa chỉ IP của user. Tuy nhiên có những user am hiểu chuyện này và có thể họ thay đổi IP của máy mình. Cho nên không lấy gì để đảm bảo rằng: một địa chỉ IP chắn chắn là của một user nào đó. Bạn sử dụng biến này để theo dõi sự truy nhập của một user nhưng nó chỉ mang tính tương đối thôi. REQUEST_URI Biến này cũng giống như biến PHP_SELF. Ngoài ra nó còn chứa thêm tham số trong địa chỉ truy vấn . Nếu bạn truy cập vào địa chỉ: Thì biến REQUEST_URI của bạn có giá trị là: info/products/index.php?id=6 SCRIPT_FILENAME Biến này chứa toàn bộ đường dẫn của tập tin. Kiểm tra biến Ở trên chúng ta đã nói nhiều về Biến. Như các bạn biết đó, tên của một biến không quan trọng bằng giá trị mà nó chứa trong đó. Như tôi đã nói Biến trong PHP rất uyển chuyển. Điều này phát sinh sự bất lợi là bạn sẽ không biết ở tại một thời điểm nào đó thì biến này sẽ mang giá trị gì. Do đó bạn cần phải thực hiện thao tác kiểm tra biến. isset( ) Hàm này thực hiện việc kiểm tra biến có chứa giá trị hay không. Nó sẽ trả về giá trị TRUE hoặc FALSE. Nếu biến chưa được xác lập thì trị isset() sẽ là false. Bạn hãy xem xét ví dụ sau, nó thi hành một query MySQL. Bạn đã biết rằng một field trong database có thể chứa trị null hoặc chuỗi rỗng. Với việc sử dụng hàm isset() bạn sẽ kiểm tra và phân biệt được hai giá trị trên. Trong đoạn lệnh PHP bên dưới. Trong đó biến $query là một phát biểu SELECT lấy dữ liệu submit từ form của user. $result = mysql_query($query) or die (mysql_error()); $number_cols = mysql_num_fields($result); echo "query: $query\n"; //layout table header echo "\n"; echo "\n"; for ($i=0; $i<$number_cols; $i++) { echo "", mysql_field_name($result, $i), "\n"; } echo "\n";//end table header //layout table body while ($row = mysql_fetch_row($result)) { echo "\n"; for ($i=0; $i<$number_cols; $i++) { echo ""; if (!isset($row[$i])) //test for null value {echo "NULL";} else {echo $row[$i];} echo "\n"; } echo "\n"; } echo ""; Lưu ý rằng dấu chấm than (!) có nghĩa là phủ định. Tức là nếu $var có giá trị null thì: isset($var) cho ra giá trị False !isset($var) cho ra giá trị True empty() Hàm empty() có vẻ ngược ngạo so với hàm isset(). Nó sẽ cho ra trị True nếu $var có trị null, chuỗi rỗng hoặc số 0. Hàm này thường được sử dụng để kiểm tra xem user có nhập trị vào trong form hay không: if(empty($first_name)) { echo "Ban can phai nhap ten cua minh"; exit; } is_int( ) Hàm này để kiểm tra biến có phải là số nguyên hay không. Có 2 cú pháp khác cho cùng kết quả như nó là: is_integer và is_long(). Bạn sử dụng hàm này khi không chắc rằng biến là một trị nguyên hay chuỗi. Ví dụ: $a = "222"; $b = 22; is_int($a) cho ra trị False is_int($b) cho ra trị True Tương tự bạn sẽ có một loạt hàm kiểm tra kiểu của biến sau đây: is_double() Kiểm tra số kiểu double (dấu phẩy động). Hàm thay thế: is_float() và is_real(). is_string( ) Kiểm tra kiểu chuỗi. is_array( ) Kiểm tra kiểu mảng. is_bool( ) Kiểm tra kiểu boolean (TRUE và FALSE) is_object( ) Kiểm tra biến kiểu object. Bạn sẽ tìm hiểu kiểu object trong các phần sau. gettype( ) Hàm này sẽ cho bạn biết kiểu của biến như: string, double, integer, array, hoặc boolean. Ngoài ra nó có trả về các kiểu như object, class. Bạn sẽ khảo sát kỹ về việc lập trình hướng đối tượng trong các phần sau để biết thêm về object và class. Lưu ý trị của hàn gettype() trả về luôn là một chuỗi: "string", "integer", "double" v.v. Bạn hãy xem ví dụ sau: $str = "Day la mot chuoi"; $type = gettype($str); if ($type == "string") { echo "Dung vay"; } Đổi kiểu của biến Bạn sẽ sử dụng 3 cách để đổi kiểu của biến. Phương pháp type casting Phương pháp này rất đơn giản: Bạn chỉ cần ghi tên kiểu ra, đóng ngoặc đơn lại, rồi đặt trước biến. Tức khắc biến sẽ bị đổi theo kiểu mà bạn muốn. Cách thức: (kiểu) $biến Ví dụ: $a = 1; $b = (string)$a; //số 1 sẽ biến thành chuỗi 1 echo gettype($a), "\n"; echo gettype($b), "\n"; Kết quả cho ra là: integer string Sử dụng hàm settype( ) Hàm này có 2 đối số. Thứ nhất là tên biến, thứ nhì là kiểu. Ưu điểm của nó là nó có thể cho ra kết quả FALSE nếu như việc hoán đổi không được. Cách thức: settype($biến, "kiểu") Ví dụ: $a = 1; settype($a, "string"); Sử dụng hàm intval( ), doubleval( ), và stringval( ) Phương pháp này thường để bạn áp dụng nhanh trong khi tính toán. Có lẽ nhìn tên hàm bạn cũng biết được chức năng của nó rồi. Hãy xét ví dụ sau: $a = "43";/ /43 là kiểu chuỗi $b = (intval($a) * 2); Biến của biến Nghe qua có vẻ lạ lạ, nhưng đây là một "độc chiêu" của PHP. Với cách thức này bạn sẽ lấy giá trị của một biến để hình thành tên của một biến mới. Cách thức: $$biến Ví dụ: $a = ‘khai’; $$a = ‘Chao moi nguoi’; Bạn sẽ thấy trong ví dụ trên một biến mới được hình thành đó là $khai chứa giá trị là "Chao moi nguoi" Xét thêm ví dụ sau, trong đó $tacgia là một mảng liên hợp. <? $tacgia = array ("ho"=>"Tong", "ten"=>"Khai"); while (list($field,$value) = each($tacgia)) { $field = "bien_$field"; $$field = $value; } echo $bien_ho, " ", $bien_ten; ?> Khi chạy chương trình, các biến sau sẽ được tạo $bien_ho, $bien_ten và ghi ra màn hình: Tong Khai Tóm tắt Bạn đã tìm hiểu các biến trong PHP. Bạn thấy PHP xử lý các biến linh hoạt hơn nhiều so với các ngôn ngữ khác. Còn một vấn đề khá quan trọng đối với biến đó là scope bạn cũng sẽ biết kỹ về nó ở trong các phần sau của giáo trình này. (Còn tiếp)
File đính kèm:
- bai_giang_lap_trinh_web_dong_voi_phpmysql_phan_3_tong_phuoc.pdf