Bài giảng PHP - Chương 3: Làm việc với Form - Nguyễn Phú Quảng

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

pdf18 trang | Chia sẻ: thanhle95 | Lượt xem: 387 | Lượt tải: 1download
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" />
Tài liệu liên quan