Bài giảng Lập trình web - Chương 5: PHP và MySQL - Trần Công Án (Phần 2)
Tóm tắt Bài giảng Lập trình web - Chương 5: PHP và MySQL - Trần Công Án (Phần 2): ...từ CSDL. Script này sẽ được chèn vào chỗ giá trị của thuộc tính src. (get_img.php là PHP script, id là khóa hay tên của hình ảnh, dùng để truy vấn hình ảnh từ CSDL) TS. Trần Công Án (Khoa CNTT&TT) [CT428] Chương 5.2 – PHP Adv 15 [CT428] Chương 5.2 – PHP Adv Lưu hình ảnh vào CSDL Hiển thị hình...cho "$row[title]. $row[author] ($row[year])."; 34 35 if (mysql_num_rows($result) == 0) echo "No title found"; 36 return $paging; 37 } //search() 38 39 ?> 40 TS. Trần Công Án (Khoa CNTT&TT) [CT428] Chương 5.2 – PHP Adv 22 [CT428] Chương 5.2 – PHP Adv Kỹ thuật phân trang Ví dụ... – PHP Adv AJAX – Asynchronous JavaScript and XML Mô hình giao tiếp bất đồng bộ với AJAX Mô Hình Giao Tiếp Bất Đồng Bộ Với AJAX 1. Một sự kiện phát sinh nhu cầu cập nhật dữ liệu (hoặc giao diện), nhu cầu này sẽ được xử lý bởi một đoạn mã xử lý sự kiện. 2. Đoạn mã xử lý sự kiện sẽ tạo 1 đối tượ...
CNTT&TT) [CT428] Chương 5.2 – PHP Adv 13 Page 1 of 1/Applications/XAMPP/xamppfiles/htdocs/LTW428/connection.inc Saved: 3/18/14, 0:46:55 Printed For: Tran Cong An <?php 1 /* connection.inc */ 2 $hostname = "localhost"; 3 $username = "root"; 4 $passwor = ""; 5 $database = "ltweb" 6 ?>7 [CT428] Chương 5.2 – PHP Adv Lưu hình ảnh vào CSDL Mã PHP để chèn hình ảnh vào CSDL Lưu Hình Ảnh Vào CSDL – PHP Page 1 of 1/Applications/XAMPP/xamppfiles/hLTW428/php-adv/upload-img-db.phpSaved: 3/21/14, 11:26:44 Printed For: Tran Cong An <?php /* upload-db.php */ 1 require 'connect-select-db.php'; //connected to DBMS + select DB 2 if (isset($_FILES["img_file"]["name"]) && 3 getimagesize($_FILES['img_file']['tmp_name']) != false) 4 { 5 //CHECK CONTRAINTS if any ... 6 $image = file_get_contents($_FILES['img_file']['tmp_name']); 7 $image = addslashes($image); 8 $imgname = $_FILES["img_file"]["name"]; 9 10 mysql_query("INSERT INTO images VALUES ('$imgname', '$image')"); 11 or die("Cannot insert image into DB: " . mysql_error()); 12 13 echo "Uploaded image: "; 14 } 15 else 16 echo "No image has been uploaded"; 17 ?>18 TS. Trần Công Án (Khoa CNTT&TT) [CT428] Chương 5.2 – PHP Adv 14 [CT428] Chương 5.2 – PHP Adv Lưu hình ảnh vào CSDL Hiển thị hình ảnh được lưu trong CSDL Hiển Thị Hình Ảnh Được Lưu Trong CSDL I Đọc và hiển thị hình ảnh từ CSDL: I Gán giá trị cho thuộc tính src của thẻ là nội dung của ảnh. ⇒ Cần phải có 1 PHP script thực hiện việc đọc và trả về nội dung hình ảnh từ CSDL. Script này sẽ được chèn vào chỗ giá trị của thuộc tính src. (get_img.php là PHP script, id là khóa hay tên của hình ảnh, dùng để truy vấn hình ảnh từ CSDL) TS. Trần Công Án (Khoa CNTT&TT) [CT428] Chương 5.2 – PHP Adv 15 [CT428] Chương 5.2 – PHP Adv Lưu hình ảnh vào CSDL Hiển thị hình ảnh được lưu trong CSDL Đọc Và Trả Về Dữ Liệu Hình Ảnh Từ CSDLPage 1 of 1/Applications/XAMPP/xamppfiles/htdocs/LTW428/php-adv/get_img.phpSaved: 3/21/14, 11:34:31 Printed For: Tran Cong An <?php /* get_img.php */ 1 if (isset($_REQUEST['name'])) { 2 require "connect-select-db.php"; 3 4 $query = "SELECT * FROM images WHERE iname='$_REQUEST[name]'"; 5 $q_result = mysql_query($query) 6 or die("Data retrieval failed" . mysql_error()); 7 $row = mysql_fetch_array($q_result); 8 if ($row) { 9 header("Content-type: image/jpeg"); 10 echo $row['image']; 11 } 12 else 13 echo "Image '$_REQUEST[name]' is not found"; 14 } 15 else 16 echo "Image name is required" 17 ?>18 TS. Trần Công Án (Khoa CNTT&TT) [CT428] Chương 5.2 – PHP Adv 16 [CT428] Chương 5.2 – PHP Adv Lưu hình ảnh vào CSDL Hiển thị hình ảnh được lưu trong CSDL Đọc Và Trả Về Dữ Liệu Hình Ảnh Từ CSDL TS. Trần Công Án (Khoa CNTT&TT) [CT428] Chương 5.2 – PHP Adv 17 [CT428] Chương 5.2 – PHP Adv Kỹ thuật phân trang Các bước trong kỹ thuật phân trang Kỹ Thuật Phân Trang I Tổ chức phân trang hiển thị kết quả thường gồm các bước: 1. Tính tổng số mẩu tin cần hiển thị: $total_record. 2. Xác định số lượng mẫu tin tối đa được hiển thị trên trang: $reccord_per_page. 3. Lưu giữ trang hiện hành (dùng biến ẩn – hidden, hoặc truyền trực tiếp qua phương thức GET): $page 4. Truy vấn CSDL: dùng mệnh đề LIMIT start number_of_record để chỉ định số mẫu tin cần truy vấn. 5. Xác định liên kết đến Trang kế tiếp hoặc Trang trước đó. TS. Trần Công Án (Khoa CNTT&TT) [CT428] Chương 5.2 – PHP Adv 18 [CT428] Chương 5.2 – PHP Adv Kỹ thuật phân trang Ví dụ – Tìm kiếm sách với phân trang Ví Dụ – Tìm Kiếm Sách Với Phân Trang TS. Trần Công Án (Khoa CNTT&TT) [CT428] Chương 5.2 – PHP Adv 19 [CT428] Chương 5.2 – PHP Adv Kỹ thuật phân trang Ví dụ – Tìm kiếm sách với phân trang Tổ chức I Trang chính: I Hiển thị form để nhập từ khóa + Nút tìm kiếm I Gọi hàm search() để tìm sách, hiển thị kết quả tìm kiếm, và lấy thông tin phân trang. I Gọi hàm page_nav_links() để tạo l/kết đến Trang trước, Trang kế. I Các hàm PHP phụ trợ: I compute_paging(search_cond ): tính các thông số phân trang. I search(search_kw ): tìm kiếm, hiển thị kết quả, và trả về các thông số phân trang (có sử dụng hàm compute_paging()). I page_nav_links(paging_info, search_kw ): tạo các liên kết đến Trang trước, Trang kế. TS. Trần Công Án (Khoa CNTT&TT) [CT428] Chương 5.2 – PHP Adv 20 [CT428] Chương 5.2 – PHP Adv Kỹ thuật phân trang Ví dụ – Trang chính Tìm Kiếm Sách – Trang Chính Page 1 of 1/Applications/XAMPP/xamppfiles/h/php-adv/title-search-paging.phpSaved: 3/21/14, 22:23:18 Printed For: Tran Cong An 1 2 <input type="text" size="40" name="search_kw" 3 value="<? empty($_REQUEST['search_kw']) || 4 print $_REQUEST['search_kw'];?>"/> 5 6 7 Search result 8 <?php 9 if (isset($_REQUEST['search_kw'])) { 10 include 'title-search-paging-func.php'; 11 $paging = search($_REQUEST['search_kw']); 12 13 echo ""; //links to next/prior page 14 page_nav_links($paging, $_REQUEST['search_kw']); 15 } 16 ?> 17 18 19 TS. Trần Công Án (Khoa CNTT&TT) [CT428] Chương 5.2 – PHP Adv 21 [CT428] Chương 5.2 – PHP Adv Kỹ thuật phân trang Ví dụ – Hàm compute_paging() Tìm Kiếm Sách – Hàm compute_paging()Page 1 of 1/Applications/XAMPP/xamppfiles/hadv/title-search-paging-func.phpSaved: 3/21/14, 23:32:29 Printed For: Tran Cong An <?php /* title-search-paging-func.php */ 1 $record_ppage = 2; 2 function compute_paging($s_cond) { 3 global $record_ppage; 4 5 $c_query = "SELECT count(*) FROM classics " . 6 "WHERE title LIKE '%$s_cond%'"; 7 $c_result = mysql_query($c_query); 8 $row = mysql_fetch_array($c_result); 9 10 $p_total = ceil($row[0]/$record_ppage); 11 $page = (isset($_REQUEST["page"]))? $_REQUEST["page"] : 1; 12 $start = ($page - 1) * $record_ppage; 13 $p_next = ($page > 1)? $page - 1 : 0; 14 $p_pre = ($page < $p_total)? $page + 1 : 0; 15 16 return array("p_total"=>$p_total, "p_no"=>$page, "p_start"=>$start, 17 "p_prev"=>$p_next, "p_next"=>$p_pre, "total"=>$row[0]); 18 } //compute_paging() 19 20 21 function search($keyword) { 22 global $record_ppage; 23 require "connect-select-db.php"; 24 $s_cond = str_replace(" ", "%' OR title LIKE '%", trim($keyword)); 25 26 $paging = compute_paging($s_cond); 27 $query = "SELECT * FROM classics WHERE title LIKE '%$s_cond%'" . 28 " LIMIT $paging[p_start], $record_ppage"; 29 $result = mysql_query($query, $conn) 30 or die ("DB accessed failed: " . mysql_error()); 31 32 while ($row = mysql_fetch_array($result)) 33 echo "$row[title]. $row[author] ($row[year])."; 34 35 if (mysql_num_rows($result) == 0) echo "No title found"; 36 return $paging; 37 } //search() 38 39 ?> 40 TS. Trần Công Án (Khoa CNTT&TT) [CT428] Chương 5.2 – PHP Adv 22 [CT428] Chương 5.2 – PHP Adv Kỹ thuật phân trang Ví dụ – Hàm search() Tìm Kiếm Sách – Hàm search() Page 1 of 1/Applications/XAMPP/xamppfiles/hadv/title-search-paging-func.php Saved: 3/21/14, 23:32:29 Printed For: Tran Cong An <?php /* title-search-paging-func.php */ 1 $record_ppage = 2; 2 function compute_paging($s_cond) { 3 global $record_ppage; 4 5 $c_query = "SELECT count(*) FROM classics " . 6 "WHERE title LIKE '%$s_cond%'"; 7 $c_result = mysql_query($c_query); 8 $row = mysql_fetch_array($c_result); 9 10 $p_total = ceil($row[0]/$record_ppage); 11 $page = (isset($_REQUEST["page"]))? $_REQUEST["page"] : 1; 12 $start = ($page - 1) * $record_ppage; 13 $p_next = ($page > 1)? $page - 1 : 0; 14 $p_pre = ($page < $p_total)? $page + 1 : 0; 15 16 return array("p_total"=>$p_total, "p_no"=>$page, "p_start"=>$start, 17 "p_prev"=>$p_next, "p_next"=>$p_pre, "total"=>$row[0]); 18 } //compute_paging() 19 20 21 function search($keyword) { 22 global $record_ppage; 23 24 require "connect-select-db.php"; 25 $s_cond = str_replace(" ", "%' OR title LIKE '%", trim($keyword)); 26 27 $paging = compute_paging($s_cond); 28 $query = "SELECT * FROM classics WHERE title LIKE '%$s_cond%'" . 29 " LIMIT $paging[p_start], $record_ppage"; 30 $result = mysql_query($query, $conn) 31 or die ("DB accessed failed: " . mysql_error()); 32 33 while ($row = mysql_fetch_array($result)) 34 echo "$row[title]. $row[author] ($row[year])."; 35 36 if (mysql_num_rows($result) == 0) echo "No title found"; 37 return $paging; 38 } //search() 39 40 ?> 41TS. Trần Công Án (Khoa CNTT&TT) [CT428] Chương 5.2 – PHP Adv 23 [CT428] Chương 5.2 – PHP Adv Kỹ thuật phân trang Ví dụ – Hàm page_nav_links() Tìm Kiếm Sách – Hàm page_nav_links() Page 1 of 1/Applications/XAMPP/xamppfiles/hadv/title-search-paging-func.php Saved: 3/21/14, 22:23:12 Printed For: Tran Cong An <?php /* title-search-paging-func.php */ 1 2 //compute total pages, the start record to be retrieved 3 function compute_paging($s_cond) { 4 global $record_ppage; 5 6 $c_query = "SELECT count(*) FROM classics " . 7 "WHERE title LIKE '%$s_cond%'"; 8 $c_result = mysql_query($c_query); 9 $row = mysql_fetch_array($c_result); 10 11 $p_total = ceil($row[0]/$record_ppage); 12 $page = (isset($_REQUEST["page"]))? $_REQUEST["page"] : 1; 13 $start = ($page - 1) * $record_ppage; 14 $p_next = ($page > 1)? $page - 1 : 0; 15 $p_pre = ($page < $p_total)? $page + 1 : 0; 16 17 return array("p_total"=>$p_total, "p_no"=>$page, "p_start"=>$start, 18 "p_prev"=>$p_next, "p_next"=>$p_pre, "total"=>$row[0]); 19 } //compute_paging() 20 21 //generate page-navigation links 22 function page_nav_links($paging, $search_kw) { 23 echo "Page $paging[p_no]/$paging[p_total]:   "; 24 25 if ($paging['p_prev'] > 0) { //previous 26 echo "<a href='title-search-paging.php?search_kw=" . 27 $_REQUEST['search_kw'] . 28 "&page=" . $paging['p_prev'] ."'>Previous   "; 29 } 30 31 if ($paging['p_next'] > 0) { //next 32 echo "<a href='title-search-paging.php?search_kw=" . 33 $_REQUEST['search_kw'] . 34 "&page=" . $paging['p_next'] ."'>Next"; 35 } 36 } //page_nav_generation() 37 ?> 38 TS. Trần Công Án (Khoa CNTT&TT) [CT428] Chương 5.2 – PHP Adv 24 [CT428] Chương 5.2 – PHP Adv AJAX – Asynchronous JavaScript and XML AJAX – Asynchronous JavaScript And XML I Là một kỹ thuật giao tiếp bất đồng bộ giữa web client và web browser dựa trên JavaScript. I Đặc điểm: I Giao tiếp với web server ở chế độ background. I Cho phép cập nhật một phần trang web. I Người dùng không phải chờ đợi khi web browser và web server thực hiện giao tiếp. I Tránh được cách tiếp cận "click-wait-refresh" thông thường. TS. Trần Công Án (Khoa CNTT&TT) [CT428] Chương 5.2 – PHP Adv 25 [CT428] Chương 5.2 – PHP Adv AJAX – Asynchronous JavaScript and XML Giao tiếp web đồng bộ – Synchronous web communication Giao tiếp web đồng bộ I Người sử dụng phải chờ khi trang web đang load. TS. Trần Công Án (Khoa CNTT&TT) [CT428] Chương 5.2 – PHP Adv 26 [CT428] Chương 5.2 – PHP Adv AJAX – Asynchronous JavaScript and XML Giao tiếp web bất đồng bộ – Asynchronous web communication Giao tiếp web bất đồng bộ I Người sử dụng có thể tiếp tục tương tác với trang web khi trang web đang load dữ liệu, hỗ trợ bởi AJAX. TS. Trần Công Án (Khoa CNTT&TT) [CT428] Chương 5.2 – PHP Adv 27 [CT428] Chương 5.2 – PHP Adv AJAX – Asynchronous JavaScript and XML Mô hình giao tiếp bất đồng bộ với AJAX Mô Hình Giao Tiếp Bất Đồng Bộ Vói AJAX TS. Trần Công Án (Khoa CNTT&TT) [CT428] Chương 5.2 – PHP Adv 28 [CT428] Chương 5.2 – PHP Adv AJAX – Asynchronous JavaScript and XML Mô hình giao tiếp bất đồng bộ với AJAX Mô Hình Giao Tiếp Bất Đồng Bộ Với AJAX 1. Một sự kiện phát sinh nhu cầu cập nhật dữ liệu (hoặc giao diện), nhu cầu này sẽ được xử lý bởi một đoạn mã xử lý sự kiện. 2. Đoạn mã xử lý sự kiện sẽ tạo 1 đối tượng XMLHttpRequest. 3. XMLHttpRequest yêu cầu 1 trang web (PHP) từ server; đồng thời chỉ định 1 hàm callback để xử lý kết quả trả về sau này. 4. Trang web đáp ứng yêu cầu sử dụng dữ liệu nhận được từ client (thông qua đối tượng XMLHttpRequest) và trả về kết quả. 5. Đối tượng XMLHttpRequest phát sinh một sự kiện để kích hoạt hàm callback. 6. Hàm callback nhận kết quả trả về và thực hiện thay đổi trang web nếu có (thường sử dụng mô hình DOM). TS. Trần Công Án (Khoa CNTT&TT) [CT428] Chương 5.2 – PHP Adv 29 [CT428] Chương 5.2 – PHP Adv AJAX – Asynchronous JavaScript and XML Đối tượng XMLHttpRequest Đối Tượng XMLHttpRequest I Dùng để gửi yêu cầu cho server, chỉ định hàm callback và nhận kết quả trả về. I Hầu hết các trình duyệt đề hỗ trợ đối tượng XMLHttpRequest, riêng IE5 và IE6 dùng ActiveXObject. Page 1 of 1/Applications/XAMPP/xamppfiles/hcs/LTW428/php-adv/code-print.php Saved: 4/2/14, 0:52:40 Printed For: Tran Cong An 2 function createXHR() { 3 if (window.XMLHttpRequest) { 4 //AJAX for IE7+, FF, Chrome, Opera, Safari 5 return new XMLHttpRequest(); 6 } 7 else { //AJAX for IE6, IE5 8 return new ActiveXObject("Microsoft.XMLHTTP"); 9 } 10 } 11 12 TS. Trần Công Án (Khoa CNTT&TT) [CT428] Chương 5.2 – PHP Adv 30 [CT428] Chương 5.2 – PHP Adv AJAX – Asynchronous JavaScript and XML Ví Dụ Đơn Giản Ví Dụ Đơn Giản Page 1 of 1/Applications/XAMPP/xamppfiles/hs/LTW428/php-adv/simple-ajax.php Saved: 4/2/14, 1:19:36 Printed For: Tran Cong An 1 2 3 4 5 6 7 8 <input type="button" name="mybutton" value="Fire AJAX" 9 onclick="fireAJAX(myform.myname.value);"> 10 11 12 13 14 TS. Trần Công Án (Khoa CNTT&TT) [CT428] Chương 5.2 – PHP Adv 31 [CT428] Chương 5.2 – PHP Adv AJAX – Asynchronous JavaScript and XML Ví Dụ Đơn Giản Ví Dụ Đơn Giản Page 1 of 1/Applications/XAMPP/xamppfiles/hcs/LTW428/php-adv/simple-ajax.jsSaved: 4/2/14, 1:23:26 Printed For: Tran Cong An /* simple-ajax.js */ 1 function fireAJAX(name) { 2 var xmlhttp = createXHR(); 3 xmlhttp.onreadystatechange = function() { 4 if (xmlhttp.readyState==4 && xmlhttp.status==200) { 5 document.getElementById("msg").innerHTML = xmlhttp.responseText; 6 } 7 } 8 xmlhttp.open("GET", "hello-name.php?name=" + name, true); 9 xmlhttp.send(); 10 } 11 12 function createXHR() { 13 if (window.XMLHttpRequest) 14 return new XMLHttpRequest(); 15 else 16 return new ActiveXObject("Microsoft.XMLHTTP"); 17 }18 TS. Trần Công Án (Khoa CNTT&TT) [CT428] Chương 5.2 – PHP Adv 32 Page 1 of 1/Applications/XAMPP/xamppfiles/hcs/LTW428/php-adv/hello-name.php Saved: 4/2/14, 1:20:46 Printed For: Tran Cong An <?php /* hello-name.php */ 1 if (isset($_GET['name'])) { 2 echo "Hello ", $_GET['name'], ""; 3 } 4 ?>5 [CT428] Chương 5.2 – PHP Adv AJAX – Asynchronous JavaScript and XML Ví Dụ 2 – Tạo Dropdown List phụ thuộc nhau Dropdown List Phụ Thuộc Nhau – Mô Tả +--------+-------------+ | matinh | tentinh | +--------+-------------+ | 1 | Cần Thơ | | 2 | Sóc Trăng | | 3 | Bạc Liêu | +--------+-------------+ 3 rows in set (0.05 sec) mysql> select * from huyen; +---------+---------------+--------+ | mahuyen | tenhuyen | matinh | +---------+---------------+--------+ | 1 | Cờ Đỏ | 1 | | 2 | Ô Môn | 1 | | 3 | Châu Thành | 1 | | 4 | Long Phú | 2 | | 5 | Thạnh Trị | 2 | | 6 | Ngã Năm | 2 | | 7 | Trần Đề | 2 | | 8 | Vĩnh Châu | 3 | | 9 | Giá Rai | 3 | +---------+---------------+--------+ 9 rows in set (0.00 sec) mysql> +---------+---------------+--------+ | mahuyen | tenhuyen | matinh | +---------+---------------+--------+ | 1 | Cờ Đỏ | 1 | | 2 | Ô Môn | 1 | | 3 | Châu Thành | 1 | | 4 | Long Phú | 2 | | 5 | Thạnh Trị | 2 | | 6 | Ngã Năm | 2 | | 7 | Trần Đề | 2 | | 8 | Vĩnh Châu | 3 | | 9 | Giá Rai | 3 | +---------+---------------+--------+ 9 rows in set (0.00 sec) mysql> TS. Trần Công Án (Khoa CNTT&TT) [CT428] Chương 5.2 – PHP Adv 33 [CT428] Chương 5.2 – PHP Adv AJAX – Asynchronous JavaScript and XML Ví Dụ 2 – Tạo Dropdown List phụ thuộc nhau Dropdown List Phụ Thuộc Nhau Page 1 of 1/Applications/XAMPP/xamppfiles/hLTW428/php-adv/dropdown-ajax.phpSaved: 4/2/14, 3:22:57 Printed For: Tran Cong An 1 2 3 4 5 6 7 8 9 10 11 Chọn tỉnh 12 13 Chọn huyện 14 15 16 17 18 TS. Trần Công Án (Khoa CNTT&TT) [CT428] Chương 5.2 – PHP Adv 34 [CT428] Chương 5.2 – PHP Adv AJAX – Asynchronous JavaScript and XML Ví Dụ 2 – Tạo Dropdown List phụ thuộc nhau Dropdown List Phụ Thuộc Nhau Page 1 of 1/Applications/XAMPP/xamppfiles/hp-adv/dropdown-php-functions.php Saved: 4/2/14, 3:35:40 Printed For: Tran Cong An <?php /* dropdown-php-function.php */ 1 2 function gen_tinh_options() { 3 require_once "connect-select-db.php"; 4 5 $query = "SELECT * FROM tinh"; 6 $result = mysql_query($query) 7 or die("SELECT failed: " . mysql_error()); 8 9 echo ""; 10 while ($row = mysql_fetch_array($result)) { 11 echo "", $row['tentinh'], 12 ""; } 13 } 14 ?>15 TS. Trần Công Án (Khoa CNTT&TT) [CT428] Chương 5.2 – PHP Adv 35 [CT428] Chương 5.2 – PHP Adv AJAX – Asynchronous JavaScript and XML Ví Dụ 2 – Tạo Dropdown List phụ thuộc nhau Dropdown List Phụ Thuộc Nhau Page 1 of 1/Applications/XAMPP/xamppfiles/hp-adv/dropdown-ajax-functions.js Saved: 4/2/14, 3:49:19 Printed For: Tran Cong An /* dropdown-ajax-function.js */ 29 function chonTinh(matinh) { 30 if (window.XMLHttpRequest) 31 xmlhttp = new XMLHttpRequest(); 32 else 33 xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 34 35 xmlhttp.onreadystatechange = function() { 36 if (xmlhttp.readyState==4 && xmlhttp.status==200) { 37 refreshHuyen(f_profile.s_huyen, xmlhttp.responseText); 38 } 39 } 40 xmlhttp.open("GET", "get-huyen.php?matinh=" + matinh, true); 41 xmlhttp.send(); 42 }43 TS. Trần Công Án (Khoa CNTT&TT) [CT428] Chương 5.2 – PHP Adv 36 [CT428] Chương 5.2 – PHP Adv AJAX – Asynchronous JavaScript and XML Ví Dụ 2 – Tạo Dropdown List phụ thuộc nhau Dropdown List Phụ Thuộc Nhau Page 1 of 1/Applications/XAMPP/xamppfiles/hocs/LTW428/php-adv/get-huyen.php Saved: 4/2/14, 3:35:13 Printed For: Tran Cong An <?php /* get-huyen.php */ 1 2 if (isset($_GET['matinh'])) { 3 require_once "connect-select-db.php"; 4 $matinh = $_GET['matinh']; 5 6 $result = mysql_query("SELECT * FROM huyen WHERE matinh=$matinh") 7 or die("Retrieve data failed: " . mysql_error()); 8 9 while ($row = mysql_fetch_array($result)) { 10 echo "$row[mahuyen]&&$row[tenhuyen];;"; 11 } 12 } 13 14 ?>15 TS. Trần Công Án (Khoa CNTT&TT) [CT428] Chương 5.2 – PHP Adv 37 [CT428] Chương 5.2 – PHP Adv AJAX – Asynchronous JavaScript and XML Ví Dụ 2 – Tạo Dropdown List phụ thuộc nhau Dropdown List Phụ Thuộc Nhau Page 1 of 1/Applications/XAMPP/xamppfiles/hp-adv/dropdown-ajax-functions.jsSaved: 4/2/14, 3:49:19 Printed For: Tran Cong An /* dropdown-ajax-function.js */ 9 function refreshHuyen(selectHuyen, data) { 10 //data: maHuyen&&tenHuyen;;maHuyen&&tenHuyen;;... 11 //remove all items 12 var length = selectHuyen.options.length; 13 for (i=0; i<length; i++) 14 selectHuyen.remove(0); 15 16 //add new data 17 data = data.split(";;"); 18 for (i=0; i<data.length-1; i++) { 19 var huyen = document.createElement("option"); 20 var itemData = data[i].split("&&"); 21 huyen.value = itemData[0]; 22 huyen.text = itemData[1]; 23 selectHuyen.add(huyen); 24 } 25 } 26 TS. Trần Công Án (Khoa CNTT&TT) [CT428] Chương 5.2 – PHP Adv 38
File đính kèm:
- bai_giang_lap_trinh_web_chuong_5_php_va_mysql_tran_cong_an_p.pdf