Bài giảng PHP (Hypertext Preprocessing) - Chương 3: Làm việc với Form trình bày các nội dung chính sau: Các biến Super Global, biến $_SERVER, lấy thông tin từ form, kết hợp mã HTML và PHP trong 1 trang, sử dụng Hidden field để lưu trạng thái, form Upload file,... Mời các bạn cùng tham khảo để nắm nội dung chi tiết.
Trang 1III 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
Trang 2III.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
$_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
Trang 3III.2 Biến $_SERVER
$_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
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
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
http://p24.corrosive
Trang 4III.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
}
?>
Trang 5III.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
Trang 6III.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"];
}
?>
<FORM method="POST" name="myForm">
<INPUT TYPE="TEXT" name="UserInput1">
<INPUT TYPE="SUBMIT" value="Submit" name="Submit"></FORM>
Trang 7III.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";
}
?>
<FORM method="POST" name="myForm"><INPUT TYPE="TEXT" name="UserInput1">
<INPUT TYPE="SUBMIT" value="Submit" name="Submit"></FORM>
Trang 8III.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
Trang 9III.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" ]);
?>
<FORM method="POST" name="AForm">
<INPUT TYPE="CHECKBOX" name="product[]“
value="Sony Ericson">Sony Ericson<br>
<INPUT TYPE="CHECKBOX" name="product[]“
value="Motorola">Motorola<br>
<INPUT TYPE="CHECKBOX" name="product[]“
value="Samsung">Samsung<br>
<INPUT TYPE="CHECKBOX" name="product[]“
value="Hang tau">Hang tau<br>
<INPUT TYPE="SUBMIT" name="Submit“
value="Submit"><br>
</FORM>
Trang 10III.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ụ)
Trang 11III.4 Kết hợp mã HTML và PHP trong 1 trang (2)
<?php
if ( is_array ($_REQUEST["product"]) &&
! array_search ("Motorola", $_REQUEST["product"] )) {
?>
<h1>Cam on ban da su dung san pham Motorola</h1>
<?php
} else {
?>
<FORM method="POST" name="AForm">
<INPUT TYPE="CHECKBOX" name="product[]“
value="Sony Ericson">Sony Ericson<br>
<INPUT TYPE="CHECKBOX" name="product[]“
value="Motorola">Motorola<br>
<INPUT TYPE="CHECKBOX" name="product[]“
value="Samsung">Samsung<br>
<INPUT TYPE="CHECKBOX" name="product[]“
value="Hang tau">Hang tau<br>
<INPUT TYPE="SUBMIT" name="Submit" value="Submit"><br>
</FORM>
<?php
}
?>
Trang 12III.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?<br>" ;
echo " $g_nSubmit <br>" ;
?>
<FORM method="POST" name="AForm">
<input type="hidden" name="nSubmit" value="<? echo
$g_nSubmit ; ?>">
<INPUT TYPE="SUBMIT" name="Submit"
value="Submit"><br>
</FORM>
Trang 13III.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)
Trang 14III.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?<br>" ; echo " $g_nSubmit <br>" ;
?>
<FORM method="POST" name="AForm">
<input type="hidden" name="nSubmit"
value="<? = $g_nSubmit ; ?>">
<input type=“submit" name="Submit"
value="Submit"><br>
</FORM>
Trang 15III.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="<? = $_SERVER [ 'PHP_SELF' ] ?>" method="post">
<p>
<input type="hidden" name="MAX_FILE_SIZE"
value="102400"/>
<input type="file" name="fupload" /><br/>
<input type="submit" value="upload!" />
</p>
</form>
Trang 16III.7 Form Upload file (2)
$ 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
Trang 17Constant Name
Valu
e Explanation
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
Trang 18III.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 );
}
}
?>
<form enctype="multipart/form-data" method="post">
<p>
<input type="hidden" name="MAX_FILE_SIZE" value="102400" />
<input type="file" name="fupload" /><br/>
<input type="submit" value="upload!" name="submit" />
</p>
</form>