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. Xử lý được XML. c. Thái độ: Quan sát quá trình làm việc của giáo viên. Tiếp nhận cộng việc cần làm.
Trang 1Bài giảng 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:
session_start();
1.2. Lưu giá trị của session:
<?php
session_start();
$_SESSION['views'] = 1; // lưu views
echo "Pageviews = " $_SESSION['views']; //lấy views và hiện thị
Trang 32 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:
setcookie(name, value, expire, path, domain);
Trong đó:
* name: là tên của cookie
* value: là giá trị mà chúng ta gán cho cookie
* expire: thời gian mà cookie có hiệu lực
* domain: tên miền kết mà cookie được sử dụng
* path: đường dẫn mà cookie được sử dụng
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: Tạo file bai4.php trong \wamp\www
B2: Nhập đoạn code sau
Ở đâ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 7$_COOKIE["tên cookie"];
2.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
setcookie(name, value, expire, path, domain);
Để xóa một cookie, chúng ta dùng cú pháp tương tự như khi khai báo, song thông số expire sẽ là quá khứ(thời điểm hiện tại trừ đi một khoảng thời gian)
2.3.2 Thực hiện theo các bước xóa một cookie:
Trang 8B1: Nhập đoạn code sau vào file bai4.php
setcookie('myCookie','this is myCookie\'s value',time()+60*60);
//hủy biến myCookie
setcookie('myCookie','this is myCookie\'s value',time()-60*60);
echo $_COOKIE['myCookie'];
?>
</body>
</html>
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 $_COOKIE['myCookie'];
, trình duyệt sẽ báo lỗi
3 Thao tác với cơ sở dữ liệu MySQL
3.1 Thiết lập kết nối tới CSDL.
3.1.1 Khai báo cú pháp:
Trang 9mysql_connect(host,tên_truy_cập,mật_khẩu);
trong đó:
host là chuỗi chứa tên (hoặc địa chỉ IP) của máy chủ cài đặt MySQL
tên_truy_cập là chuỗi chứa tên truy cập hợp lệ của CSDL cần kết nối
mật_khẩu là chuỗi chứa mật khẩu tương ứng với tên truy cập
Hàm này thường được dùng sau khi thiết lập kết nối bằng hàm
mysql_connect 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:
3.3 Tiến hành các truy vấn SQL, xử lý các kết quả trả về
$biến= mysql_query(“Lệnh SQL”)or die(“Không thựchiện duợc SQL”);
Các hàm cần thiết:
Trang 10– mysql_affected_rows(): Số bản ghi bị tác động bởi lệnh mysql_query liền truớc.
– mysql_error(): Thông báo lỗi(nếu có)
– mysql_errno(): Mã lỗi
Trong TH buớc3 làSELECT:
$rs = mysql_query(“SELECT…”) or die(“Không thựchiện duợc SQL”);
Các hàm cần thiết:
– mysql_num_rows($rs): Số luợng bản ghi trong $rs:
$r=mysql_fetch_array($rs): Trả 1 dòng của $rs vào $r
3.4 Đóng kết nối tới CSDL.
3.4.1 Khai báo cú pháp:
Để đó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:
using System.Data;
using System.Data.OleDb; // Khai báo cho Access
using System.Data.SqlClient; // 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
string connectionString = "localhost; database=db_test; uid=sa; pwd=;";
SqlConnection conn = new SqlConnection(connectionString);
//của MS Access
string connectionString = "provider=Microsoft.JET.OLEDB.4.0;" + "data
source = c:\\db_test.mdb";
4.1.3 Tạo Data Adapter cho SQL Server & MS Access:
//Data Adapter của SQL Server
string commandString = "SELECT * from Table1";
SqlDataAdapter dataAdapter = new SqlDataAdapter(commandString, conn);//Data Adapter của MS Access
Trang 11string commandString = "SELECT * from Table1";
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(commandString, conn);
OleDbConnection conn = new OleDbConnection(connectionString);
4.1.4 Tạo DataSet:
//Tạo DataSet
DataSet ds = new DataSet();
//Đẩy dữ liệu trong dataAdapter vào DataSet (ds) bằng hàm Fill()
dataAdapter.Fill(ds);
//Đối tượng DataSet chứa 1 tập các DataTable, nhưng ta chỉ lấy Table đầu tiên:DataTable dt = ds.Tables[0];
//Dùng vòng lặp foreach để lấy ra từng DataRow
foreach (DataRow dr in dt.Rows)
{
listBox1.Items.Add(dr["CompanyName"].ToString() + dr["ContactName"]);}
4.2 Tạo đối tượng DataAdapter kết nối trực tiếp vào Database không
cần Connection:
4.2.1 Khai báo đối tượng:
Của SQL Server:
//Khai báo chuỗi kết nối dữ liệu for SQL Server
string connectionString = "localhost; database=db_test; uid=sa; pwd=;";
//Lấy các dòng dữ liệu từ bảng Table1
string commandString = "SELECT CompanyName, ContactName from
Table1";
//Tạo đối tượng DataAdapter và DataSet
SqlDataAdapter dataAdapter = new SqlDataAdapter(commandString,
connectionString);
//Tạo đối tượng DataSet
DataSet ds = new DataSet();
//Đẩy dữ liệu trong dataAdapter vào DataSet (ds) bằng hàm Fill()
dataAdapter.Fill(ds, "Table1");
//Đối tượng DataSet chứa 1 tập các DataTable, nhưng ta chỉ lấy Table đầu tiên:DataTable dt = ds.Tables[0];
//Dùng vòng lặp foreach để lấy ra từng DataRow
foreach (DataRow dr in dt.Rows)
{
Trang 12listBox1.Items.Add(dr["CompanyName"].ToString() + dr["ContactName"]);}
Của MS Assces
//Khai báo chuỗi kết nối dữ liệu for MS Access
string connectionString = "provider=Microsoft.JET.OLEDB.4.0;" + "data
source = c:\\db_test.mdb";
//Lấy các dòng dữ liệu từ bảng Table1
string commandString = "SELECT CompanyName, ContactName from
Table1";
//Tạo đối tượng DataAdapter và DataSet
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(commandString, connectionString);
//Tạo đối tượng DataSet
DataSet ds = new DataSet();
//Đẩy dữ liệu trong dataAdapter vào DataSet (ds) bằng hàm Fill()
dataAdapter.Fill(ds, "Table1");
//Đối tượng DataSet chứa 1 tập các DataTable, nhưng ta chỉ lấy Table đầu tiên:DataTable dt = ds.Tables[0];
//Dùng vòng lặp foreach để lấy ra từng DataRow
foreach (DataRow dr in dt.Rows)
{
listBox1.Items.Add(dr["CompanyName"].ToString() + dr["ContactName"]);}
//using System.Data.OleDb; //for Access database
using System.Data.SqlClient; //for SQL Server
Trang 13private System.Data.SqlClient.SqlConnection conn;
private System.Data.DataSet ds;
private System.Data.SqlClient.SqlCommand myCommand;
private System.Data.SqlClient.SqlDataAdapter dataAdapter;
//2 Tạo kết nối với DB SQL Server
string connectionString = "localhost; database=db_test; uid=sa; pwd=;"; conn = new SqlConnection(connectionString);
myCommand.CommandText = "SELECT * from Table1";
//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
Trang 14}
}
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:
Ldap_connect(): 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) và port (cổng kết nối, mặc định là cổng 389)Ldap_connect(string hostname, int port);
$ldapconn = ldap_connect($ldaphost, $ldapport)
or die("Không thể kết nối được đến $ldaphost");
?>
5.2 Đăng nhập hoặc nặc danh xác thực
5.2.1 Khai báo:
Ldap_bind(): hàm nối kết với server LDAP để có thể thao tác với LDAP
Vd 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$justthese = array("ou", "sn", "givenname", "mail");
$sr=ldap_search($ds, $dn, $filter, $justthese);
$info = ldap_get_entries($ds, $sr);
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
bool ldap_add ( resource link_identifier, string dn, array entry )
<?php
$ds = ldap_connect(“localhost”);
if ($ds) {
$r = ldap_bind($ds, “cn=root, o=My Company, c=US”, “secret”);
$info["cn"] = “John Jones”;
5.4.2 Xóa một entry khỏi thư mục LDAP
bool ldap_delete ( resource link_identifier, string dn )
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 16mixed ldap_compare ( resource link_identifier, string dn, string attribute, string value )
5.4.4 Trả lại thuộc tính đầu tiên của entry
string ldap_first_attribute ( resource link_identifier,resource
result_entry_identifier,int &ber_identifier )
5.4.5 Trả lại kết quả id đầu tiên của entry
ldap_first_entry ( resource link_identifier, resource result_identifier )
5.4.6 Trả lại tham chiếu đầu tiên
ldap_first_reference ( resource link, resource result )
5.5 Hiện thị kết quả
Trang 175.5.1 Giải phóng kết quả bộ nhớ:
bool ldap_free_result ( resource result_identifier )
5.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.
int ldap_count_entries ( resource link_identifier, resource result_identifier )
5.5.3 Trả lại thông báo lỗi LDAP của lệnh LDAP cuối cùng.
string ldap_error ( resource link_identifier )
bool ldap_unbind ( resource link_identifier );
6 Thao tác với Email
6.1 Gửi email thông qua hàm mail()
mail( $to, "Subject: $subject",$message" );
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 />
Trang 18<textarea name='message' rows='15' cols='40'>
mail($EmailGui, $EmailNhan, $NoiDung,$ThongTinMoRong);
6.3 Gửi email theo định dạng HTML.
6.3.1 Tìm hiểu về kỹ thuật:
Chú ý rằng ở chế độ mặc định, nội dung thông điệp được truyền tải đi dưới dạngvăn bản thuần túy (plain text), và không thể hiện được các cấu trúc HTML thông thường Để có thể đưa định dạng HTML vào mail, qua đó cho phép hiển thị hình ảnh, định dạng font chữ , ta phải đưa thêm dòng sau đây vào phần header:
MIME-Version: 1.0
Content-type: text/html; charset=iso-8859-1
6.3.2 Soạn thảo code:
<?
$to = "Mary < mary@example.com>" ", " ; //note the comma
$to = "Kelly < kelly@example.com>";
$subject = "Birthday Reminders for August";
Trang 19$headers = "Content-type: text/html; charset=iso-8859-1\r\n";
$headers = "From: Birthday Reminder < birthday@example.com>\r\n";
Trang 207.1 Tạo ra một đối tượng SimpleXmlElement:
isbn là một attribute, các giá trị của một attribute phải để trong dấu (")
<title>, <author>, là các child element
Trang 217.2.4 Lấy ra tất cả các title của book và tất cả các số ISBN:
Nếu bạn không thích dụng foreach thì có thể dùng biến counter $i, viết lại là
$tempBook = $books->book[$i] rồi dùng $tempBook để xử lý
7.2.5 Parse thử RSS một trang:
<?php
$rss = new SimpleXMLElement('http://www.tuoitre.com.vn/tianyon/RssView.aspx?ChannelID=16', null, true);
echo "<h1><a
$value = trim((string) $element); // Bản thên element nó là XML, bạn lấy gi
á trị của element thì ép kiểu về string
$attributes = $element->attributes(); // lấy tất cả các attribute
$children = $element->children(); // lấy các child element