430 likes | 577 Views
Phần 2 : PHP & MySQL. Nội dung. Form & Cơ chế truyền dữ liệu Kỹ thuật gửi tập tin Kết nối dữ liệu. Form và Form Field Cơ chế Truyền và Nhận dữ liệu giữa các trang web Truyền/Nhận qua Phương thức GET Truyền/Nhận qua Phương thức POST Một số ví dụ. Nội dung 5.
E N D
Nội dung • Form & Cơchếtruyềndữliệu • Kỹthuậtgửitập tin • Kếtnốidữliệu
Form và Form Field Cơ chế Truyền và Nhận dữ liệu giữa các trang web Truyền/Nhận qua Phương thức GET Truyền/Nhận qua Phương thức POST Một số ví dụ Nội dung 5 Form & cơchếtruYềndữliệu
Nội dung 5.1 Form & form field
Form và Form Field • Là container chứa các thành phần nhập liệu khác. <FORM NAME=“…” ACTION=“…” METHOD=“…”> <!-- các thành phần của Form --> </FORM> • Các thuộc tính của <FORM> • NAME: tên FORM • ACTION: chỉ định trang web nhận xử lý dữ liệu từ FORM này khi có sự kiện click của button SUBMIT. • METHOD: Xác định phương thức chuyển dữ liệu (POST,GET)
Các thành phần của Form • Gồm các loại Form Field sau: • Text field • Password field • Hidden Text field • Check box • Radio button • File Form Control • Submit Button, Reset Button, Generalized Button • Multiple-line text field • Label • Pull-down menu • Scrolled list • Field Set
Thẻ <input> <INPUTTYPE= “KiểuLoại”NAME= stringVALUE= string …………> • Type: • text / password/ radio/ checkbox • hidden • submit / button
Thẻ <select> <SELECT name=“??” multiple> <optgrouplabel=“string”> <option value=“”> XYZ </option> <option value=“” selected> 123</option> </optgroup> ……</SELECT> • Type: • Combobox • Listbox
Nội dung 5.2 Cơ chế truyền nhận dữ liệu
Cơ chế truyền nhận dữ liệu • Trang web nhập dữ liệu : • Sử dụng đối tượng <form> • Nhập liệu thông qua các formfield • Thực hiện việc truyền dữ liệu thông qua Submit • <FORM ACTION=“URL”METHOD=“GET/POST”> • … • <input type=“submit” value=“Xử lý”> • </FORM> • Trang web nhận dữ liệu (URL): Sử dụng các biến toàn cục của PHP • $_POST[“FieldName”] • $_GET[“FieldName”] • $_REQUEST[“FieldName”]
Cơ chế truyền nhận dữ liệu – Trang web nhập liệu timSach.php <html> <body> <h1>Tìm sách</h1> <formaction="xlTimSach.php" Method="GET" > Từ khóa : <input type="text" name="txtTukhoa"/> <inputtype="submit" value="Tìm"/> </form> </body> </html>
Cơ chế truyền nhận dữ liệu – Trang web nhập liệu xltimSach.php <html> <body> <?php $sTukhoa = $_REQUEST["txtTukhoa"]; ?> <h1>Tìm sách</h1> Từ khóa tìm sách là : <?php echo $sTukhoa; ?> <br /> Kết quả tìm là : </body> </html>
Cơ chế truyền nhận dữ liệu – Trang web nhập liệu xuly.php <html> <body> <form action="xuly.php" Method="GET" > Từ khóa : <input type="text" name="txtTukhoa"/> <input type="submit" value="Tìm"/> </form> <?php $sTukhoa = $_REQUEST["txtTukhoa"]; if (isset($sTukhoa)) { print "Từ khóa tìm sách là : $sTukhoa"; echo "<br>Kết quả tìm là : "; } ?> </body> </html>
Truyền/Nhận qua Phương thức GET • Tham số truyền đi qua địa chỉ URL • http://domain/pathfile?fieldname1=value1&fieldname2=value2 • Ví dụ: • http://localhost/xuly.php?txtTukhoa=PHPHost • Nhận dữ liệu thông qua biến toàn cục của PHP • $_GET[“FieldName”] • $_REQUEST[“FieldName”]
Phương thức GET – Ưu khuyết điểm • Khuyết điểm • Không thích hợp để truyền dữ liệu có tính bảo mật (password) • Dung lượng Dữ liệu truyền đi có giới hạn • URL submit bằng phương thức GET được lưu lại trên server • Ưu điểm • Người dùng có thể bookmark địa chỉ URL • Người dùng có thể Giả lập phương thức GET để truyền dữ liệu mà không cần thông qua FORM
Ví dụ File: GET.HTM <HTML> <HEAD> <TITLE>Input data</TITLE> </HEAD> <BODY> <IMG SRC=“images/N72.jpg”><br> <A HREF=‘chitiet.php?Ma=N72’>Xem chi tiết</A> </BODY> </HTML>
Ví dụ (tt) File: CHITIET.PHP <HTML> <HEAD> <TITLE>Input data</TITLE> </HEAD> <BODY> <?php echo "Ma dien thoai la " . $_GET["Ma"]; ?> </BODY> </HTML>
Truyền/Nhận qua Phương thức POST • Tham số truyền đi được ẩn bên trong FORM • Nhận dữ liệu thông qua biến toàn cục của PHP • $_POST[“FieldName”] • $_REQUEST[“FieldName”]
Phương thức POST – Ưu khuyết điểm • Ưu điểm • Bảo mật hơn phương thức GET • Không giới hạn dung lượng dữ liệu truyền đi • Khuyết điểm • Kết quả trang web trả về không thể bookmark • Có thể gây ra lỗi nếu người dùng muốn quay lại trang kết quả (nhấn nút Back hoặc Refresh) do bị expired • Dữ liệu có thể không truyền đi được do vấn đề về security
Cơ chế Upload File Thiết kế Form để Upload tập tin Mảng $_FILES và xử lý tập tin upload trên server Vấn đề quyền truy cập tập tin trên server Nội dung 6 Kỹ thuật gửi tập tin
Cơ chế Upload File Internet or Intranet Yêu cầu gọi trangxlupload.php Webserver file Website ABC PHP Temp Di chuyển / Sao chép Diskdriver
Thiết kế Form để Upload File • Thiết lập thuộc tính Form • Method = POST • Enctype = multipart/form-data uploadForm.php
Mảng $_FILES • Là một mảng 2 chiều, chứa tập hợp các thông tin liên quan đến các tập tin được upload lên web-server trong một lần gọi dịch vụ web. fileAssigment1 fileAssigment2 fileAssigment3 fileAssigment4 fileAssigment5 $_FILES[……]
Mảng $_FILES $_FILES[……] Lỗi phát sinh khi truyền tập tin lên server VD: 0, 1, 2 Tên file và phần mở rộng của file VD: 9912001.png Kích thước của file (tính theo Byte) VD: 4500 Đường dẫn lưu tạm tập tin upload trên server VD: c:\xamp\tmp\phpA897x0.tmp Kiểu của file theo chuẩn MINE VD: image/png
Xử lý tập tin upload trên server • Sau khi tập tin đã được truyền xong cho server : • Kiểm tra lỗi • Kiểm tra ràng buộc (kích thước, kiểu tập tin) • Đặt tên mới cho tập tin (nếu cần) • Sao chép / di chuyển tập tin về thư mục Website • Một số hàm booleanis_uploaded_file(string filePathname) booleancopy(string filePathname, stringdest) booleanmove_uploaded_file(string filePathname, stringdest)
uploadForm.php uploadManager.php
Vấn đề về quyền truy cập File Cấp quyền cho thư mục /upload PHP Warning: move_uploaded_file(upload/14.jpg) [function.move-uploaded-file]: failed to open stream: Permission denied in. Account IUSR_XXX • Lưu ý : • Chỉ cấp quyền ghi cho thư mục cần thiết • Không cấp quyền ghi cho thư mục WebRoot
Nội dung 7 Kết nối dữ liệu Mysql
Các bước thao tác CSDL trong PHP • Kết nối với CSDL • Xây dựng câu truy vấn dữ liệu • Thực thi câu truy vấn • Xử lí kết quả trả về từ câu truy vấn SELECT • Ngắt kết nối với CSDL
1. Tạo Kết nối CSDL • Kết nối MySQL và Chọn CSDL resourcemysql_connect(stringhost, stringLoginName, stringpassword) intmysql_select_db(stringdbName, resourceconnection) Connection Application Database <?php $connection = mysql_connect(“localhost",“root”,“root"); mysql_select_db(“TestDB", $connection); ?>
2. Xây dựng câu truy vấn (tt) $sUserName = “admin”; $sPassword = “123”; $strSQL ?
SELECT [Liệt kê thuộc tính] FROM [Danh sách các bảng] WHERE [ĐK Kết+lọc] Group by [Thuộc tính Gom nhóm] Order by [Thuộc tính sắp thứ tự] HAVING [ĐK trên nhóm]
3. Thực thi câu truy vấn 011010011 011010011 Connection resourcemysql_query(stringSQL_cmd, resourceconnection) Application Database Query <?php $strSQL = “INSERT INTO Users (UserName, Password) VALUES (‘admin',‘123‘)”; mysql_query($strSQL); ?> Insert Delete Update <?php $strSQL = “SELECT * FROM Users”; $result=mysql_query($strSQL); ?> Select
Hiển thị dữ liệu trả về Sử dụng hàm $row = mysql_fetch_array($result) Số lượng FIELD $num = mysql_num_fields($result); Truy cập đến từng FIELD echo $row[“UserName”]; Hoặc echo $row[0]; cursor 4. Xử lý kết quả trả về Ví dụ: CSDL BookstoreDB – Bảng T_Users Xuất records từ CSDL ra trang HTML
5. Ngắt kết nối dữ liệu boolmysql_close(resource connection) ; Tự động thực thi khi kết thúc mã lệnh nhờ cơ chế tự động thu rác (garbage collector) – PHP4,5
Một số vấn đề - MySQL & Font Unicode • Font UNICODE Encode Decode <?php mysql_query(“set names ‘utf-8’”); ?>
rowsPerPage Phân trang dữ liệu offset numRows maxPage pageNum
Phân trang dữ liệu • Trường hợp dữ liệu lấy về có quá nhiều mẫu tin (hiển thị bảng quá dài) • Chia dữ liệu hiển thị trên nhiều trang • Tổng số kết quả trả về:$numRows • Số kết quả hiển thị trên 1 trang:$rowsPerPage • Tổng số trang hiển thị: $maxPage $maxPage = ceil($numRows / $rowsPerPage); • Số thứ tự trang hiển thị:$pageNum = 1,2,… • Chỉ số kết quả bắt đầu trong trang thứ $pageNum: $offset = ($pageNum - 1) * $rowsPerPage;
Phân trang dữ liệu (tt) • Các bước thực hiện phân trang • Tính các thông số phân trang ($rowsPerPage, $pageNum, $offset) • Lấy thông tin cần hiển thị ($numRows) • Hiển thị thông tin của trang hiện tại ($offset, $rowsPerPage) • Tạo liên kết chỉ đến các trang ($maxPage $pageNum) • Xem Ví dụ (1) Select * From T_Book (2) Select * From T_Book LIMIT $offset, $rowsPerPage