Bài giảng Cơ sở dữ liệu - Bài 10: Kết nối với MySQL và truy xuất cơ sở dữ liệu
Những vấn đề chính được đề cập: Khai báo kết nối cơ sở dữ liệu Cập nhật dữ liệu. Kích hoạt dữ liệu xóa dữ liệu
Bạn đang xem trước 20 trang tài liệu Bài giảng Cơ sở dữ liệu - Bài 10: Kết nối với MySQL và truy xuất cơ sở dữ liệu, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
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:
Khai báo kết nối cơ sở dữ liệu
Cập nhật dữ liệu.
Kích hoạt dữ liệu
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ụ:
<?php
$link = mysql_connect(“servername”, “username”,” password”);
if (!$link){
Echo “Could not connect to MySQL Database”;
Exit;
}
?>
Có thể sử dụng phát biểu như sau:
<?php
$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ụ:
<?php
$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:
<?php
$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”);
<?php
$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ụ:
<?php
$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ụ:
<?php
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ụ:
<?php
Require(”dbcon.inc”);
$sql = “select * from tbllanguages”;
$result = mysql_query($sql, $link);
?>
CodeName
<?php
If(mysql_num_rows($result) !=0)
While ($row = mysql_fetch_array($result))
{
Echo “$row[0];
echo ”$row[1];
}
Mysql_close($link);
?>
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ụ:
<?php
Require(”dbcon.inc”);
$sql = “select * from tbllanguages”;
$result = mysql_query($sql, $link);
?>
CodeName<?php
If(mysql_num_rows($result) !=0)
While ($row = mysql_fetch_object($result))
{
Echo “$row->LangID;
echo ”$row->LangName;
}
Mysql_close($link);
?>
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
<?php
require("dbcon.inc");
$sql="insert into tbllanguages values('RUS','Russia')";
$result = mysql_query($sql,$link);
?>
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.
function CheckInput(){
if (document.FInput.txtuser.value == ""){
alert('Nhập vào username');
document.FInput.txtuser.focus();
return false;
}
if (document.FInput.txtpass.value == ""){
alert('Nhập vào password');
document.FInput.txtpass.focus();
return false;
}
return true;
}
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:
<form name="FInput" action="NewConf.php?goto =" onsubmit="return
CheckInput();" method="post" >
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.
Trang đăng ký người dùng newuser.php
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.
<?php
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:
<?php
if ($exist == 1){ ?>
User đã tồn tại Chọn User khác để đăng ký
<?php }
if ($exist == 0){ ?>
<input type="hidden" name="txtuser"
value="" />
<input type="hidden" name="txtpass"
value="" />
<?php
} ?>
Đă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
<?php
require("dbcon.inc");
if ($_POST[form_] == "newuser")
{
$sql = "insert into tblusers(username, password) values
('".$_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.
Đăng ký người dùng
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.
III. Kích hoạt dữ liệu
Đoạn mã script để kiểm tra dữ liệu nhập vào:
function checkInput() {
if (document.frmLogin.txtUser.value==""){
alert("Invalid Email, Please enter your own Email");
document.frmLogin.txtUser.focus();
return false;
}
if (document.frmLogin.txtPWD.value=="") {
alert("Please enter your own Password");
document.frmLogin.txtPWD.focus();
return false;
} .....
return true;
}
Đoạn mã trang login.html
Thiết kế một Form để submit dữ liệu với phương thức POST.
<form name="frmLogin" method="post"
action="login_authentication.php?goto=" onSubmit="return
checkInput();">
E-mail Address:
Password:
<input type="submit" style="width=80px" name="Signin"
value="Sign me in!" class="button">
Đoạn mã trang login.html
Đăng ký "suid","susername","sfullname“ vào session:
<?php
session_start();
require("dbcon.inc");
$sql="select * from tblusers where username='".$_POST["txtUser"]."'";
$result = mysql_query($sql,$link);
$i = mysql_num_rows($result);
if($i){
$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 login_authentication.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:
<?php
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.
<form name="frmNew" method="post" action="editconf.php"
onSubmit="return checkInput();">
<?php
if (mysql_num_rows($result)!=0) {
$row = mysql_fetch_row($result);
echo ”Username:”. $row[1].””;
?>
Password:<input type="password" name="txtPWD" size="25"
maxlength="8" value="">
....
Trang edituser.php
Đoạn mã hiển thị thông tin thẻ select.
-Select one-
>Ho Chi Minh
>Ha Noi
...
<input type="submit" style="width=120px" name="new"
value="Register me!" class="button">
<?php
}
?>
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 edituser.php
<?php
require("dbcon.inc");
if ($_POST[form_] == "newuser") {
$sql = "insert into tblusers(username, password) values
('".$_POST[txtuser]."','".$_POST[txtpass]."')";
}else{ // update
$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);
}?>
Trang doreg.php
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ẻ.
Xử lý dữ liệu hiển thị
<?php
$sql = "select * from tblProvinces order by ProvinceName";
$result = mysql_query($sql,$link);
$option = "";
if (mysql_num_rows($result)!=0){
while ($Prorow = mysql_fetch_row($result)){
$option .= "<option value =".$Prorow[0];
if ($Prorow[0]==$row[6]){$option .= "selected";}
$option .= ">".$Prorow[1]."";
}
}
?>
-Select one-
Đoạn mã hiển thị thẻ select
Thẻ input dạng radio thể hiện giới tính, lấy thông tin lưu trong
CSDL
<?php
if (mysql_num_rows($result)!=0){
$row =mysql_fetch_row($result); ?>
<input type = “radio” name = “GT” value = “M”
> Male
<input type = “radio” name = “GT” value = “F”
> Female
Xử lý với thẻ input dạng radio
Thẻ checkbox sẽ hiện ngành nghề đã được chọn lấy thông tin từ
CSDL
<?php
if (mysql_num_rows($result)!=0){
$row =mysql_fetch_array ($result);
$NN = $row[“NganhNghe”];?>
<input type = “checkbox” name = “chkGV” value = “GV”
> GV
<input type = “checkbox” name = “chkNC” value = “NC”
> NC
Xử lý với thẻ input dạng checkbox