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 |
Chia sẻ: thanhle95 | Lượt xem: 477 | 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"
/>