Kết nối với MySQL và truy xuất cơ sở dữ liệu

Nội dung

Những vấn đề chính được đề cập:

(cid:0) Khai báo kết nối cơ sở dữ liệu

(cid:0) Cập nhật dữ liệu.

(cid:0) Kích hoạt dữ liệu

(cid:0) xóa dữ liệu

I. Khai báo kết nối cơ sở dữ liệu.

Để kết nối cơ sở dữ liệu mySQL trên máy chủ ta dùng hàm

mysql_connect().

Khai báo như sau:

$link = mysql_connect($host, $user, $password);

Các tham số được gửi cho hàm (Máy chủ, tên đăng ký, mật khẩu)

được dựa trên cơ sở từng tài khoản và độ ưu tiên được thiết lập trong

cơ sở dữ liệu MySQL. Thông thường máy chủ được xác định là

localhost.

Nếu kết nối được thực hiện, biến $link được trở thành điểm tham

chiếu. Nếu bỏ qua chúng sẽ tự động sử dụng kết nối đang được mở.

1. Kết nối cơ sở dữ liệu.

Ví dụ:

Echo “Could not connect to MySQL Database”; Exit;

} ?>

Có thể sử dụng phát biểu như sau:

$link = mysql_connect ("localhost", "root", "") or die ("Could not connect to MySQL Database");

?> Lệnh die() cho phép kết thúc kết nối và giải phóng toàn bộ các biến khởi tạo để kết nối cơ sở dữ liệu trước đó.

2. Mở cơ sở dữ liệu

Sau khi kết nối thành công, có thể khai báo để mở CSDL theo hai cách:

mysql_select_db(“Database name”);

mysql_select_db("Database name", $link);

Ví dụ:

$db = mysql_connect(“localhost”,”root”,””);

If (!$db){

Echo “Could not connect to MySQL Database”;

Exit;

}

mysql_select_db(“InterShop”,$link);

?>

2. Mở cơ sở dữ liệu

Hoặc:

$link = mysql_connect(“localhost”,”root”,””)

or die (“Could not connect to MySQL

Database”.mysql_error());

mysql_select_db(“InterShop”,$link);

?>

Kết nối cơ sở dữ liệu trên được lưu trong file dbcon.inc

Từ sau trở đi ta có thể sử dụng kết nối bằng câu lệnh.

Require(“dbcon.inc”);

3. Đóng kết nối CSDL

Khi không sử dụng kết nối với CSDL, ta có thể dùng hàm để đóng kết nối với CSDL như sau:

mysql_close (“Database connection”);

$link = mysql_connect(“localhost”,”root”,””)

or die (“Could not connect to MySQL Database”);

mysql_select_db(“InterShop”,$link);

....

mysql_close(“InterShop”);

?>

4. Truy vấn cơ sở dữ liệu

Để truy vấn CSDL, dùng hàm mysql_query() với tham số bắt buộc là chuỗi sql, và các tham số tùy chọn.

Int mysql_query(string sql);

Int mysql_query(string sql, [int db_connect]);

Int mysql_query(string sql, $link, [int db_connect]);

Ví dụ:

$link = mysql_connect(“localhost”,”root”,””)

or die (“Could not connect to MySQL Database”);

mysql_select_db(“InterShop”);

$sql = “select * from tblusers”;

$result = mysql_query($sql, $link);

mysql_close($link);

?>

5. Số lượng mẫu tin

Để biết số lượng mẫu tin truy vấn trả về dùng hàm.

Mysql_num_rows($result);

Ví dụ:

Require(“dbcon.inc”);

$sql = “select * from tblusers where username =‘”;

$sql .= $_POST[“txtuser”]. ” ’ ”;

$result = mysql_query($sql,$link);

$num = mysql_num_rows($result);

Echo “Number of records = $num”;

Mysql_close($link);

?>

6. Truy vấn dữ liệu

Sử dụng hàm mysql_fetch_array() để đọc từng bản ghi. Hàm này sẽ đọc từng bản ghi và chuyển xuống bản ghi tiếp theo. Ví dụ:

While ($row = mysql_fetch_array($result)) {

Echo “

; echo ”;

}

Mysql_close($link); ?>

CodeName
$row[0]$row[1]

6. Truy vấn dữ liệu

Sử dụng hàm mysql_fetch_object() để đọc dữ liệu vào đối tượng, sau đó sử dụng thuộc tính $row->FieldName để lấy dữ liệu. Ví dụ:

While ($row = mysql_fetch_object($result)) {

Echo “

; echo ”;

}

Mysql_close($link); ?>

CodeName
$row->LangID$row->LangName

6. Truy vấn dữ liệu

Ngoài các hàm trên còn một số hàm thao tác với cơ sở dữ liệu như:

Mysql_create_db(string database name[,databaseconnection]);

Mysql_drop_db(string database name[,databaseconnection]);

II. Thêm thông tin vào CSDL

Sử dụng hàm mysql_query(chuỗi Insert).

Ví dụ: Khi thêm thông tin vào trong bảng tbllanguages gồm hai trường LangID, LangName

 Thông thường khi nhập thông tin vào CSDL, cần xây dựng một trang PHP dùng để xác nhận lại các thông tin của người nhập trước đó.

II. Thêm thông tin vào CSDL

Trường hợp đăng ký mới người dùng vào bảng tblusers.

Có thể xây dựng các trang để xử lý theo các bước sau:

- Người dùng nhập thông tin và ấn vào nút Register me!

- Trang xác nhận sẽ lấy các thuộc tính từ trang đăng ký bằng biến form hay thông qua mảng $_POST.

- Kết nối CSDL kiểm tra user name đã tồn tại hay chưa?

+ Nếu user đã tồn tại, thông báo cho người dùng biết, cho phép trở

về trang trước.

+ Nếu chưa có, cho phép người sử dụng trở về hay tiếp tục đăng

ký.

- Nếu người dùng chọn nút save, cho phép chấp nhận thông tin đăng ký.

Trang đăng ký người dùng newuser.php

Trước tiên cần chèn đoạn Javascript để kiểm tra dữ liệu nhập.

Trang đăng ký người dùng newuser.php

Khai báo thể form và hai thẻ input dạng text yêu cầu người sử dụng nhập ID và Name như sau:

User name:


Password:


Trang đăng ký người dùng newuser.php

Chú ý: khai báo số ký tự lớn nhất cho phép nhập vào bằng với kích

thước đã khai báo trong cơ sở dữ liệu ứng với thuộc tính maxlength.

Khi người sử dụng nhập hai giá trị và nhấn nút submit, trang kế

tiếp Newconf.php được gọi. Trang này lấy giá trị nhập bằng cách sử

dụng biến form hay $_POST.

Đăng ký người dùng

Trang Newconf.php kiểm tra xác nhận thông tin

Đoạn mã mở cơ sở dữ liệu kiểm tra.

require("dbcon.inc");

$sql = "select * from tblusers where username =

'".$_POST[txtuser]."'";

$result = mysql_query($sql, $link);

$exist = 0;

if (mysql_num_rows($result)!=0)

{

$exist = 1;

mysql_close($link);

}

?>

Đăng ký người dùng

Nếu user chưa tồn tại cho phép gửi dữ liệu để chèn vào CSDL: User đã tồn tại Chọn User khác để đăng ký

value="" />

value="" />

Đăng ký người dùng

Sau khi dữ liệu được kiểm tra thỏa mãn, cập nhật thông tin vào CSDL. Đoạn mã được thể hiện trang doreg.php

('".$_POST[txtuser]."','".$_POST[txtpass]."')";

} else{

//echo Update;

}

mysql_query($sql, $link); mysql_close($link);

?>

Đăng ký người dùng

Một số vấn đề cần tránh khi lưu dữ liệu.

Nếu người dùng tiếp tục ấn phím F5 hay Refresh lại mang hình, trang

doreg.php sẽ thực hiện lại một lần nữa. Trong trường hợp này, cần phải

xác định sau khi lưu dữ liệu, phải có cờ (flag) để nhận biết thông tin đã

được lưu.

Nếu sử dụng biến session để nhận biết, có thể khởi tạo biến session

trong trang NewConf.php. Với giá trị isSave = “N”, khi lưu kết quả vào

CSDL ta gán cho isSave = “Y”.

Có thể dùng một trang sau trang doreg. Php thông báo việc đăng

nhận thành công.

III. Kích hoạt dữ liệu

Các vấn đề về kích hoạt dữ liệu:

Khi người dùng đăng nhập hệ thống, muốn xem thông tin người dùng

và cập nhật, thay đổi thông tin nếu cần thiết.

Để kích hoạt thông tin xác nhận thông qua UserID, UserID có thể lấy

từ session của người dùng sau khi đăng nhập hoặc từ giá trị của người

quản trị cung cấp.

Trong trường hợp edit dữ liệu cuả người dùng, không cho phép người

dùng thay đổi username.

Các thẻ chọn lựa như select, radio, Checkbox lưu giá trị cần phải chọn

đến đúng giá trị được lưu trong cơ sở dữ liệu.

Để giải quyết vấn đề này có thể viết bằng PHP hoặc javascript.

Đoạn mã trang login.html

Đoạn mã script để kiểm tra dữ liệu nhập vào:

Đoạn mã trang login.html

Thiết kế một Form để submit dữ liệu với phương thức POST.

E-mail Address:


Password:


value="Sign me in!" class="button">

Trang login_authentication.php

Đăng ký "suid","susername","sfullname“ vào session:

$row=mysql_fetch_row($result); echo "No of Records: ".$i; $suid=$row[0]; $susername=$row[1]; $sfullname=$row[3]; session_register("suid","susername","sfullname");

} mysql_close($link); ?>

Trang edituser.php

Sau khi đăng ký session. Trang edituser.php sẽ lấy userID từ

session và hiển thị thông tin truy vấn.

Đoạn mã truy vấn dữ liệu:

session_start();

require("dbcon.inc");

$sql="select * from tblUsers where UserID='".$_SESSION[suid]."'";

$result = mysql_query($sql,$link);

?>

Trang edituser.php

Đoạn mã hiển thị thông tin.

onSubmit="return checkInput();">

if (mysql_num_rows($result)!=0) {

$row = mysql_fetch_row($result);

echo ”Username:”. $row[1].”
”;

?>

Password:

maxlength="8" value="">

....

Trang edituser.php

Đoạn mã hiển thị thông tin thẻ select.

Trang edituser.php

Sau khi thay đổi thông tin trên trang edituser.php. Trang editconf.php

sẽ xác nhận lại các thông tin người dùng. Nếu tiếp tục chọn Update,

trang doreg.php sẽ được triệu gọi.

Trang doreg.php thực hiện một trong hai phát biểu SQL. Nếu gọi từ

trang newconf.php là đăng kí mới (insert into). Nếu gọi từ trang

editconf.php, trang này sẽ update dữ liệu.

Trang doreg.php

$sql = "update tblusers set password = '".$_POST[txtPWD]; $sql.= "',FullName = '". $_POST[txtFullName]; $sql.= "',Address = '".$_POST[txtAddress]; $sql.= "',Tel = '". $_POST[txtTel]; $sql.= "',City = '. $_POST[txtCity]; $sql.= "',Province = '". $_POST[cbProvince]; $sql.= "' where userID = '".$_SESSION[suid]."'";

} mysql_query($sql, $link); mysql_close($link); }?>

Xử lý dữ liệu hiển thị

Với thẻ select:

Khi dữ liệu danh mục được lưu trong CSDL, như ví dụ trên danh mục tỉnh thành không cố định, được cập nhật và lưu trong bảng dữ liệu. Vấn đề phải giải quyết bằng cách đọc mã và tên tỉnh thành từ Table, sau đó thay thế chuỗi trong thẻ select.

Với thẻ input dạng radio:

Như giới tính được lưu trong CSDL, khi hiển thị thông tin, cần chọn đúng giới tính.

Với thẻ input dạng checkbox:

Khi người dùng nhập dữ liệu dạng checkbox, dữ liệu được lưu trong CSDL. Cần phải thể hiện thông tin ra trang WEB chỗ nào được chọn, chỗ nào không được chọn.

Vấn đề được giải quyết bằng cách chèn đoạn mã PHP vào trong thẻ.

Đoạn mã hiển thị thẻ select

while ($Prorow = mysql_fetch_row($result)){

$option .= "

}

} ?>

Xử lý với thẻ input dạng radio

Thẻ input dạng radio thể hiện giới tính, lấy thông tin lưu trong

CSDL

if (mysql_num_rows($result)!=0){

$row =mysql_fetch_row($result); ?>

> Male

> Female

Xử lý với thẻ input dạng checkbox

Thẻ checkbox sẽ hiện ngành nghề đã được chọn lấy thông tin từ

CSDL

if (mysql_num_rows($result)!=0){

$row =mysql_fetch_array ($result);

$NN = $row[“NganhNghe”];?>

> GV

> NC