Archive for category PHP & MySQL

Chuong XXV : Hàm (Functions) trong PHP

Hàm (Functions) trong PHP

 

Không thể không nói đến hàm trong việc lập trình, nhờ có nó mà chương trình của chúng ta trở nên dễ dàng tổ chức hơn. Như các ngôn ngữ khác, PHP có khả năng cung cấp những hàm do người dùng tự định nghĩa. Đồng thời, PHP cũng có một số cải tiến để việc viết hàm được dễ chịu và mạnh mẽ hơn.

Định nghĩa và gọi hàm

Rất dễ để định nghĩa một hàm trong PHP:

PHP Code:

<?php

function tên_hàm([các tham số truyền vào ...])
{
[thân hàm ...]
}

?>

- Từ khoá function báo cho PHP biết rằng đây là một hàm. Tiếp theo đó là tên hàm. Tên hàm của PHP có thể là bất cứ ký tự Unicode gì (kể cả tiếng Việt, tiếng Trung…, nhưng không được phép bắt đầu bằng số). Thật sự mạnh mẽ, nhưng bạn sẽ gặp vấn đề khi lưu file đó. Thôi thì cứ đặt tên không dấu là ổn nhất . Ví dụ:

PHP Code:

<?php
function this_is_một_hàm()
{
echo “Hoàn toàn hợp lệ !!!”;
}
?>

- Sau tên hàm là danh sách tham số truyền vào và phần thân hàm. Phần thân hàm phải bắt đầu và kết thúc bằng cặp dấu { }. Phần thân này được thực thi khi tên hàm đựơc gọi.

- Chú ý: mỗi tên hàm chỉ được định nghĩa một lần. Với một số ngôn ngữ khác, hàm có thể được gọi đè khi danh sách tham số truyền vào là khác nhau (Java chẳng hạn), nhưng PHP thì không có việc đó.

Gọi hàm cũng khá dễ. Bạn chỉ việc gọi tên hàm cùng danh sách tham số đi kèm. Hay hơn, việc gọi hàm KHÔNG PHÂN BIỆT CHỮ HOA-CHỮ THƯỜNG. Tuy nhiên, khuyến cáo là nên gọi hàm theo đúng tên hàm đã đặt, như thế dễ quản lý hơn.

PHP Code:

<?php

generate_left_menu_bar();
GeNeRaTe_LeFt_MEnu_BaR();  // cũng được, nhưng không nên dùng !!!
process_user_information($current_user, “new user”, 65.0);
generate_copyright_notices();
generate_left_menu_bar;    // Sai !! Vì không có dấu ()!!

?>
Chú ý ví dụ trên, khi gọi tên hàm, luôn phải có cặp dấu ( ) nếu hàm không nhận tham số nào (còn nếu nhận tham số thì tất nhiên cặp dấu đó để chứa tham số rồi, phải không ).

Ngừng việc thực thi hàm
- Vào bất cứ thời điểm nào trong quá trình thực thi hàm, bạn cũng đều có thể dừng công việc của hàm bằng từ khoá return.

PHP Code:

<?php

function work_work_work()
{
$dow = date(‘l’);

if ($dow == ‘Saturday’ or $dow == ‘Sunday’)
{
// nghỉ việc vào cuối tuần
return;
}

// work hard
work_harder();
}

?>

- Khi mà hàm work_work_work được gọi vào thứ 7 hoặc Chủ nhật, nó trả về “không gì cả”, còn nếu không, nó trả về giá trị “làm việc chăm chỉ hơn đi !!” (Ví dụ chỉ mang tính minh họa ).

Đưa tham số vào hàm

- Ví dụ cho một cấu trúc cơ bản:

PHP Code:

<?php

function my_new_function($param1, $param2, $param3, $param4)
{
echo <<<DONE
You passed in: <br/>
\$param1:  $param1 <br/>
\$param2:  $param2 <br/>
\$param3:  $param3 <br/>
\$param4:  $param4 <br/>

DONE;
}

?>

- Khi đưa một số tham số vào hàm, bạn phải phân cách chúng bằng dấu phẩy (,). Bạn có thể truyền bất kỳ tham số nào vào hàm, bất kể là biến, hằng số.. hoặc thậm chí là một hàm khác:

PHP Code:

<?php

// gọi hàm với nhiều loại tham số truyền vào
my_new_function($userName, 6.22e23, pi(), $a or $b);

?>
Giá trị trả về của hàm

- Thông thường, người ta lập trình hàm chỉ để xử lý một công việc nhất định mang tính lặp lại, và giá trị trả về của hàm là không có (null). Nhưng không hẵng tất cả mọi trường hợp đều như vậy:

PHP Code:

<?php

function is_even_number($number)
{
if (($number % 2) == 0)
return TRUE;
else
return FALSE;
}

?>

-> Hàm trên có giá trị trả về là một giá trị boolean True hoặc False.

Lời kết:
Hàm là một công cụ rất mạnh trong PHP. Việc sử dụng hàm không chỉ để tối ưu các đoạn code, nó còn làm cho chương trình dễ đọc hơn và thích hợp để làm trong một nhóm với nhau.

Chúc bạn thành công,
iSheep (UDS)

 

Leave a comment

Chuong XXIV : Kiểu dữ liệu PHP (tiếp theo – bon tren)

Kiểu dữ liệu PHP (tiếp theo – bon tren)

 

PHP hỗ trợ tám kiểu dữ liệu nguyên thuỷ.
Bốn kiểu thông thường là: boolean, integer, floating-point number(float), string.
Hai kiểu phức tạp là: mảng( array) và đối tượng ( object). Và cuối cùng là hai kiểu đặc biệt : resource và NULL. Loại dữ liệu của biến thông thường không được gán bởi người lập trình mà được quyết định tại thời gian chạy của PHP, phụ thuộc vào ngữ cảnh mà biến được dùng.

1. Boolean: đây là kiểu đơn giản nhất. Một kiểu boolean biểu thị một giá trị thật. Nó có thể là TRUE hay FALSE.

Cú pháp: để chỉ định một giá trị boolean, có thể sử dụng từ khoá TRUE hay là FALSE. Cả hai đều không phân biệt chữ hoa hay chữ thường.

Ví dụ:

Code:

$foo=True; // gán giá trị TRUE cho biến $foo.

Để có thể chuyển một giá trị sang kiểu boolean, chúng ta có thể dùng (bool) hay (boolean). Tuy nhiên trong hầu hết các trường hợp bạn không cần phải sử dụng việc ép kiểu này, bởi giá trị sẽ được tự động chuyển nếu nó là một toán tử, hàm hay là cấu trúc điều khiển đòi hỏi một tham số kiểu boolean.

Chú ý: -1 được xem là TRUE, giống như các giá trị khác 0 khác ( bất kể là số dương hay âm).

2. Integer: là một tập hợp bao gồm các số {…,-2,-1,0,1,2,…}.

Cú pháp: Integer có thể được chỉ định trong cơ số 10, cơ số thập lục phân hay cơ số bát phân, tuỳ chọn đi trước bởi dấu – hay +. Nếu bạn sử dụng với cơ số bát phân, bạn phải theo thứ tự với 0 đứng trước, còn đối với số thập lục phân thì 0x.

Ví dụ như sau:

Code:

$a = 1234; # số thập phân

 

$a = -123; # số âm

 

$a = 0123; # số bát phân

 

$a = 0x1A; # số thập lục phân

Kích thước của kiểu dữ liệu này là 32bit, và PHP không hỗ trợ kiểu unsigned integer. Nếu bạn chỉ định một số vượt qua biên của kiểu dữ liệu integer, nó sẽ được xem như kiểu float. Tương tự như vậy, khi bạn thực hiện một phép toán mà kết quả trả về là một số vượt qua biên của kiểu integer, thì kiểu float sẽ được trả về. Tuy nhiên, có một lỗi trong PHP mà không phải bao giờ điều này cũng đúng, nó liên quan đến các số âm. Chẳng hạn, khi bạn thực hiện -50000* $million, kết quả sẽ là 429496728. Tuy nhiên, khi cả hai toán tử đều là số dương thì không có vấn đề gì xảy ra.

Để chuyển một giá trị sang kiểu integer, ta có thể dùng toán tử ép kiểu (int) hay (integer). Tuy nhiên, trong hầu hết các trường hợp bạn không cần phải dùng toán tử ép kiểu đó, bởi giá trị sẽ được tự động chuyển sang nếu toán tử, hàm hay cấu trúc điều khiển đòi hỏi một đối số integer.

3. Kiểu số thực (floats,doubles,hay real numbers) : có thể được chỉ định bằng cách sử dụng một trong các cú pháp sau:

Code:

   $a = 1.234; $a = 1.2e3; $a = 7E-10;

Kích cỡ của kiểu float tùy thuộc vào platform, giá trị lớn nhất là xấp xỉ 1.8e308

4. String: là những chuỗi các kí tự.Trong PHP,một kí tự cũng tương tự như một byte,do đó có chính xác 256 kí tự khác nhau.

Cú pháp: có thể khai báo bằng ba cách khác nhau như sau:

· Dấu nháy đơn: cách dễ dàng nhất để chỉ định một chuỗi đơn giản là đóng nó trong một dấu nháy đơn.Ví dụ:echo ‘le bao vy’;

· Dấu nháy kép: nếu chuỗi được đóng trong dấu nháy kép(“),PHP hiểu sẽ có thêm các chuỗi cho các kí tự đặc biệt ….. Ví dụ: \n;\t;\\;\$;…

· Heredoc: các khác để phân định chuỗi là sử dụng cú pháp (“<<<”). Chỉ nên cung cấp một định danh sau <<<, sau đó là chuỗi và tiếp là cùng tên định danh để đóng dấu nháy. Định danh dùng để đóng phải bắt đầu bằng cột đầu tiên của dòng. Định danh được dùng phải có tên giống như trong các quy luật đặt tên biến trong PHP.

5. Mảng : là một danh sách các phần tử có cùng kiểu dữ liệu.Mảng có thể là mảng một chiều hay nhiều chiều.

· Mảng một chiều có chỉ mục: là mảng được quản lý bằng cách sử dụng chỉ số dưới kiểu integer để biểu thị vị trí của giá trị yêu cầu.Cú pháp: $name[index1];

Ví dụ: một mảng một chiều có thể được tạo ra như sau:

Code:

            $meat[0]=”chicken”;

 

$meat[1]=”steak”;

 

$meat[2]=”turkey”;

Nếu bạn thực thi dòng lệnh sau: print $meat[1]; thì trên trình duyệt sẽ hiển thị dòng sau: steak.

Bạn cũng có thể sử dụng hàm array( ) của PHP để tạo ra một mảng.Ví dụ:

Code:

$meat=array(“chicken”,”steak”,”turkey”);

· Mảng một chiều kết hợp: rất thuận lợi khi dùng để ánh xạ một mảng sử dụng các từ hơn là sử dụng các integer, nó giúp ta giảm bớt thời gian và các mã yêu cầu để hiển thị một giá trị cụ thể. Ví dụ: bạn muốn ghi lại tất cả các thức ăn và các cặp rượu ngon.

Code:

$pairings["zinfandel"] = “Broiled Veal Chops”;

 

$pairings["merlot"] = “Baked Ham”;

 

$pairings["sauvignon"] = “Prime Rib”;

Một cách khác là bạn có thể sử dụng hàm array( ) của PHP để tạo ra một mảng loại này, ví dụ như sau:

Code:

$pairings = array( zinfandel => “Broiled Veal Chops”,

 

merlot => “Baked Ham”,sauvignon => “Prime Rib”,

 

sauternes => “Roasted Salmon”;

· Mảng nhiều chiều có chỉ mục: chức năng của nó cũng giống như mảng một chiều có chỉ mục, ngoại trừ việc nó có thêm một mảng chỉ mục được dùng để chỉ định một phần tử. Cú pháp: $name[index1] [index2]..[indexN];

Một mảng hai chiều có chỉ mục được tạo ra như sau:

Code:

            $position = $chess_board[5][4];

· Mảng đa chiều kết hợp: khá hữu ích trong PHP. Giả sử bạn muốn ghi lại các cặp rượu-thức ăn, không chỉ loại rượu, mà cả nhà sản xuất. Bạn có thể thực hiện như sau:

Code:

$pairings["Martinelli"] ["zinfandel"] = “Broiled Veal Chops”;

 

$pairings["Beringer"] ["merlot"] = “Baked Ham”;

 

$pairings["Jarvis"] ["sauvignon"] = “Prime Rib”;

6. Object: bạn có thể xem object như là một biến mà minh hoạ một kiểu mẫu template được gọi là class. Khái niệm của đối tượng và lớp được sử dụng nhiều trong ngôn ngữ lập trình hướng đối tượng OOP. Không giống như các kiểu dữ liệu khác trong PHP, object phải được khai báo.Điều quan trọng là phải nhận ra rằng object không hơn gì một minh hoạ của một lớp, và hoạt động như là một khuôn mẫu cho việc tạo các object có các đặc tính và chức năng cụ thể. Cho nên, lớp(class) phải được định nghĩa trước khi khai báo một object. Để khởi tạo một đối tượng, bạn sử dung câu lệnh new để minh hoạ đối tượng với một biến.Ví dụ:

Code:

<?php

 

class foo{

 

function do_foo(){

 

echo “Doing foo.”;

 

}

 

}

 

$bar = new foo;

 

$bar->do_foo();

 

?>

7. Resource: là một biến đặc biệt, chứa một tham chiếu đến một resource bên ngoài. Các resource được tạo ra và sử dụng bởi các hàm đặc biệt.
Giải phóng resources: bởi do tham chiếu đếm của hệ thống được giới thiệu trong PHP4 Zend-engine, nó sẽ tự động phát hiện khi một resource không cần thiết cho lâu dài. Khi ở trong trường hợp này, tất cả các resource mà đã được dùng cho resource này được giải phóng bởi “bộ phận thu nhặt rác”. Do đó, hiếm khi thật sự cần thiết để giải phóng bộ nhớ thông thường bằng cách sử dụng hàm free_result().

8. NULL: giá trị NULL đặc biệt dùng để thể hiện một biến không có giá trị. Một biến được xem là NULL nếu:

o Nó được gán giá trị hằng số NULL.

o Nó chưa được khởi tạo giá trị nào.

o Nó là hàm unset( )

Chú thích: unset () là một hàm dùng để hủy bỏ các biến chỉ định.

Cú pháp: chỉ có một loại giá trị của kiểu NULL. Bạn có thể khai báo như ví dụ sau:

Code:

    $var=NULL;

 

isheep(UDS)

Leave a comment

Chuong XXIII : PHP Cheat Sheet

PHP Cheat Sheet

ZZZZZZZZZZZZZZ

Function List

Probably the biggest problem with PHP is its inconsistency. Some function names use underscores, some don’t. Some are of the form “verb object” and some are “object verb”. Some use “2″ instead of “to”. The side sections of the cheat sheet list many of the most commonly used functions in PHP and are there to provide a quick reference to check function names.

SuperGlobals

In PHP, SuperGlobals are available at any point in a script, and allow access to data from the user and session date, as well as information about server settings and environmental data. This section contains a list of SuperGlobal variable names.

Date Formatting

There are, as I’m sure you are aware, a huge number of options when it comes to date formatting, and there are few people who remember all of them. This section of the cheat sheet lists the various options, followed by a description, and an example where appropriate.

Regular Expression Syntax

Many people have trouble with regular expressions, and the first step to coming to grips with them is to become familiar with the various symbols used in regular expressions and their meaning. This section lists these symbols and describes their meaning.

PCRE Modifiers

“PCRE” stands for “Perl Compatible Regular Expressions”. In PHP, this refers to functions like “preg_replace” and “preg_split”. The patterns used in these functions can have modifiers applied to them, and this section list those modifiers and what they do.

Function Argument Orders

One of the other major inconsistencies in PHP is function argument ordering. Functions that are very very similar often completely opposite ordering of arguments. This section simply lists a few of the common ones people are sometimes confused by, or that people find easy to forget.

fopen() Modes

fopen() is a widely used function and has several modes in which it can operate, depending on whether you want to read or write to a file, and what you want to do with data already in that file. This section lists those modes and what each does.

 

One.N(UDS)

Leave a comment

Chuong XXI : Một số thao tác với file

Một số thao tác với file

 

Làm việc với hệ thống file trên web server là một việc không mấy khó khăn trong PHP. Bài hôm nay sẽ đề cập đến Một số thao tác với file trong PHP.

1. Mở file

Để mở file trong PHP, ta sử dụng hàm fopen. Hàm này nhận 2 đối số: tên file và chế độ. Cách sử dụng như sau:

PHP Code:

$handle = fopen(filename, mode);

Filename là một xâu cho thấy đường dẫn tới file cần mở. Ví dụ: ‘/home/httpd/webapp/logs/errorlog.log’

Mode chỉ ra cách thức ta muốn mở file. Sau đây là các giá trị có thể có của mode:

r File mở ở trạng thái chỉ đọc. Con trỏ file đặt ở đầu file.
r+ File mở ở trạng thái cả đọc và ghi. Con trỏ file đặt ở đầu file.
w File mở ở trạng thái chỉ ghi. Nếu file ko tồn tại, nó sẽ được tạo. Nếu file tồn tại, nội dung sẽ bị xóa. Con trỏ file đặt ở đầu file.
w+ File mở ở trạng thái cả đọc và ghi. Nếu file tồn tại, nội dung sẽ bị xóa. Nếu ko tồn tại, file sẽ được tạo. Con trỏ file đặt ở đầu file.
a File mở ở trạng thái ghi thêm. Con trỏ file đặt ở cuối file.
a+ File mở ở trạng thái đọc và ghi thêm. Con trỏ file đặt ở cuối file.
x File sẽ được tạo ở trạng thái chỉ ghi. Nếu file tồn tại, hàm trả giá trị FALSE. Nếu file chưa có, hiển nhiên nó sẽ được tạo.
x+ File sẽ được tạo ở trạng thái cả đọc và ghi. Nếu file tồn tại, hàm trả giá trị FALSE. Nếu file chưa có, hiển nhiên nó sẽ được tạo.

2. Mở 1 file “từ xa” (remote file)

Để mở 1 file ko nằm trong máy chủ local, ta có thể sử dụng hàm fopen như bình thường, chỉ khác filename là địa chỉ của file cần mở. Ví dụ như sau:

PHP Code:

$handle = fopen(‘http://fileserver/userdata.csv&#8217;, ‘r’);

3. Đóng file

Sau khi hoàn tất các lệnh với file, bạn cần phải đóng file lại để báo cho PHP biết mọi việc đã kết thúc. Nó đảm bảo rằng nội dung file đã được ghi xuống một cách đầy đủ. Ta chỉ việc dùng hàm fclose:

PHP Code:

fclose($file);

4. Đọc file

Bạn có thể dùng một số hàm khác nhau để đọc file.

Hàm fgets đọc một dòng trong file text và trả lại kết quả là dòng đó.
Hàm fgetc đọc một ký tự duy nhất và trả lại kết quả là ký tự đó.
Hàm fread đọc dữ liệu nhị phân và trả lại giá trị vào một buffer.

Để kiểm tra xem đã hết file hay chưa, ta sử dụng feof. Hàm này trả về giá trị TRUE nếu đã hết file, FALSE nếu vẫn chưa hết. Cần nhớ, chúng ta phải quan tâm đến vị trí của con trỏ file. Con trỏ file có thể ở vị trí bắt đầu file (0), hoặc ở cuối file, hoặc ở chỗ nào đó trong file.

Giờ ta xét ví dụ sau:

PHP Code:

function read_text_file($in_filename) {
$file = fopen($in_filename, ‘r’);

$output = array();

while (!feof($file)) {
$buf = fgets($file);
$output[] = $buf;
}

fclose($file);

return $output;
}

Bạn có thể đoán được: Hàm read_text_file() trên đây nhận vào một đối số là tên file, sau đó trả về một mảng $output chứa nội dung file, mỗi phần tử trong mảng là 1 dòng. Cụ thể:

Hàm fopen() ban đầu sẽ mở file ở chế độ chỉ đọc.

Hàm $output được khởi tạo là rỗng.

Chừng nào vẫn còn chưa hết file, ta lần lượt dùng fgets() đọc từng dòng trong file và đưa vào biến $buf. Sau đó gán $buf cho 1 phần tử của mảng $output.

Cuối cùng, ta đóng file đó lại và trả về mảng $output.

Cũng còn một cách khác để đọc file, đó là sử dụng hàm file_get_contents. Khi sử dụng hàm này, toàn bộ nội dung file sẽ được trả về trong một xâu duy nhất. Rất tiện lợi, và bạn ko cần phải dùng đến hàm fopen hay fclose. Cứ để PHP tự lo lấy!

5. Ghi file

Khi làm việc với file text, ta ghi file bằng hàm fwrite như sau:

PHP Code:

$fruit = array( ‘apple’, ‘orange’, ‘banana’, ‘peach’);
$file = fopen(‘fruity.txt’, ‘w’);

foreach ($fruit as $string) {
$result = fwrite($file, $string);
}

fclose($file);

Cực kỳ đơn giản phải ko bạn? Đoạn code trên mở file dưới dạng chỉ ghi, sau đó lần lượt duyệt qua các phần từ của mảng $fruit và ghi chúng vào file.

Tuy vậy, khi làm việc với file nhị phân, chúng ta cần bổ sung thêm một đối số cho hàm fwrite. Như ví dụ sau đây:

PHP Code:

$binary_data = get_image_bytes();
$file = fopen(‘imagedata.jpg’, ‘w’);

$result = @fwrite($file, $binary_data, mb_strlen($binary_data, ’8bit’));

fclose($file);

Đối số thứ 3, ở trong ví dụ trên là mb_strlen($binary_data, ’8bit’) sẽ xác định một cách chính xác số lượng byte ghi vào file. Nếu ko có giá trị này, ta sẽ gặp những kết quả ko thể dự đoán trước.

Vậy là sau bài này chúng ta đã biết thêm một chút về Một số thao tác khi làm việc với file trong PHP, bao gồm Mở, ĐÓng, Đọc và Ghi file. Bài tiếp theo sẽ đi vào nghiên cứu Permission của file cũng như một số vấn đề quan trọng khác.

identical(UDS)

 

Leave a comment

Chuong XX : Tương tác với server bằng form

Tương tác với server bằng form

 

Việc tương tác với server bằng form có lẽ là một trong những công việc mà các bạn rất hay gặp khi lập trình web. Hãy nghĩ đơn giản, dưới góc độ một user trong UDS, bạn đã phải tương tác với bao nhiêu là form: form register, form login, form post bài nhanh – post bài advance, form để report cho mod… Nhiều quá hóa… chóng mặt

Các form đó đều có điểm chung: Đều được viết bằng HTML. Hãy cùng nhắc lại đôi chút về cách tạo form với HTML:

Trước hết, bạn hãy dành 30 giây trong quỹ thời gian “ít ỏi” của mình để ngẫm lại: HTML có cấu trúc như thế nào?

Nói một cách ngắn gọn, một file HTML có cấu tạo như sau:

HTML Code:

<html>

<head>

<title><!– Tiêu đề –></title>

</head>

<body>

<!– Nội dung –>

</body>

</html>

Form trong HTML được đặt trong phần <body></body>. Ví dụ như sau:

HTML Code:

<form action=”process.php” method=”GET”>

Tên: <input type=”text” name=”name” /><br />

Tuổi: <input type=”text” name=”age” /><br />

<input type=”submit” value=”Submit!” />

</form>

Đoạn code HTML trên có tác dụng gì? Rất đơn giản, nó giúp tạo ra 1 form với 2 ô để nhập dữ liệu: Tên và tuổi. Kèm theo đó là 1 nút lệnh mang chữ Submit. Rất giản dị và ko có gì khó hiểu ở đây cả.

À, có 1 điều này cần giải thích: Ở dòng đầu tiên của đoạn code, thẻ form có 2 thuộc tính: action và method. Hai thuộc tính này có mục đích gì?

1. action=”process.php” nghĩa là sau khi bấm submit, dữ liệu sẽ được chuyển qua file process.php nằm cùng thư mục với file HTML này
2. method=”GET” nghĩa là phương thức truyền dữ liệu sẽ là GET.

Vậy, bạn đã biết dữ liệu sẽ được chuyển qua file process.php, mà hiển nhiên file process.php này chưa tồn tại, nên một điều rất tự nhiên là ta sẽ tạo file process.php với nội dung sau:

PHP Code:

<?php
$name = $_GET["name"];
$age = $_GET["age"];
echo “Tên bạn: $name”;
echo “Tuổi của bạn: $age”;
?>
Hai dòng cuối của ví dụ trên có lẽ chẳng có j` để bàn. Chỉ đơn giản là echo 2 biến $name và $age ra màn hình. Vấn đề nằm trong 2 dòng đầu.

Ta lấy dòng thứ 1 để mổ xẻ: $name = $_GET["name"]; Ở đây ai cũng biết giá trị của $name được gán từ $_GET["name"]. Vậy là chỉ còn duy nhất 1 điều cần thắc mắc: $_GET là gì?

$_GET là mảng để chứa các giá trị được chuyển từ form sang. Ở đây $_GET gồm 2 phần tử: $_GET["name"] và $_GET["age"].

Mọi vấn đề đến đây được giải quyết.

Giờ ta thử xét form ở Ví dụ ban đầu. Bạn hãy làm một phép thay đổi nhỏ: Đổi method=”GET” bằng method=”POST”.

Khi đó hiển nhiên process.php sẽ ko hoạt động

Nếu suy diễn một cách educated, bạn sẽ ngay lập tức sửa sai bằng cách thay đổi $_GET bằng $_POST. Kết quả? Đúng goài

Đến đây ta có thể sung sướng rút ra kết luận: Để nhận biến từ form chuyển sang, có thể sử dụng mảng $_GET hoặc $_POST, tùy vào phương thức truyền dữ liệu của form.

Bài học kết thúc ở đây được rồi nhỉ?

Chưa đâu bạn ạ. Còn một điều chưa nói đến: Sự khác nhau giữa $_GET và $_POST là j`? Hay đúng hơn, sự khác nhau giữ method GET và POST là gì?

Nói đến GET và POST, trước hết ta sẽ nói đến HTTP Request.

Một HTTP Request được gửi tới server có định dạng như sau:

Code:

<request-line>

<headers>

<blank line>

[<request-body>]

Một HTTP Request được gửi tới trang web www.abc.com từ trình duyệt Firefox sẽ tương tự như ví dụ sau:

Code:

GET / HTTP/1.1

Host: http://www.abc.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)

Gecko/20050225 Firefox/1.0.1

Connection: Keep-Alive

Tương tự, một Request gửi đến trang www.abc.com/def sẽ có dạng như sau:

Code:

GET /def/ HTTP/1.1

Host: http://www.abc.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)

Gecko/20050225 Firefox/1.0.1

Connection: Keep-Alive

Như các bạn có thể thấy, 2 ví dụ trên đều dùng phương thức GET để request dữ liệu.

Giờ hãy tưởng tượng, sau khi điền vào form 1 giá trị name là admin, age là 20, bạn bấm nút submit để gửi dữ liệu đến file process.php.

Trên thanh address sẽ hiện ra url: process.php?name=admin&age=20

Nếu xem xét một cách kỹ lưỡng HTTP Request, ta sẽ thấy nó như sau:

Code:

GET /process.php?name=admin&age=20 HTTP/1.1

Host: http://www.abc.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)

Gecko/20050225 Firefox/1.0.1

Connection: Keep-Alive

Tóm lại, khi dùng phương thức GET, trình duyệt sẽ gửi Request tới server với các tham số đặt trong dòng đầu tiên (request-line).

Còn với phương thức POST thì sao? Thay nằm trong request-line, những tham số này được đặt trong phần request-body.

Ví dụ ta giữ nguyên form trên, chỉ thay method=”GET” bằng method=”POST” và bấm Submit. Khi đó đây sẽ là HTTP Request “behind the scene”:

Code:

POST / HTTP/1.1

Host: http://www.abc.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)

Gecko/20050225 Firefox/1.0.1

Content-Type: application/x-www-form-urlencoded

Content-Length: 40

Connection: Keep-Alive

 

name=admin&age=20

Có thể dễ dàng thấy rằng, ngoài việc thêm một số dòng vào phần header:

Code:

Content-Type: application/x-www-form-urlencoded

Content-Length: 40

Connection: Keep-Alive

thì phương thức POST đã “cất” các tham số của mình trong phần request-body. Điều này hiển nhiên khác hẳn phương thức GET.

Bài học hôm nay chính thức được kết thúc ở đây <:-P

(và tớ cũng đi xem phim smallville tiếp đây )

 

identical(UDS)

 

Leave a comment

Chuong XIX : Cài đặt Web server – bước đầu tiên để học PHP!

Cài đặt Web server – bước đầu tiên để học PHP!

ZZZZZZZZZZZZZZZZZZZ

“Trường học” vừa khai giảng, trong lúc đợi bài học đầu tiên ra lò, cho phép tớ được “múa rìu qua mắt thợ cái”!

Như bác ngocha85 đã nói, để học PHP và MySQL, một trong những thứ cần chuẩn bị là web server chạy trên PC của mình. Để cho nhanh chóng, theo tớ tốt nhất nên cài bộ XAMPP.

Câu hỏi 1: XAMPP là gì?

Trả lời: XAMPP giống với WAMP, nghĩa là người mới học ko cần phải biết cách cài đặt riêng lẻ từng thành phần như Apache, PHP và MySQL. Chỉ cần download một gói về là xong.

Các tính năng có trong XAMPP:

1. Apache 2 => server
2. PHP 5 => ngôn ngữ lập trình
3. MySQL => cơ sở dữ liệu
4. Webalizer => quản lý statistic của site
5. Mercury => giả lập gửi email
6. FileZilla => giả lập FTP server
7. Rất nhiều tính năng chuyên sâu khác…

Câu hỏi 2: Tại sao ko dùng WAMP?

Trả lời: Vì cái này tớ chưa dùng bao giờ + Cái này bác ngocha85 chắc sẽ giới thiệu => tránh đụng hàng là hơn. Với lại cái XAMPP này theo tớ cũng rất hay, thậm chí ko cần cài đặt, chỉ cần copy và chạy.

Câu hỏi 3: Down XAMPP ở đâu?

Trả lời: Ở đây: http://www.apachefriends.org/en/xampp.html

Có đủ bộ XAMPP cho Windows, Linux, MacOS và cả Solaris, vì vậy mọi hệ điều hành nó đều chấp tất!

Câu hỏi 4: Cài đặt và sử dụng XAMPP như thế nào?

Trả lời: Sau khi tải về, bạn sẽ có 1 file zip. Giải nén file đó ra 1 thư mục bất kỳ, ví dụ C:\XAMPP. Để chạy web server, bạn kích hoạt file xampp_control.exe, bấm nút Start bên cạnh Apache và nút close để XAMPP Control tự động chuyển xuống system tray.

Ngoài ra, bạn có thể khởi động MySQL nếu dùng cơ sở dữ liệu, FileZilla nếu dùng FTP và Mercury nếu dùng email.

Để biết chắc web server đã chạy đúng, bạn mở trình duyệt web của mình, gõ http://localhost vào thanh Address, sau đó enter. Một trang thông báo sẽ hiện ra, cho biết quá trình “cài đặt” đã hoàn tất.

Câu hỏi 5: Làm thế nào để chạy các script viết bằng PHP?

Trả lời: Bạn cho script vào thư mục C:\XAMPP\htdocs\ sau đó gọi file đó qua URL http://localhost/script_name.php

Vậy là hết “bài chuẩn bị cho bài khởi động” của bác ngocha85 sẽ post trong vài ngày tới. Tèn tén ten!

 

 

CÀI ĐẶT APACHE WEB SERVER

Download Apache Web Server
Bạn có thể download Apache Web Server ở http://www.apache.org/dist/httpd/binaries/win32/. Bạn chú ý chọn phiên bản thích hợp với hệ điều hành mà bạn đang dùng.

Cài đặt Apache
Các bước chi tiết cài đặt Apache được minh hoạ như sau:

Bước 1:

Sau khi download Apache, bạn double click lên file .msi vừa download, một hộp thoại sẽ hiện ra như hình bên. Bạn click vào nút Next để sang bước 2.

Bước 2:

Bạn chọn phần “I accept the terms in the license agreement” và nhấn Next, tiếp tục nhấn Next một lần nữa để sang bước 3.

Bước 3:

bạn điền localhost vào phần Networl Domain và Server Name, điền admin@localhost vào phần Aministrator’s Email Address. Click Next để sang bước tiếp theo.

Bước 4:

Bạn chọn Custom và nhấn Next để tiếp tục.

Bước 5:

Bạn chọn thư mục để cài Apache (nhấn nút Change), mặc định là C:\Program Files\Apache Group. Nhấn Next, rồi nhấn Next lần nữa để sang bước 6.

Bước 6:

Apache sẽ bắt đầu cài đặt các file vào đĩa cứng của bạn. Bạn chỉ có việc là…ngồi chờ.

Bước 7:

Sau khi Apache đã cài đặt xong, bạn khởi động lại máy trước khi tiếp tục.

Chạy thử Apache: Sau khi khởi động, bạn chạy Apache từ Star Menu: Sau đó bạn khởi động IE và truy cập vào địa chỉ http://localhost, nếu bạn nhận được màn hình đón chào của Apache thì có nghĩa là bạn đã cài đặt t hành công Apache.

Cấu hình Apache
Mặc định Apache sẽ đặt trang web của bạn ở C:\Program Files\Apache Group\htdocs, tuy nhiên bạn có thể cấu hình để sử dụng thư mục khác (tôi dùng thư mục C:\www).

Trước tiên bạn tạo thư mục www trong đĩa C: và tạo thêm thư mục cgi-bin ở trong thư mục www vừa tạo.
Tiếp theo, bạn mở file C:\Program Files\Apache Group\conf\httpd.conf bằng một chương trình text editor nào đó.
Bạn tìm đến dòng bắt đầu bằng DocumentRoot và sửa lại giá trị của DocumentRoot từ C:\Program Files\Apache Group\htdocs thành C:\www, và tìm sửa dòng <Directory “C:/Program Files/Apache Group/htdocs”> thành <Directory “C:/www”>.
Tiếp them bạn tìm dòng bắt đầu bằng ScriptAlias /cgi-bin/ và sửa lại giá trị của cgi-bin từ C:/Program Files/Apache Group/htdocs/cgi-bin thành c:/www/cgi-bin.
Và cuối cùng bạn tìm dòng <Directory “C:/Program Files/Apache Group/htdocs/cgi-bin”> và sửa lại thành <Directory “C:/www/cgi-bin”>. Bạn sẽ đặt các file Perl-CGI của bạn ở trong thư mục này.
Lưu file httpd.conf, thoát và khởi động lại Apache.

Nguồn: DDTH

 

indentical(UDS)

Leave a comment

Chuong XVIII : Upload File Lên Server

Upload File Lên Server

 

TẠO FORM ĐỂ UPLOAD FILE

Form để upload file cần thoã mãn các điều kiện sau:

* method là POST
* enctype là multipart/form-data

Mã HTML của form sẽ từa tựa như sau:

<form method=”POST” enctype=”multipart/form-data” action=”process_upload.php”>
<input type=”hidden” name=”MAX_FILE_SIZE” value=”30000″>
<input type=”file” name=”file_upload” size=”20″>
<input type=”submit” value=”Upload”>
</form>

Đoạn code trên sẽ tạo 1 form với 1 nút Browse… để ban chọn file cần upload, và 1 nút Upload để bạn submit form. Form sẽ được submit tới file process_upload.php nằm cùng thư mục với file chứa form.

Một số browser support MAX_FILE_SIZE sẽ kiểm tra dung lượng file trước khi form được submit, tuy nhiên không phải browser nào cũng vậy. Cho nên bạn đừng nên tin tưởng tuyệt đối vào server! Ở ví dụ trên, nếu browser hỗ trợ, nhưng file có dung lượng lớn hơn 30000 byte sẽ được browser thông báo lỗi khi submit form.

XỬ LÝ DỮ LIỆU ĐƯỢC SUBMIT LÊN SERVER

Bây giờ ta hãy xem xét tới phần xử lý dữ liệu được submit lên server trong file process_upload.php. PHP lưu thông tin về file được upload lên server trong biến global $_FILES. Với form ở ví dụ trên, PHP sẽ truyền cho script process_upload.php các thông tin sau:

* $_FILES['file_upload']['name']: tên file gốc trên máy client. Tuỳ vào browser, tên file có thể được truyền lên server ở dạng C:\folder\filename.ext hoặc chỉ là filename.ext. Chương trình phải tự kiểm tra và trích ra tên file nếu cần thiết.
* $_FILES['file_upload']['type']: kiểu của file, được lưu ở dạng MINE (Ví dụ: image/gif, audio/wav).
* $_FILES['file_upload']['size']: dung lượng của file tính theo byte.
* $_FILES['file_upload']['tmp_name']: sau khi upload, server sẽ lưu file vào một file tạm trên server, biến này cho ta biết đường dẫn và tên của file tạm đó. Chương trình sẽ đọc file tạm này để lấy nội dung của file được upload.
* $_FILES['file_upload']['error']: mã lỗi, chương trình nên kiểm tra biến này để bảo đảm rằng quá trình upload không xảy ra lỗi.
o UPLOAD_ERR_OK ( = 0 ): không có lỗi, quá trình upload thành công.
o UPLOAD_ERR_INI_SIZE ( = 1 ): dung lượng file upload vượt quá giới hạn được chỉ định trong file php.ini.
o UPLOAD_ERR_FORM_SIZE ( = 2 ): dung lượng file upload vượt quá giới hạn được chỉnh định bởi MAX_FILE_SIZE.
o UPLOAD_ERR_PARTIAL ( = 3 ): file chỉ được upload 1 phần (có thể là do lỗi đường truyền trong quá trình upload).
o UPLOAD_ERR_NO_FILE ( = 4 ): không có file nào được upload (có thể là file ở client không tồn tại).

Khi đã có toàn bộ các thông tin cần thiết, xử lý file như thế nào là quyến định của bạn. Bạn có thể đọc nội dung của file và lưu vào database, hoặc di chuyển file và lưu vào thư mục upload của bạn. Sau đây là 1 ví dụ của file process_upload.php.

Đầu tiên, kiểm tra xem tác vụ có phải là upload hay không:

if ( $_SERVER["REQUEST_METHOD"] != “POST” ) {
//thông báo lỗi không phải là method POST
//và thoát
exit(-1);
} //end if

Tiếp theo kiểm tra xem quá trình upload có lỗi gì không:

if ( !isset($_FILES["file_upload"]["error"] ||
$_FILES["file_upload"]["error"] != 0 ) {
//thông báo lỗi dựa vào giá trị của $_FILES["file_upload"]["error"]
//và thoát
exit(-1);
} //end if

//ta cũng có thể kiểm tra xem dung lượng file có vượt quá giới hạn
//của chương trình hay không
if ( $_FILES["file_upload"]["size"] > $MAX_FILE_SIZE ) {
//thông báo lỗi
//và thoát
exit(-1);
}

Tách tên file từ client:

$temp = preg_split(‘/[\/\\\\]+/’, $_FILES["file_upload"]["name"]);
$filename = $temp[count($temp)-1];

//ta cũng có thể kiểm tra phần mở rộng của file nếu cần thiết
if ( !preg_match(‘/\.(gif|jpg)$/i’, $filename ) {
//thông báo lỗi file upload không phải là dạng GIF hoặc JPG
//và thoát
exit(-1);
} //end if

Và cuối cùng, lưu file được upload vào nơi cần thiết:

$upload_dir = “/home/nbthanh/public_html/uploads/”;
$upload_file = $uploaddir . $filename;
if ( move_uploaded_file($_FILES["file_upload"]["tmp_name"], $upload_file) ) {
//file đã được upload và copy sang thư mục lưu trữ thành công
} else {
//có lỗi xảy ra
} //end if

CÁC HÀM PHP ĐƯỢC DÙNG TRONG VÍ DỤ

* exit: dừng/thoát chương trình ngay lập tức.
* isset: kiểm tra xem biến có tồn tại hay không. Trong ví dụ của bài viết, ta dùng hàm isset để kiểm tra xem biến $_FILES["file_upload"]["error"] có tồn tại hay không.
* preg_split: tách một chuỗi thành từng phần nhỏ theo regular expression. Trong ví dụ của bài viết, ta dùng hàm này để tách tên file cùng đường dẫn ra thành từng phần nhỏ (phân cách nhau bằng ký tự \ hoặc /, ta không biết chắc được client là Windows hay Linux nên ta tách theo trường hợp tổng quát). Sau khi tách, phần tử cuối cùng sẽ là tên file.
Một cách khác để lấy tên file là dùng hàm basename. Tuy nhiên sử dụng hàm này sẽ có một số vấn đề nảy sinh, bạn tham khảo thêm ở đây: http://www.php.net/manual/en/function.basename.php.
* count: đếm số lượng phần tử trong mảng. $a[count($a)-1] sẽ truy cập tới phần tử cuối cùng của mảng $a.
* preg_match: sử dụng regular expression để tìm xem chuỗi con có xuất hiện trong chuỗi mẹ hay không. Trong ví dụ của bài viết, ta dùng hàm này để kiểm tra xem tên của của có được kết thúc bằng .gif hoặc .jpg hay không.
* move_uploaded_file: di chuyển file được upload từ client đến 1 thư mục khác trên server.

TÀI LIỆU THAM KHẢO

* PHP Manual: http://www.php.net/manual/en/index.php
o Regular Expression Functions (Perl-Compatible): http://www.php.net/manual/en/ref.pcre.php
o Handling file uploads: http://www.php.net/manual/en/features.file-upload.php
* Từ Google: từ khoá php tutorial upload file

Source from DDTH

 

Leave a comment

Chuong XVII : Cú pháp PHP

Cú pháp PHP

 

Bạn không thể xem được mã nguồn php bằng cách chọn “View Source” trên trình duyệt – Bạn chỉ xem được những gì xuất ra từ file php, đó là mã html. Bởi vì các kịch bản (scripts) được thực hiện trên server trước khi kết quả được trả lại cho trình duyệt.

Cú pháp php cơ bản

Một file php thường bao gồm các thẻ html, giống như một file html, và thêm một số mã kịch bản php.

Ví dụ, chúng ta sẽ hiển thị một dòng văn bản “Hello World” trên trình duyệt bằng một file php đơn giản sau:

<html>
<body>

<?php echo “Hello World”; ?>

</body>
</html>

Một khối kịch bản php bao giở cũng bắt đầu với <?php và kết thúc bằng ?>. Một khối kịch bản php được đặt ở bất kỳ đâu trên tài liệu.

Mỗi một dòng mã trong php phải kết thúc với dấu chấm phẩy.

Hai câu lệnh cơ bản để hiển thị văn bản với php, đó là echo và print. Trong ví dụ trên, chúng ta đã sử dụng câu lệnh echo để hiển thị văn bản “Hello World”.

Biến trong php

Tất cả các biến trong php đều bắt đầu bằng ký tự $. Các biến có thể là chuỗi (string), số (number) hoặc là mảng (array).

Ví dụ sau sẽ gán chuỗi “Hello World” cho biến $txt:

<html>
<body>

<?php

$txt=”Hello World”;
echo $txt;

?>

</body>
</html>

Để nối hai hay nhiều biến lại với nhau, sử dụng dấu chấm (.):

<html>
<body>

<?php

$txt1=”Hello World”;
$txt2=”1234″;
echo $txt1 . ” ” . $txt2 ;

?>

</body>
</html>

Kết quả hiển thị sẽ là: “Hello World 1234″.

Chú thích trong php

Trong php, chúng ta sử dụng // để tạo một dòng chú thích hoặc /* và */ để tạo một khối chú thích.

<html>
<body>

<?php

//Đây là một dòng chú thích

/* Đây là
một khối
chú thích */

?>

</body>
</html>

 

De_so(UDS)

Leave a comment

Chuong XVI : Hằng số và biến

Hằng số và biến

 

Do trong giáo trình của chúng ta còn khuyết mất phần này nên hôm nay xin phép viết 1 chút cho anh em nào còn chưa biết (mấy bác pro rồi nhìn đừng chê em :P)

Định nghĩa 1 hằng số

Các hằng số là những xâu kí tự được gán với 1 giá trị cố định. Các bạn định nghĩa 1 hằng số bằng cấu trúc

PHP Code:

<?php
define(‘name’, value);
?>
Khi thực hiện câu lệnh trên, sẽ có 1 hằng là name được tạo ra với giá trị là value. Việc đặt trên cho hằng số cũng giống như tên biến nhưng nó không bắt bắt đầu với kí tự $. Giá trị của hằng số chỉ có thẻ là: số nguyên (integer), số thực (float), xâu kí tự (string) hoặc boolean

PHP Code:

<?php
define(‘NORMAL_USER’, 0);
define(‘ADMIN_USER’, -1);
define(‘GUEST_USER’, 1);
define(‘GUEST_ACCT_NAME’, “Guest User”);
define(‘GUEST_CAN_LOGIN’, FALSE);
//
// default to guest permissions.
//
$user_name = GUEST_USER_NAME;
$user_can_login = GUEST_CAN_LOGIN;
?>
Sau khi 1 hằng số đã được định nghĩa, nó sẽ không thay đổi giá trị. Khi bạn cố gắng thay đổi giá trị của hằng số sẽ chỉ sinh ra 1 cảnh báo (warning) và không có gì thay đổi. Để xem 1 hằng số đã được định nghĩa hay chưa, sử dụng hàm defined, hàm này sẽ trả lại 1 giá trị boolean

PHP Code:

<?php
define(‘DATABASE_NAME’, “UDS”);
if (defined(‘DATABASE_NAME’)) {
echo DATABASE_NAME;
}
else {
echo “Nothing!”;
}
?>
Trong ví dụ trên, sẽ in ra màn hình xâu UDS là giá trị của hằng số DATABASE_NAME

Tầm hoạt động của biến (Về biến số đọc thêm bài 1)

Xét về tầm hoạt động của biến thì ta có 3 loại:
- Biến cục bộ: Biến bạn khai báo trong 1 hàm thì sẽ chỉ có giá trị bên trong hàm đó
- Biến toàn cục: Các biến bạn khai báo và sử dụng ở bên ngoài tất cả các hàm thì sẽ bị ẩn một cách mặc định trong các hàm. Tuy nhiên vẫn có thể sử dụng các biến toàn cục trong hàm bằng cách sau

PHP Code:

<?php
$s = “This is a global variable”;

function echoOut()    {
// Cách 1
global $s;
echo $s;
// Cách 2
echo $_GLOBALS['s'];
}
?>

Trong ví dụ trên thì màn hình sẽ in 2 lần xâu This is a global variable
- Biến “siêu” toàn cục: Có một vài biến có thể sử dụng ở mọi nơi trong đoạn mã, tuy nhiên hiện giờ coder không thể tự tạo ra các biến “siêu” toàn cục

Các biến đã được định nghĩa trước

PHP cung cấp cho chúng ta khá nhiều biến đưa thông tin về môi trường làm việc. Đa số đều là các mảng “siêu” toàn cục (có thể dùng mọi lúc, mọi nơi như đã nói ở trên)
- $GLOBALS: Mảng này chứa tất cả các biến toàn cục đang tồn tại
- $_SERVER: Mảng này chưa thông tin về ngữ cảnh mà đoạn mã đang chạy, như là tên server, tên file đang chạy, thông tin về kết nối, nhiều nhiều nữa (http://www.php.net/manual/en/reserve…riables.server)
- $_GET & $_POST: 2 mảng này chứa thông tin được gửi đến server qua các form HTML (tương ứng với phương thức GET và POST)
- $_SESSION & $_COOKIE: 2 mảng này chứa các thông tin về phiên làm việc và cookie của client
- $_REQUEST: Chứa thông tin của $_GET, $_POST$_SESSION
- $_ENV: Chứa các biến môi trường mà engine PHP đang chạy
- $php_errormsg: Chứa thông báo lỗi cuối cùng của PHP, nó chỉ tồn tại trong tầm hoạt động của đoạn mã sinh lỗi và nếu tùy chọn cấu hình TRack_errors được bật trong php.ini (theo mặc định thì không được bật)

 

Mr.paint(UDS)

Leave a comment

Chuong XV : Chuyển hướng người dùng với PHP

Chuyển hướng người dùng với PHP

 

Đôi lúc người dùng sẽ gửi 1 yêu cầu và ta muốn chuyển hướng họ đến 1 trang khác trước hoặc sau khi xử lý. Ví dụ đơn giản như: khi người dùng điền vào form đăng ký để tạo tài khoản mới, form gửi theo method post đến file process_new_user.php, đoạn mã này, sau khi chạy thành công sẽ chuyển người dùng (đã đăng ký) đến trang welcome_new_user.php như sơ đồ:

Nếu ta muốn xử lý gì đó rồi sau đó chuyển người dùng đến 1 trang mới trong PHP thì có thể sử dụng hàm header. Hàm này cho phép chúng ta gửi trở lại cho máy người dùng những “HTTP header” để thực hiện những yêu cầu khác nhau. Nó có thể sử dụng nhiều loại header khác nhau, nhưng ta sẽ sử dụng header Location để giải quyết nhu cầu của mình. Ví dụ, ta có file process_new_user.php như sau

PHP Code:

<?php
// Tao tai khoan moi voi thong tin trong $_POST
$processing_error = create_new_user_account(
$_POST['username'], $_POST['fullname'],
$_POST['password']);

// Chuyen huong den trang moi neu khong co loi gi xay ra
if ($processing_error === FALSE)
{
header(‘Location: http://’ . $_SERVER['HTTP_HOST']
. dirname($_SERVER['PHP_SELF'])
. ‘/welcome_new_user.php’);
}
else
{
// Co loi! Chuyen huong lai trang tao tai khoan
header(‘Location: http://’ . $_SERVER['HTTP_HOST']
. dirname($_SERVER['PHP_SELF'])
. ‘/create_account.php?err=’
. $processing_error);
}
?>
Phải chú ý 1 điều quan trọng khi sử dụng hàm header là không được in ra bất cứ kí tự nào trước khi sử dụng hàm, nếu không sẽ báo lỗi! Đoạn mã sau chắc chắn sẽ báo lỗi:

PHP Code:

<?php
header(‘Location: http://’ . $_SERVER['HTTP_HOST']
. ‘/welcome2.php’);
?>
Lý do báo lỗi vì có phần khoảng trắng trước <?php. Nếu 1 trong các file bạn include vào cũng có khoảng trắng nằm ngoài phần mã PHP thì cũng sẽ gặp lỗi tương tự

Có 1 cách khác là sử dụng header META. Với cách này, bạn có thể yêu cầu trình duyệt tự động chuyển hướng tới 1 trang mới:

PHP Code:

<?php
echo <<EOH
<meta http-equiv=’refresh’ content=’0; url=”http://$_SERVER%5B'HTTP_HOST'%5D/welcome2.php”/&gt;
EOH;
?>
Tuy nhiên cách này có 1 nhược điểm là nếu trình duyệt đã bị tắt chức năng này thì…. sẽ không có gì xảy ra hết! Nói chung, chúng ta sẽ thường sử dụng hàm header khi muốn chuyển hướng người dùng với PHP

End

 

Mr.paint(UDS)

Leave a comment

Follow

Get every new post delivered to your Inbox.