Sử dụng được trình duyệt Web.Sử dụng được lập trình ứng dụng Web với PHP.Làm việc được với Cookie và LDAP.Thao tác được với cơ sở dữ liệu MySQL và với Email.Truy vấn được cơ sở dữ liệu khác thông qua ADO.Xử lý được XML.Ở đây, chúng ta đã tạo ra một biến Cookie có tên ‘myCookie’, giá trị của nó là ‘this is myCookie’s value’.Hàm time() dùng để trả về thời điểm hiện tại, ngay khi nó được gọi. 6060 là thời gian 1 giờ đồng hồ (60 giây 60 phút). Vậy thời gian hiệu lực của biến Cookie ‘myCookie’ này là 1 giờ đồng hồ tính từ thời điểm nó được tạo.B3: Mở trình duyệt, nhập đường dẫn http:localhostbai4.php
Trang 1Tài liệu học tập Tích hợp Bài 4: Lập trình ứng dụng WEB với PHP
Thời gian: 34 giờ
*MỤC TIÊU BÀI HỌC:
Sau khi học xong bài này, người học có:
a Kiến thức:
- Xác định được các thao tác cơ bản trong lập trình PHP và MySQL
- Liệt kê được các hàm trong Cookie và LDAP
- Xác định được các thao tác với Email
- Xây dựng được các truy vấn cơ sở dữ liệu thong qua ADO
- Liệt kê được các hàm xử lý XML
b Kỹ năng:
- Sử dụng được trình duyệt Web
- Sử dụng được lập trình ứng dụng Web với PHP
- Làm việc được với Cookie và LDAP
- Thao tác được với cơ sở dữ liệu MySQL và với Email
- Truy vấn được cơ sở dữ liệu khác thông qua ADO
1 Trao đổi thông tin với trình duyệt bằng Session:
1.1. Khai báo session:
………
1.2. Lưu giá trị của session:
<?php
………
$_SESSION['views'] = 1; // lưu views
echo "Pageviews = " $_SESSION['views']; //lấy views và hiện thị
Trang 3<head>
<title>Test page 1</title></head>
<body>
<b><a href=session2.php>Click here</a></b>
</body>
</html>
2 Làm việc với Cookie
2.1 Tạo một biến Cookie
2.1.1 Khai báo với cú pháp:
………
Trong đó: * ………
* ………
* ………
* ………
* ………
Thông thường, chúng ta sẽ chỉ sử dụng 3 thông số đầu khi khai báo một cookie là: name, value và expire 2.1.2 Thực hiện theo các bước: B1: ………
B2: Nhập đoạn code sau <!DOCTYPE html> <html> <head> <title>Bài 4 - Cookie</title> </head> <body> <?php ………
?>
</body>
</html>
Ở đây, chúng ta đã tạo ra một biến Cookie có tên ‘myCookie’, giá trị của nó
là ‘this is myCookie’s value’
Hàm time() dùng để trả về thời điểm hiện tại, ngay khi nó được gọi 60*60
là thời gian 1 giờ đồng hồ (60 giây * 60 phút) Vậy thời gian hiệu lực của biến Cookie ‘myCookie’ này là 1 giờ đồng hồ tính từ thời điểm nó được tạo B3: Mở trình duyệt, nhập đường dẫn http://localhost/bai4.php
Trang 4Không có gì hiện ra, nhưng chúng ta có thể kiểm tra xem biến ‘myCookie’ đã được tạo chưa bằng cách như sau
Click vào chữ firefox ở góc trên cùng bên trái, chọn thẻ tùy chọn
Một bảng tùy chọn hiện ra, chọn thẻ riêng tư
Trang 5Chọn dòng xóa các cookie riêng lẻ
Một bảng cookie hiện ra, kéo xuống sẽ nhìn thấy dòng chữ localhost
Trang 6Click đúp vào dòng chữ localhost, chúng ta sẽ thấy biến ‘myCookie’ với đầy đủ thông số mà chúng ta vừa tạo
Click đóng để thoát
2.2 Đọc các Cookie
2.2.1 Khai báo cú pháp:
Trang 72.2.2 Thực hiện theo các bước:
B1: Cập nhật đoạn code sau vào file bai4.php
Trang 82.3.2 Thực hiện theo các bước:
B1: Nhập đoạn code sau vào file bai4.php
B2: Refresh lại trình duyệt 2 lần
Biển ‘myCookie’ đã không còn, do đó khi chúng ta muốn in nó ra tại dòng
echo
………
, trình duyệt sẽ báo lỗi
3 Thao tác với cơ sở dữ liệu MySQL
Trang 93.1 Thiết lập kết nối tới CSDL.
3.1.1 Khai báo cú pháp:
………trong đó:
……… Hàm này trả về true nếu thành công, false nếu thất bại
3.2.2 Soạn vào bài ở trên như sau:
Trang 10Để đóng kết nối tới CSDL, ta dùng hàm mysql_close.
Hàm này có nhiệm vụ đóng kết nối tới CSDL có mã định danh được tạo ra bởi hàm mysql_connect() như sau:
4 Truy vấn cơ sở dữ liệu khác thông qua ADO
4.1 Tạo kết nối với Cơ sở dữ liệu:
4.1.1 Khai báo namespace cho SQL Server và MS Access:
………;
………; // Khai báo cho Access
………; // Khai báo cho SQL Server
4.1.2 Tạo kết nối với SQL Server & MS Access:
//của SQL Server
………;
Trang 11//của MS Access
………
………;
4.1.3 Tạo Data Adapter cho SQL Server & MS Access:
//Data Adapter của SQL Server
//Dùng vòng lặp foreach để lấy ra từng DataRow
foreach (DataRow dr in dt.Rows)
//Dùng vòng lặp foreach để lấy ra từng DataRow
foreach (DataRow dr in dt.Rows)
Trang 12………;
} Của MS Assces //Khai báo chuỗi kết nối dữ liệu for MS Access ………;
//Lấy các dòng dữ liệu từ bảng Table1 ………;
//Tạo đối tượng DataAdapter và DataSet ………;
//Tạo đối tượng DataSet ………;
//Đẩy dữ liệu trong dataAdapter vào DataSet (ds) bằng hàm Fill() ………;
//Đối tượng DataSet chứa 1 tập các DataTable, nhưng ta chỉ lấy Table đầu tiên: ………;
//Dùng vòng lặp foreach để lấy ra từng DataRow foreach (DataRow dr in dt.Rows) { ………;
} 4.2.2 Nhập code thực hiện: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using ………;
//using ………; //for Access database using ………; //for SQL Server namespace DB_Test { public partial class Form1 : Form {
//1 Khai báo biến thành viên: ………;
………;
………;
………;
Trang 13public Form1()
{
InitializeComponent(); }
private void button1_Click(object sender, EventArgs e) {
//2 Tạo kết nối với DB SQL Server ………;
//3 Mở kết nối - Open ………;
//4 Tạo DataSet ………;
//5 Tạo đối tượng command và gắn nó cho đối tượng connection đã mở // vào chuỗi truy vấn dữ liệu ………;
………;
………;
//6 Tạo đối tượng DataAdapter và gắn đối tượng command cho nó // Dùng hàm Fill() để đẩy dữ liệu trong Adapter vào ds như bình thường ………;
………;
………;
………;
………;
foreach (DataRow dr in dt.Rows) {
………;
}
}
}
}
5 Làm việc với LDAP
5.1 Kết nối với LDAP
5.1.1 Khai báo cú pháp:
……… hàm kết nối tới máy chủ LDAP, hàm này có 2 tham số: hostname (tên máy chủ LDAP)
Trang 14Vd kết nối với LDAP server bằng user và password hợp lệ
5.2.2 Nhập tiếp vào code:
Trang 15?>
5.3 Tìm kiếm
5.3.1 Khai báo:
………
5.3.2 Soạn thảo tiêp vào code ở trên: <?php ………;
………;
………;
………;
………;
echo $info["count"]." entries returned\n"; ?> 5.4 Xử lý tìm kiếm 5.4.1 Thêm các entry vào thư mục LDAP ………
<?php ………;
if ($ds) { ………;
”); ………;
………;
………;
………;
………;
………;
} else { echo “Unable to connect to LDAP server”; } ?> 5.4.2 Xóa một entry khỏi thư mục LDAP ………
Hàm trả về giá trị TRUE nếu xóa thành công và FALSE nếu thất bại 5.4.3 So sánh giá trị của một thuộc tính ………
Trang 16Code:
<?php
………;
if ($ds) { if (ldap_bind($ds)) { ………;
………;
………;
………;
if ( $r === -1) { echo “Error: ” ldap_error($ds); } elseif ($r === true) { echo “Password correct.”; } elseif ($r === false) { echo “Wrong guess! Password incorrect.”; } } else { echo “Unable to bind to LDAP server.”; } ………;
} else { echo “Unable to connect to LDAP server.”; } ?> 5.4.4 Trả lại thuộc tính đầu tiên của entry ………;
5.4.5 Trả lại kết quả id đầu tiên của entry ………;
5.4.6 Trả lại tham chiếu đầu tiên ………;
5.5 Hiện thị kết quả 5.5.1 Giải phóng kết quả bộ nhớ: ………
Trang 175.5.2 Đếm số lượng các entry được tìm thấy từ kết quả của lệnh tìm kiếm.
………
5.5.3 Trả lại thông báo lỗi LDAP của lệnh LDAP cuối cùng. ………
5.6 Đóng kết nối 5.6.1 Khai báo: ………: hàm đóng kết nối với LDAP, hàm này tương đương với ………
Nếu kết nối đóng thành công sẽ trả về giá trị TRUE, ngược lại là FALSE 5.6.2 Nhập thêm vào: ………;
6 Thao tác với Email 6.1 Gửi email thông qua hàm mail() 6.1.1 Khai báo cú pháp: Để gửi email trực tiếp từ máy chủ, ta có thể sử dụng hàm mail () với cú pháp như sau: ………
6.1.2 Nhập code: <html> <body> <?php if (isset($_REQUEST['email'])) { ………;
………;
………;
………;
………;
echo "Thank you for using our mail form";
}
else
{
echo "<form method='post' action='phpmail.php'>
Người gửi: <input name='email' type='text' /><br />
Gửi tới: <input name='to' type='text' /><br />
Tiêu đề: <input name='subject' type='text' /><br />
Nội dung:<br />
<textarea name='message' rows='15' cols='40'>
</textarea><br />
Trang 18MIME-Version: 1.0
Content-type: text/html; charset=iso-8859-1
6.3.2 Soạn thảo code:
<?
………; //note the comma
Trang 19</tr>
<tr>
<td>Joe</td><td>3rd</td><td>August</td><td>1970</td>
</tr>
<tr>
<td>Sally</td><td>17th</td><td>August</td><td>1973</td>
</tr>
</table>
</body>
</html>
';
………;
………;
………;
………;
………;
………;
?>
7 Xử lý XML
7.1 Lấy một đoạn XML mẫu để phân tích:
<?xml version="1.0"?>
<books>
<book isbn="978-1594489501">
<title>A Thousand Splendid Suns</title>
<author>Khaled Hosseini</author>
<publisher>Riverhead Hardcover</publisher>
<amazon_price>14.27</amazon_price>
</book>
<book isbn="978-1594489587">
<title>The Brief Wondrous Life of Oscar Wao</title>
<author>Junot Diaz</author>
<publisher>Riverhead Hardcover</publisher>
<amazon_price>14.97</amazon_price>
</book>
<book isbn="978-0545010221">
<title>Harry Potter and the Deathly Hallows</title>
<author>J K Rowling</author>
<publisher>Arthur A Levine Books</publisher>
<amazon_price>19.24</amazon_price>
</book>
</books>
7.1 Tạo ra một đối tượng SimpleXmlElement:
Trang 217.2.4 Lấy ra tất cả các title của book và tất cả các số ISBN:
?ChannelID=16', null, true);
echo "<h1><a href='{$rss->channel->link}'>{$rss->channel->title}</a></
Trang 22Bộ câu hỏi và bài tập Tích hợp TRẮC NGHIỆM TRỰC QUAN
I Trắc nghiệm lựa chọn đa phương án:
a) Câu hỏi cấp độ nhớ lại:
1 Chọn phát biểu sai: Để hủy một session đã khai báo ta thực hiện?
A $_SESSION['<tên session>']=null;
B isset($_SESSION['<tên session>']);
C unset($_SESSION['<tên session>']);
D session_destroy();
2 Hàm time() dùng để làm gì, ngay khi cookie được gọi.?
A trả về thời gian hiện tại của Cookie
B trả về thời điểm hiện tại.
C trả về giờ hiện tại
D trả về thời gian làm việc của Cookie
b) Câu hỏi cấp độ xử lý:
Khi khai báo một cookie như sau:
setcookie('myCookie','this is myCookie\'s value',time()+60*60);
3 Biến cookie vừa mới tạo là?
A myCookie.
B $myCookie
C 'this is myCookie\'s value'
D $'this is myCookie\'s value'
4 Để xóa cookie vừa tạo ở trên ta khia báo như thế nào?
A setcookie('myCookie','this is myCookie\'s value',time()-60*60)
B delcookie('myCookie','this is myCookie\'s value',time()+60*60)
C deletecookie('myCookie','this is myCookie\'s value',time()+60*60)
D deletecookie('myCookie','this is myCookie\'s value',time()-60*60)
c) Câu hỏi cấp độ ứng dụng:
5 Ta có một trang php đã tạo một biến cookie Khi đã xóa biến cookie ta thực hiệncâu lệnh echo $_COOKIE[‘myCookie’]; thì trình duyệt sẽ báo lồi gì?
A Note Undefined index myCookie in C:\wwwroot\bai4.php on line
B Non Undefined index myCookie in C:\wwwroot\bai4.php on line
C No find my cookie index myCookie in C:\wwwroot\bai4.php on line
D Không báo lổi gì
6 Giả sử có $host:localhost , $user:sa, $password: 123456
Tạo một kết nối như sau:
<?php
$link = mysql_connect("localhost", "sa", "123456");
if (!$link)
Trang 23Câu nào sau đây là đúng?
A Sau khi chạy thì trên màn hình trình duyệt xuất hiện
“Không thể kết nối được tới MySQL”
B Sau khi chạy thì trên màn hình trình duyệt xuất hiện
“Không thể lựa chọn được CSDL Forums”
C Sau khi chạy thì trên màn hình trình duyệt xuất hiện
“Không thể lựa chọn được CSDL Forums” rồi thoát khỏi trình duyệt
D Không xuất hiện gì trên trình duyệt.
II Trắc nghiệm đúng-sai:
1 Để biết số bản ghi bị tác động bởi lệnh mysql_query liền truớc ta dung hàm mysql_affected_rows() Đúng hay sai?
2 Hàm ldap_connect() là hàm kết nối tới máy chủ LDAP Đúng hay Sai?
III Trắc nghiệm đúng-sai trả lời ngắn:
1 Hàm ldap_connect() có 2 tham số: hostname (tên máy chủ LDAP) và port (cổngkết nối, mặc định là cổng 389)
2 Để xóa một entry khỏi thư mục LDAP ta dùng hàm bool_delete ( resourcelink_identifier, string dn )
Trang 241 Hàm đóng kết nối với LDAP: ldap_close() tương đương với ………
(ldap_unbind())
2 Để xóa một cookie, chúng ta dùng cú pháp tương tự như khi khai báo làsetcookie(name, value, expire, path, domain) , song thông số ……….sẽ là quákhứ(thời điểm hiện tại trừ đi một khoảng thời gian)( expire)
3 Để đóng kết nối tới CSDL, ta dùng hàm mysql_close.Hàm này có nhiệm vụ đóng kết nối tới CSDL có mã định danh được tạo ra bởi hàm
……… ( mysql_connect())
V Trắc nghiệm trả lời ngắn:
1 Để tìm kiếm với LDAP ta sử dụng hàm?( ldap_search ())
2 Muốn sử dụng một session trước tiên ta cần khai báo?( session_start() )
mysql_query liền truớc
5 Thông báo lỗi
Trang 25A Khai báo namespace cho SQL Server
B Khai báo namespace cho MS Access
C Khai báo sử dụng date model cho SQL Server;
D Khai báo sử dụng CSDL cho Access
E Khai Báo sử dụng công cụ drawing
4 Thay đổi giá trị cho session
5 Kiểm tra session có tồn tại hay
không
6 Hủy một session
Cột B
A session $_SESSION['views'] =views;
Trang 2611.Đếm số lượng các entry được
tìm thấy từ kết quả của lệnh tìm
Trang 271- J; 2- L; 3-A; 4- ; 5-B; 6-C; 7-M; 8-I; 9-H; 10-D; 11-E; 12-F; 13-N,G;
VII Trắc nghiệm dạng giải thích
Cho đoạn chuong trình sau:
private System.Data.SqlClient.SqlCommand myCommand;
private System.Data.SqlClient.SqlDataAdapter dataAdapter;
myCommand.CommandText = "SELECT * from Table1";
dataAdapter = new SqlDataAdapter();
Trang 281 Hãy cho biết những lệnh để có ý nghĩa gì?
string connectionString = "localhost; database=db_test; uid=sa; pwd=;";conn = new SqlConnection(connectionString);
conn.Open();
A Tạo kết nối với DB SQL Server
B Mở kết nối với DB Access
C Tạo và mở kết nối với DB SQL Server
D Tạo và mở kết nối với DB Access
2 Trong những lệnh trên lệnh nào để tạo đối tượng command và gắn nó chođối tượng connection đã mở vào chuỗi truy vấn dữ liệu?
A myCommand = new SqlCommand();
myCommand.Connection = conn;
myCommand.CommandText = "SELECT * from Table1";
B dataAdapter = new SqlDataAdapter();
dataAdapter.SelectCommand = myCommand;
C private System.Data.SqlClient.SqlCommand myCommand;
myCommand.CommandText = "SELECT * from Table1";
D myCommand.Connection = conn;
myCommand.CommandText = "SELECT * from Table1";
3 Lệnh dataAdapter.Fill(ds); có ý nghĩa gì?
A Đẩy dữ liệu trong dataAdapter vào ds
B Đẩy dữ liệu trong dataAdapter vào DataSet (ds)
C Đẩy dữ liệu trong Adapter vào DataSet
D Đẩy dữ liệu trong Adapter vào ds