24/05/2018, 21:16

PHP và Database

Để kết nối cơ sở dữ liệu mySQL trong PHP, chúng ta có nhiều cách ứng với nhiều phương thức kết nối cơ sở dữ liệu, trong phần này chúng ta tập trung tìm hiểu cách kết nối cơ sở dữ liệu mySQL từ PHP bằng chính gói của nó. Những vấn đề chính sẽ ...

Để kết nối cơ sở dữ liệu mySQL trong PHP, chúng ta có nhiều cách ứng với nhiều phương thức kết nối cơ sở dữ liệu, trong phần này chúng ta tập trung tìm hiểu cách kết nối cơ sở dữ liệu mySQL từ PHP bằng chính gói của nó.

Những vấn đề chính sẽ được đề cập trong bài học này

  • Khai báo kết nối cơ sở dữ liệu
  • Thêm mẩu tin
  • Cập nhật mẩu tin.
  • Xoá mẩu tin
  • Truy vấn dữ liệu

Để kết nối cơ sở dữ liệu mySQL bạn sử dụng khai báp như sau:

<?php
    $link = mysql_connect ("localhost", "root", "")
    or die ("Could not connect to MySQL Database");
    mysql_select_db("TestDB", $link);
    ?>
    

Trong đó khai báo sau là kết nối cơ sở dữ liệu mySQL với tên server/ip cùng với username vá password:

mysql_connect ("localhost", "root", "")

Và mysql_select_db("TestDB", $link); để chọn tên cơ sở dữ liệu sau khi mở kết nối cơ sở dữ liệu, nếu biến $link có giá trị là false thì kết nối cơ sở dữ liệu không thành công.

Sau khi mở kết nối cơ sở dữ liệu mà không sử dụng tìh bạn có thể đóng kết nối cơ sở dữ liệu với cú pháp như sau:

mysql_close($link);

Chẳng hạn, bạn khai báo trang connection.php để kết nối cơ sở dữ liệu và đóng kết nối ngay sau khi mở thành công.

Trang connection.php
<HTML>
<HEAD>
<TITLE>::Welcome to PHP and mySQL</TITLE>
</HEAD>
<BODY>
Mo va dong ket noi CSDL MySQL
<?php
$link = mysql_connect ("localhost", "root", "") or die ("Could not connect to MySQL Database"); mysql_select_db("InterShop", $link); mysql_close($link);
?>
</BODY>
</HTML>

Để thêm mẩu tin, bạn sử dụng hàm mysql_query(chuỗi Insert). Chẳng hạn, chúng ta khai báo trang insert.php để thêm mẩu tin vào bảng tblships có hai cột dữ liệu là ShipID và ShipName như ví dụ trong trang insert.php

Trang insert.php
<HTML>
<HEAD>
<TITLE>::Welcome to PHP and mySQL</TITLE>
</HEAD>
<BODY>
<h3>Them mau tin</h3>
<?php
require("dbcon.php");
$sql="insert into tblships values('A01','Testing')";
$result = mysql_query($sql,$link);
$affectrow=0;
if($result)
$affectrow=mysql_affected_rows();
mysql_close($link);
?>
So mau tin them vao<?= $affectrow?>
</BODY>
</HTML>

Trong đó, bạn sử dụng hàm mysql_query với hai tham số là $sql và $link. Kết quả trả về là số mẩu tin thực thi. Ngoài ra, bạn có thể sử dụng đoạn kết nối cơ sở dữ liệu trong tập tin dbcon.php như ví dụ sau:

<?php
$link = mysql_connect ("localhost", "root", "")
or die ("Could not connect to MySQL Database");
mysql_select_db("Test", $link);
?>

Trong trường hợp cho phép người sử dụng thêm mẩu tin thì bạn thiết kế form yêu cầu người sử dụng nhập hai giá trị sau đó submit đến trang kế tiếp để thực thi việc thêm gt sau đó submit đến trang kế tiếp để thực thi việc thêm giá trị vừa nhập vào cơ sở dữ liệu như hình 1.

Thêm mẩu tin

Để làm điều này, trước tiên bạn khai báo trang them.php, trong đó khai báo đoạn javascript để kiểm tra dữ liệu nhập như sau:

<SCRIPT language=JavaScript>
function checkInput()
{
if (document.frmPHP.txtID.value=="")
{
alert("Invalid ID, Please enter ID"); document.frmPHP.txtID.focus(); return false;
}
if (document.frmPHP.txtName.value=="")
{
alert("Please enter Name"); document.frmPHP.txtName.focus(); return false;
}
return true;
}
</script>

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

<form name="frmPHP" method="post"
action="doinsert.php"
onsubmit="return checkInput();">
<tr>
<td align="left" class="content-sm"><b> Please enter ID and Name
</b></td>
</tr>
<tr>
<td align="left" >ID:</td>
</tr>
<tr>
<td align="left">
<input type="text" name="txtID"
size="25" maxlength="3" class="textbox">
</td>
</tr>
<tr>
<td align="left" >Name:</td>
</tr>
<tr>
<td align="left" >
<input type="text" name="txtName"
size="25" maxlength="50" class="textbox">
</td>
</tr>
<tr>
<td align="left"  valign="top"> <br>
<input type="submit"
value="Submit" class="button">
<input type="reset" value="Reset" class="button">
</td>
</tr>
</form>

Lưu ý rằng, bạn khai báo số ký tự lớn nhất cho phép nhập 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 đựơc triệu gọi. Trang này lấy giá trị nhập bằng cách sử dụng biến form hay $HTTP_POST_VARS. Đối với trường hợp này chúng ta sử dụng biến form như trang doinsert.php.

<HTML>
<HEAD>
<TITLE>::Welcome to PHP and mySQL</TITLE>
</HEAD>
<BODY>
<h3>Them mau tin</h3>
<?php
$affectrow=0;
require("dbcon.php");
$sql="insert into tblships(ShipID,ShipName) ";
$sql .=" values('".$txtID."','".$txtName."')";
$result = mysql_query($sql,$link);
if($result)
$affectrow=mysql_affected_rows();
mysql_close($link);
?>
So mau tin them vao<?= $affectrow?>
</BODY>
</HTML>

Đối với trường hợp cập nhật mẩu tin, bạn cũng sử dụng hàm mysql_query với phát biểu Update thay ví Insert như trên, ví dụ chúng ta khai báo trang update.php để cập nhật mẩu tin trong bảng tblShips với tên là UpdateTesting khi mã có giá trị là A01.

Trang update.php
<HTML>
<HEAD>
<TITLE>::Welcome to PHP and mySQL</TITLE>
</HEAD>
<BODY>
<h3>Cap nhat mau tin</h3>
<?php
require("dbcon.php");
$sql="Update tblships set ShipName='UpdateTesting' ";
$sql.=" where ShipID='A01'";
$result = mysql_query($sql,$link);
$affectrow=0;
if($result)
$affectrow=mysql_affected_rows();
mysql_close($link);
?>
So mau tin cap nhat <?= $affectrow?>
</BODY>
</HTML>

Lưu ý rằng, để biết số mẩu tin đã thực thi bởi phát biểu SQL bạn sử dụng hàm mysql_affected_rows.

if($result)
$affectrow=mysql_affected_rows();

Tương tự như trên, bạn có thể thiết kế form cho phép người sử dụng cập nhật dữ liệu bằng cách thiết kế form yêu cầu người sử dụng nhập mã và tên cập nhận.

Trước tiên thiết kế from cho phép nhập dữ liệu để cập nhật như ví dụ trang capnhat.php, sau khi học phần truy vấn xong, thaqy vì nhập mã bạn cho phép người sử dụng chọn trong danh sách đã có như hình 2.

Cập nhật dữ liệu.

Sau khi người sử dụng nhấn nút submit, trang doupdate.php sẽ triệu gọi, kết quả trả về 1 hay 0 mẩu tin.

<HTML>
<HEAD>
<TITLE>::Welcome to PHP and mySQL</TITLE>
</HEAD>
<BODY>
<h3>Cap nhat mau tin</h3>
<?php
$affectrow=0;
require("dbcon.php");
$sql="update tblships set ShipName='";
$sql .=$txtName."' where ShipID='".$txtID."'";
$result = mysql_query($sql,$link);
if($result)
$affectrow=mysql_affected_rows();
mysql_close($link);
?>
So mau tin cap nhat <?= $affectrow?>
</BODY>
</HTML>
Trang doupdate.php

Tương tự như vậy khi xoá mẩu tin, bạn chỉ thay đổi phát biểu SQL dạng Delete như ví dụ trong tập tin delete.php.

Trang delete.php
<HTML>
<HEAD>
<TITLE>::Welcome to PHP and mySQL</TITLE>
</HEAD>
<BODY>
<h3>Xoa mau tin</h3>
<?php

require("dbcon.php");
$sql="Delete From tblships where ShipID='A01'";
$result = mysql_query($sql,$link);
$affectrow=0;
if($result)
$affectrow=mysql_affected_rows();
mysql_close($link);
?>
So mau tin da xoa <?= $affectrow?>
</BODY>
</HTML>

Đối với trường hợp xoá thì đơn giản hơn, bạn cỉh cần biết được mã cần xoá, chính vì vậy trong trường hợp này chúng ta chỉ cần thiết kế trang cho phép nhập mã như hình 3.

Xóa một mẩu tin

Sau khi nhập mã cần xoá, nếu người sử dụng nhấn nút Delete lập tức trang dodelete.php sẽ triệu gọi và xoá mẩu tin tương ứng.

Trang dodelete.php
<HTML>
    <HEAD>
    <TITLE>::Welcome to PHP and mySQL</TITLE>
    </HEAD>
    <BODY>
<h3>Xoa mau tin</h3>
<?php
$affectrow=0;
require("dbcon.php");
$sql="delete from tblships ";
$sql .=" where ShipID='".$txtID."'";
$result = mysql_query($sql,$link);
if($result)
$affectrow=mysql_affected_rows();
mysql_close($link);
?>
So mau tin xoa <?= $affectrow?>
</BODY>
</HTML>

Để truy vấn dữ liệu bạn sử dụng hàm mysql_num_rows để biết được số mẩu tin trả về và hàm mysql_fetch_array để đọc từng mẩu tin và mảng sau đó trình bày giá trị từ mảng này. Chẳng hạn, chúng ta tạo một tập tin lietke.php dùng để liệt kê danh sách mẩu tin trong bảng tblShips như hình 4.

Liệt kê mẩu tin

Để làm điều này, bạn khai báo đoạn chương trình đọc bảng dữ liệu tương tự như ví dụ sau:

Đoạn chương trình đọc bảng dữ liệu
<?php
    require("dbcon.php");
    $totalRows = 0;
    $stSQL ="select * from tblShips";
    $result = mysql_query($stSQL, $link);
    $totalRows=mysql_num_rows($result);
    ?>

Sau đó, dùng hàm mysql_fetch_array để đọc từng mẩu tin và in ra như sau:

<?php if($totalRows>0)
{
$i=0;
while ($row = mysql_fetch_array ($result))
{
$i+=1;
?>
<tr valign="top">
<td>
<?=$row["ShipID"]?> </td>
<td ><?=$row["ShipName"]?></td>
</tr>

Trong trường hợp số mẩu tin trả về là 0 thì in ra câu thông báo không tìm thấy như sau:

<?php
}
}else{
?>
}
<tr valign="top">
<td >&nbsp;</td>
<td > <b><font face="Arial" color="#FF0000"> Oop! Ship not found!</font></b></td>
</tr>
<?php
?>

Trong bài này, chúng ta tập trung tìm hiểu cách kết nối cơ sở dữ liệu, thêm, xoá cập nhật và liệt kê mẩu tin. Trong bài kế tiếp chúng ta tìm hiểu nhiều các trình bày dữ liệu, xoá mẩu tin theo dạng mảng.

0