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

pdf34 trang | Chia sẻ: candy98 | Lượt xem: 831 | Lượt tải: 0download
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