III.3.3. Lấy thông tin của form bằng mảng do
người dùng định nghĩa
 Những cách lấy thông tin từ form đã nêu trên
cho phép chúng ta làm việc tốt với các control
đơn (có 1 giá trị)
 Đối với các control có nhiều giá trị như select
hay checkbox, nảy sinh vấn đề là làm sao
nhận được tất cả các control được lựa chọn
 Để giải quyết vấn đề này, đặt tên các control
với kết thúc là dấu ngoặc vuông [], khi đó dữ
liệu truyền từ form đến server sẽ là mảng
                
              
                                            
                                
            
                       
            
                 18 trang
18 trang | 
Chia sẻ: thanhle95 | Lượt xem: 640 | Lượt tải: 1 
              
            Bạn đang xem nội dung tài liệu Bài giảng PHP - Chương 3: Làm việc với Form - Nguyễn Phú Quảng, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
III. Làm việc với Form 
III.1. Các biến SuperGlobal 
III.2. Biến $_SERVER 
III.3. Lấy thông tin từ form 
III.4. Kết hợp mã HTML và PHP trong 1 trang 
III.5. Sử dụng Hidden field để lưu trạng thái 
III.6. Redirect 
III.7. Form Upload file 
III.1. Các biến SuperGlobal 
 Các biến global là các biến được khai báo ở mức ngoài cùng của PHP được 
sử dụng chung cho mọi module 
 Các biến SuperGlobal là các biến (mảng) được PHP tạo ra để lưu các thông 
tin cần thiết 
Array Description 
$_COOKIE Contains keys and values set as browser cookies 
$_ENV Contains keys and values set by the script's shell context 
$_FILES Contains information about uploaded files 
$_GET Contains keys and values submitted to the script using the HTTP get 
method 
$_POST Contains keys and values submitted to the script using the HTTP post 
method 
$_REQUEST A combined array containing values from the $_GET, $_POST, and 
$_COOKIES superglobal arrays 
$_SERVER Variables made available by the server 
$GLOBALS Contains all global variables associated with the current script 
III.2. Biến $_SERVER 
Variable Contains Example 
$_SERVER['PHP_SELF'] The current script. 
Suitable for use in 
links and form 
element action 
arguments. 
/phpbook/source/listing10.1.ph
p 
$_SERVER['HTTP_USER_AGEN
T'] 
The name and 
version of the client. 
Mozilla/4.6 –(X11; I;Linux2.2. 6-
15apmac ppc) 
$_SERVER['REMOTE_ADDR'] The IP address of 
the client. 
158.152.55.35 
$_SERVER['REQUEST_METHO
D'] 
Whether the request 
was GET or POST. 
POST 
$_SERVER['QUERY_STRING'] For GET requests, 
the encoded data 
sent appended to the 
URL. 
name=matt&address=unknown 
$_SERVER['REQUEST_URL'] The full address of 
the request, 
including query 
string. 
/phpbook/source/listing10.1.ph
p? name=matt 
$_SERVER['HTTP_REFERER'] The address of the 
page from which the 
request was made. 
III.2. Biến $_SERVER (2) 
Đoạn lệnh sau liệt kê tất cả các thông tin của biến 
$_SERVER 
<?php 
foreach ($_SERVER as $key=>$value) { 
 echo "[$key]=$value\n"; 
} 
?> 
III.3. Lấy thông tin từ form 
III.3.1. Lấy thông tin từ form bằng các mảng 
superglobal 
III.3.2. Import thông tin của form vào các biến 
global 
III.3.3. Lấy thông tin của form bằng mảng do 
người dùng định nghĩa 
III.3.1. Lấy thông tin từ form bằng các 
mảng superglobal 
Dữ liệu từ form được submit lên server thông qua các phương thức: 
get, post 
Để lấy được thông tin từ form, bạn có thể sử dụng các mảng 
superglobal tương ứng $_POST[tên_control], $_GET[tên_control], 
$_REQUEST[tên_control] (REQUEST có thể sử dụng cho cả POST và 
GET) 
<?php 
 var_dump($_POST["Submit"]); 
 var_dump($_GET["Submit"]); 
 var_dump($_REQUEST["Submit"]); 
 if ($_POST["Submit"]=="Submit") { 
 echo $_POST["UserInput1"]; 
 } 
?> 
III.3.2. Import thông tin của form vào 
các biến global 
Để thuận tiện cho người lập trình, PHP cung cấp hàm 
import_request_variables() cho phép đưa các tham số GET, 
POST và COOKIE vào thành các biến global 
Cú pháp 
bool import_request_variables(string types, [string 
prefix]) 
types: Chỉ ra loại thông tin nào được import, có thể kết hợp giữa các 
giá trị g, p, c (get, post, cookie) 
prefix: tiền tố cho tên biến 
<?php 
import_request_variables("gpc", "ui_"); 
echo "$ui_Submit\n"; 
if ($ui_Submit=="Submit") { 
 echo "$ui_UserInput1\n"; 
} 
?> 
<INPUT TYPE="TEXT" 
name="UserInput1"> 
III.3.3. Lấy thông tin của form bằng mảng do 
người dùng định nghĩa 
 Những cách lấy thông tin từ form đã nêu trên 
cho phép chúng ta làm việc tốt với các control 
đơn (có 1 giá trị) 
 Đối với các control có nhiều giá trị như select 
hay checkbox, nảy sinh vấn đề là làm sao 
nhận được tất cả các control được lựa chọn 
 Để giải quyết vấn đề này, đặt tên các control 
với kết thúc là dấu ngoặc vuông [], khi đó dữ 
liệu truyền từ form đến server sẽ là mảng 
III.3.3. Lấy thông tin của form bằng mảng do 
người dùng định nghĩa 
<?php 
 var_dump($_REQUEST["product"]); 
?> 
<INPUT TYPE="CHECKBOX" name="product[]“ 
 value="Sony Ericson">Sony Ericson 
<INPUT TYPE="CHECKBOX" name="product[]“ 
 value="Motorola">Motorola 
<INPUT TYPE="CHECKBOX" name="product[]“ 
 value="Samsung">Samsung 
<INPUT TYPE="CHECKBOX" name="product[]“ 
 value="Hang tau">Hang tau 
<INPUT TYPE="SUBMIT" name="Submit“ 
 value="Submit"> 
III.4. Kết hợp mã HTML và PHP trong 1 
trang 
 Đối với các trang PHP nhỏ, bạn thường muốn 
kết hợp form gửi thông tin với các đoạn script 
PHP xử lý thông tin. Điều này có thể dễ dàng 
thực hiện bằng cách để các kết hợp các cấu 
trúc điều khiển rẽ nhánh với các đoạn mã 
HTML. 
 Để đặt đoạn mã HTML vào trong cấu trúc rẽ 
nhánh, sử dụng kết hợp các khối lệnh PHP 
(xem ví dụ) 
III.4. Kết hợp mã HTML và PHP trong 1 
trang (2) 
<?php 
if ( is_array($_REQUEST["product"]) && 
 !array_search("Motorola", $_REQUEST["product"] )) { 
?> 
 Cam on ban da su dung san pham Motorola 
<?php 
} else { 
?> 
 <INPUT TYPE="CHECKBOX" name="product[]“ 
 value="Sony Ericson">Sony Ericson 
 <INPUT TYPE="CHECKBOX" name="product[]“ 
 value="Motorola">Motorola 
 <INPUT TYPE="CHECKBOX" name="product[]“ 
 value="Samsung">Samsung 
 <INPUT TYPE="CHECKBOX" name="product[]“ 
 value="Hang tau">Hang tau 
<?php 
} 
?> 
III.5. Sử dụng Hidden field để lưu trạng 
thái 
Để lưu thông tin chung của các form giữa các lần submit (ví dụ: Số 
lần submit), cách đơn giản nhất là sử dụng trường ẩn (hidden field) 
trong form 
<?php 
$g_nSubmit = $_REQUEST["nSubmit"]; 
if ($g_nSubmit==null) $g_nSubmit=0; else 
$g_nSubmit++; 
if ($g_nSubmit>3) echo "Submit gi ma nhieu 
the?"; 
echo "$g_nSubmit"; 
?> 
<input type="hidden" name="nSubmit" value="<?echo 
$g_nSubmit;?>"> 
<INPUT TYPE="SUBMIT" name="Submit" 
value="Submit"> 
III.6. Redirect 
 Rõ ràng là việc hardcode HTML cùng với sử dụng nhiều khối PHP 
xen lẫn HTML là không tốt. Một cách đơn giản và hiệu quả hơn là 
sử dụng Redirect để dẫn hướng người dùng đến các trang thích 
hợp (ví dụ: Trang đăng nhập nếu người dùng chưa đăng nhập, 
trang chúc mừng nếu người dùng đăng nhập thành công) 
 Để làm được việc này, trước hết ta tìm hiểu cơ chế làm việc giữa 
PHP script và client. Đầu tiên, để giao tiếp với client, PHP tự động 
gửi các thông tin header cho client. Tuy nhiên, bạn vẫn có thể tự 
gửi header. 
 Để dẫn hướng client đến trang khác, bạn chỉ cần đơn giản đổi 
header bằng hàm header(). Để sử dụng hàm header() bạn phải 
đảm bảo rằng cho có dữ liệu nào đã được gửi cho client (sử dụng 
hàm header_sent() để kiểm tra) 
III.6. Redirect (2) 
<?php 
$g_nSubmit = $_REQUEST["nSubmit"]; 
if ($g_nSubmit==null) $g_nSubmit=0; else 
$g_nSubmit++; 
if ($g_nSubmit>5) { 
 header("Location:ham.html"); 
 exit; 
} else 
if ($g_nSubmit>3) echo "Submit gi ma nhieu the?"; 
echo "$g_nSubmit"; 
?> 
<input type="hidden" name="nSubmit" 
value=""> 
<input type=“submit" name="Submit" 
value="Submit"> 
III.7. Form Upload file 
Người dùng có thể gửi các file (upload) lên server là một chức năng 
không thể thiếu đối với các ứng dụng Web-based 
Để form có thể upload file, bạn phải xác định form enctype: 
ENCTYPE="multipart/form-data” 
Với PHP, bạn có thể xác định kích thước lớn nhất của file upload bằng 
cách đặt thêm 1 hidden field có tên MAX_FILE_SIZE trước control file 
<form enctype="multipart/form-data" 
 action="" method="post"> 
<input type="hidden" name="MAX_FILE_SIZE" 
value="102400"/> 
III.7. Form Upload file (2) 
 Mảng $_FILE 
Element Contains Example 
$ FILES['fupload']['name'] Name of uploaded file test.gif 
$_FILES['fupload']['tmp_name'] Path to temporary file /tmp/phprDfZvN 
$_FILES['fupload']['size'] Size (in bytes) of uploaded 
file 
6835 
$_FILES['fupload']['error'] An error code 
corresponding to a PHP 
constant 
UPLOAD_ERR_FOR
M_SIZE 
$_FILES['fupload']['type'] MIME type of uploaded file 
(where given by client) 
image/gif 
Constant Name 
Valu
e Explanation 
UPLOAD_ERR_OK 0 No problem 
UPLOAD_ERR_INI_SIZE 1 File size exceeds php.ini limit set in 
upload_max_filesize 
UPLOAD_ERR_FORM_SI
ZE 
2 File size exceeds limit set in hidden 
element named MAX_FILE_SIZE 
UPLOAD_ERR_PARTIAL 3 File only partially uploaded 
UPLOAD_ERR_NO_FILE 4 File was not uploaded 
III.7. Form Upload file (3) 
<?php 
 if ($_REQUEST["submit"]=="upload!") { 
 echo $_FILES["fupload"]["error"], "\n"; 
 echo $_FILES["fupload"]["size"], "\n"; 
 echo $_FILES["fupload"]["name"], "\n"; 
 echo $_FILES["fupload"]["tmp_name"], "\n"; 
 if ($_FILES["fupload"]["error"]==0) { 
 $source = $_FILES["fupload"]["tmp_name"]; 
 $dest = $_FILES["fupload"]["name"]; 
 move_uploaded_file($source, $dest); 
 } 
 } 
?> 
<input type="hidden" name="MAX_FILE_SIZE" value="102400" 
/>