Bai 7 - Php Ket Noi Csdl Mysql

26
KHOA CÔNG NGHTHÔNG TIN ĐẠI HC KHOA HC TNHIÊN 2007 Authored by: Ngô Bá Nam Phương - Lương Vĩ Minh Bài 7 : PHP kết ni CSDL MySQL Môn : Lp trình và Thiết kế Web 1

Transcript of Bai 7 - Php Ket Noi Csdl Mysql

Page 1: Bai 7 - Php Ket Noi Csdl Mysql

KHOA CÔNG NGHỆ THÔNG TIN – ĐẠI HỌC KHOA HỌC TỰ NHIÊN

2007

Authored by: Ngô Bá Nam Phương - Lương Vĩ Minh

Bài 7 : PHP kết nối CSDL MySQL

Môn : Lập trình và Thiết kế Web 1

Page 2: Bai 7 - Php Ket Noi Csdl Mysql

1

i 7

: P

HP

kế

t nố

i C

SD

L M

ySQ

L |

9/2

6/2

00

7

Bài 7 : PHP kết nối CSDL MySQL

Môn : Lập trình và Thiết kế Web 1

Yêu cầu: Trong ứng dụng BookStore Online, xây dựng các chức năng Tìm kiếm, Thêm,

Xóa, Cập nhật thông tin sách

1. Cấu trúc thư mục : Tạo thư mục có cấu trúc như sau trong thư mục C:\wamp\www\ để lưu website

BookStoreOnline:

C:\wamp\www\BookStoreOnline\

C:\wamp\www\BookStoreOnline\script\ : Chứa các file javascript

C:\wamp\www\BookStoreOnline\css\ : Chứa các file định dạng css

C:\wamp\www\BookStoreOnline\BookImages\ : Chứa ảnh bìa của các cuốn sách

C:\wamp\www\BookStoreOnline\ : Chứa các trang .php, .html

2. Cấu trúc CSDL : Sử dụng MySQL, tạo CSDL gồm 3 bảng Book, Category, Publisher có cấu trúc như sau:

a- Bảng Book :

b- Bảng Category :

Page 3: Bai 7 - Php Ket Noi Csdl Mysql

2

i 7

: P

HP

kế

t nố

i C

SD

L M

ySQ

L |

9/2

6/2

00

7

c- Bảng Publisher :

Page 4: Bai 7 - Php Ket Noi Csdl Mysql

3

i 7

: P

HP

kế

t nố

i C

SD

L M

ySQ

L |

9/2

6/2

00

7

3. Tạo kết nối đến CSDL : Do đa số các trang web đều kết nối đến CSDL, do đó ta sẽ đóng gói việc kết nối với

CSDL trong 1 class riêng để dễ dàng hơn trong việc sử dụng

Tạo file DataProvider.php

Lưu DataProvider.php trong thư mục C:\wamp\www\BookStoreOnline\

Khai báo class DataProvider trong DataProvider.php

<?php

class DataProvider

{

public static function ExecuteQuery($sql)

{

$connection = mysql_connect("localhost","root","") or

die ("couldn't connect to localhost");

// ebookDB : Tên CSDL

mysql_select_db("ebookDB",$connection);

mysql_query("set names 'utf8'");

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

mysql_close($connection);

return $result;

}

}

?>

Các trang nào cần sử dụng class DataProvider sử dụng khai báo sau:

<?php

include_once("DataProvider.php");

?>

Page 5: Bai 7 - Php Ket Noi Csdl Mysql

4

i 7

: P

HP

kế

t nố

i C

SD

L M

ySQ

L |

9/2

6/2

00

7

Để thực thi hàm static trong vsphp:

Trong VS.PHP, từ cửa sổ Solution Explorer, chọn PHP Project R-Click Properties

Chọn Configuration Manager

Trong mục Active solution platform, chọn PHP 5:

Page 6: Bai 7 - Php Ket Noi Csdl Mysql

5

i 7

: P

HP

kế

t nố

i C

SD

L M

ySQ

L |

9/2

6/2

00

7

4. Sơ đồ hệ thống website cần xây dựng:

4.1. Trang chủ ( TrangChu.php )

TrangChu.php

TimSach.php DangNhap.php

xlTimSach.php

ThemSach.php xlXoa.php CapNhat.php

Page 7: Bai 7 - Php Ket Noi Csdl Mysql

6

i 7

: P

HP

kế

t nố

i C

SD

L M

ySQ

L |

9/2

6/2

00

7

4.2. Trang đăng nhập ( DangNhap.php )

Mã lệnh

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Dang nhap he thong</title>

</head>

<body>

<form name="formDangnhap" method="post" action="DangNhap.php">

<table width="400" border="0">

<tr>

<td>Tên đăng nhập</td>

<td>

<input type="text" name="txtTenDangNhap"/>

</td>

</tr>

<tr>

<td>Mật khẩu</td>

<td>

<input type="password" name="txtMatKhau" />

</td>

</tr>

<tr>

<td align="right">

<input type="submit" name="btnDangNhap" value="Đăng nhập" />

</td>

<td>

Page 8: Bai 7 - Php Ket Noi Csdl Mysql

7

i 7

: P

HP

kế

t nố

i C

SD

L M

ySQ

L |

9/2

6/2

00

7

<input type="reset" name="btnLamLai" value="Làm lại" />

</td>

</tr>

<tr>

<td ><a href="#">Trở về trang chủ</a></td>

<td>&nbsp;</td>

</tr>

</table>

</form>

</body>

</html>

Bổ sung mã lệnh php xử lý việc đăng nhập trong trang DangNhap.php:

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Dang nhap he thong</title>

</head>

<body>

<?php

$tenDangNhap = $_REQUEST["txtTenDangNhap"];

$matKhau = $_REQUEST["txtMatKhau"];

$ketQuaDangNhap = false;

include_once("DataProvider.php");

$dsNguoiDung = DataProvider::ExecuteQuery("Select * From User");

if($dsNguoiDung != false)

{

while($row = mysql_fetch_array($dsNguoiDung,MYSQL_ASSOC))

{

if($tenDangNhap == $row["UserName"] &&

$matKhau == $row["Password"])

{

$ketQuaDangNhap = true;

}

}

}

if($ketQuaDangNhap == false)

Page 9: Bai 7 - Php Ket Noi Csdl Mysql

8

i 7

: P

HP

kế

t nố

i C

SD

L M

ySQ

L |

9/2

6/2

00

7

{

?>

<form name="formDangnhap" method="post" action="DangNhap.php">

<table width="400" border="0">

<tr>

<td>Tên đăng nhập</td>

<td>

<input type="text" name="txtTenDangNhap" />

</td>

</tr>

<tr>

<td>Mật khẩu</td>

<td><input type="password" name="txtMatKhau" /></td>

</tr>

<tr>

<td align="right">

<input type="submit" name="btnDangNhap" value="Đăng nhập" /></td>

<td

<input type="reset" name="btnLamLai" value="Làm lại" /></td>

</tr>

<tr>

<td ><a href="#">Trở về trang chủ</a></td>

<td>&nbsp;</td>

</tr>

</table>

</form>

<?php

}

else

{

echo ("Xin chào " . $tenDangNhap);

?>

<a href="TrangChu.php" >Trở về trang chủ</a>

<?php

}

?>

</body>

</html>

Page 10: Bai 7 - Php Ket Noi Csdl Mysql

9

i 7

: P

HP

kế

t nố

i C

SD

L M

ySQ

L |

9/2

6/2

00

7

4.3. Tìm sách (TimSach.php) & Xử lý tìm sách (xlTimsach.php)

1. Tìm sách

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Tim sach</title>

</head>

<body>

<form name="form1" method="post" action="xlTimSach.php">

<table width="400" border="0">

<tr>

<td>Tên sách</td>

<td><input type="text" name="txtTenSach" id="txtTenSach" /></td>

</tr>

<tr>

<td align="right">

<input type="submit" name="btnTim" id="btnTim" value="Tìm sách" />

</td>

<td>

<input type="reset" name="btnTimLai" value="Tìm lại" />

</td>

</tr>

<tr>

Page 11: Bai 7 - Php Ket Noi Csdl Mysql

10

i 7

: P

HP

kế

t nố

i C

SD

L M

ySQ

L |

9/2

6/2

00

7

<td ><a href="#">Trở về trang chủ</a></td>

<td>&nbsp;</td>

</tr>

</table>

</form>

</body>

</html>

Page 12: Bai 7 - Php Ket Noi Csdl Mysql
Page 13: Bai 7 - Php Ket Noi Csdl Mysql

2. Xử lý tìm sách

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Xu ly tim kiem</title>

</head>

<body>

<p>

Kết quả tìm sách

</p>

<?php

// lấy tên sách tu trang TimKiem.php

$tenSach = $_REQUEST["txtTenSach"];

include_once("DataProvider.php");

$dsSach = DataProvider::ExecuteQuery("Select * From Book Where BookTitle like '%" . $tenSach . "%'");

if($dsSach != false)

{

if(mysql_num_rows($dsSach)>0)

{

?>

<table border="2" >

<tr>

<th width="50">STT</th>

<th width="50">Mã sách</th>

<th width="400">Tựa sách</th>

<th width="100">Giá tiền</th>

<th width="100">Xóa</th>

</tr>

Page 14: Bai 7 - Php Ket Noi Csdl Mysql

1

i 7

: P

HP

kế

t nố

i C

SD

L M

ySQ

L |

9/2

6/2

00

7

<?php

$stt = 1;

while($row = mysql_fetch_array($dsSach,MYSQL_ASSOC))

{

$maSach = $row["BookID"];

$tenSach = $row["BookTitle"];

$giaTien = $row["BookPrice"];

?>

<tr>

<td>

<?php

echo($stt);

$stt++;

?>

</td>

<td>

<?php

echo($maSach);

?>

</td>

<td>

<a href="CapNhatSach.php?BookID=<?php echo($maSach); ?>" >

<?php echo($tenSach); ?>

</a>

</td>

<td>

<?php echo($giaTien); ?>

</td>

<td>

<form name="form1" method="post" action="xlXoa.php">

<input type="hidden" name="BookIDDeleted" value="<?php echo($maSach); ?>" >

Page 15: Bai 7 - Php Ket Noi Csdl Mysql

2

i 7

: P

HP

kế

t nố

i C

SD

L M

ySQ

L |

9/2

6/2

00

7

<input type="submit" name="btnXoa" value="Xóa" >

</form>

</td>

</tr>

<?php

} // end while

?>

</table>

<?php

} // end if(mysql_num_rows($dsSach)>0)

else

{

echo ("Không tìm thấy sách với tựa " . $tenSach);

}

} // end if ($dsSach != false )

?>

<a href="ThemSach.php" > Thêm một đầu sách mới </a>

</body>

</html>

Page 16: Bai 7 - Php Ket Noi Csdl Mysql

3

i 7

: P

HP

kế

t nố

i C

SD

L M

ySQ

L |

9/2

6/2

00

7

3. Xử lý Phân trang xlTimsach.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-

transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Untitled Document</title>

</head>

<body>

<p>

Kết quả tìm sách

</p>

<?php

// Xử lý phân trang --------------------------------------------------------------------------

$rowsPerPage = 20;

$pageNum = 1;

// if $_GET['page'] defined, use it as page number

if(isset($_GET['page']))

{

$pageNum = $_GET['page'];

}

$offset = ($pageNum - 1) * $rowsPerPage;

// lấy tên sách tu trang TimKiem.php

$tenSach = $_REQUEST["txtTenSach"];

include_once("DataProvider.php");

Page 17: Bai 7 - Php Ket Noi Csdl Mysql

4

i 7

: P

HP

kế

t nố

i C

SD

L M

ySQ

L |

9/2

6/2

00

7

$sql = "Select * From Book Where BookTitle like '%" . $tenSach . "%'";

$sql .= " LIMIT $offset, $rowsPerPage";

$dsSach = DataProvider::ExecuteQuery($sql);

if($dsSach != false)

{

if(mysql_num_rows($dsSach)>0)

{

?>

<table border="2" >

<tr>

<th width="50">STT</th>

<th width="50">Mã sách</th>

<th width="400">Tựa sách</th>

<th width="100">Giá tiền</th>

<th width="100">Xóa</th>

</tr>

<?php

$stt = 1;

while($row = mysql_fetch_array($dsSach,MYSQL_ASSOC))

{

$maSach = $row["BookID"];

$tenSach = $row["BookTitle"];

$giaTien = $row["BookPrice"];

?>

<tr>

<td>

<?php

echo($stt);

Page 18: Bai 7 - Php Ket Noi Csdl Mysql

5

i 7

: P

HP

kế

t nố

i C

SD

L M

ySQ

L |

9/2

6/2

00

7

$stt++;

?>

</td>

<td>

<?php echo($maSach);?>

</td>

<td>

<a href="CapNhatSach.php?BookID=<?php echo($maSach); ?>" >

<?php echo($tenSach); ?>

</a>

</td>

<td>

<?php echo($giaTien); ?>

</td>

<td>

<form name="form1" method="post" action="xlXoa.php">

<input type="hidden" name="BookIDDeleted" value="<?php echo($maSach); ?>" >

<input type="submit" name="btnXoa" value="Xóa" >

</form>

</td>

</tr>

<?php

} // end while

?>

</table>

<?php

// xuất ra danh sách các link liên kết phân trang

$sql = "SELECT COUNT(BookID) AS numrows FROM Book where BookTitle like '%" .

$_REQUEST["txtTenSach"] . "%'";

$result = DataProvider::ExecuteQuery($sql) ;

Page 19: Bai 7 - Php Ket Noi Csdl Mysql

6

i 7

: P

HP

kế

t nố

i C

SD

L M

ySQ

L |

9/2

6/2

00

7

$row = mysql_fetch_array($result, MYSQL_ASSOC);

$numrows = $row['numrows'];

$maxPage = ceil($numrows/$rowsPerPage);

// print the link to access each page

$self = $_SERVER['PHP_SELF'];

$nav = '';

for($page = 1; $page <= $maxPage; $page++)

{

if ($page == $pageNum)

{

$nav = " $page "; // no need to create a link to current page

}

else

{

$nav = " <a href='" . $self . "?page=" . $page;

$nav.= "&txtTenSach=".$_REQUEST["txtTenSach"]."' >" . $page . "</a> ";

}

echo $nav;

}

} // end if(mysql_num_rows($dsSach)>0)

else

{

echo ("Không tìm thấy sách với tựa " . $tenSach);

}

} // end if ($dsSach != false )

?>

Page 20: Bai 7 - Php Ket Noi Csdl Mysql

7

i 7

: P

HP

kế

t nố

i C

SD

L M

ySQ

L |

9/2

6/2

00

7

<a href="ThemSach.php" > Thêm một đầu sách mới </a>

</body>

</html>

Page 21: Bai 7 - Php Ket Noi Csdl Mysql

4.4. Trang xử l y xóa sách ( xlXoa.php )

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Xu ly Xoa sach</title>

</head>

<body>

<?php

$bookIDDeleted = $_REQUEST["BookIDDeleted"];

include_once("DataProvider.php");

DataProvider::ExecuteQuery("Delete From Book Where BookID = " .

$bookIDDeleted);

?>

Đã xóa thành công cuốn sách có mã là <?php echo($bookIDDeleted); ?>

<br>

<a href="TimKiem.php" > Tiếp tục tìm kiếm </a>

<br>

<a href="TrangChu.php" > Trở về trang chủ </a>

</body>

</html>

Page 22: Bai 7 - Php Ket Noi Csdl Mysql

1

i 7

: P

HP

kế

t nố

i C

SD

L M

ySQ

L |

9/2

6/2

00

7

4.5. Trang Thêm một đầu sách mới ( ThemSach.php )

Mã lệnh

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Them mot cuon sach</title>

</head>

<body>

<h1>

<font color="blue"> Thêm một đầu sách mới </font>

</h1>

<form action="" method="post" enctype="multipart/form-data" name="form1">

<fieldset style="width:600px;">

<legend>Thông tin sách</legend>

<table width="600" border="0">

<tr>

<td width="167">Tựa sách</td>

<td width="423">

<input type="text" name="txtTenSach" />

</td>

</tr>

Page 23: Bai 7 - Php Ket Noi Csdl Mysql

2

i 7

: P

HP

kế

t nố

i C

SD

L M

ySQ

L |

9/2

6/2

00

7

<tr>

<td>Hình bìa</td>

<td><input type="file" name="fileUploadHinhBia" /></td>

</tr>

<tr>

<td>Nội dung tóm tắt</td>

<td><input type="text" name="txtNoiDungTomTat"/> </td>

</tr>

<tr>

<td>Thể loại</td>

<td>

<select name="cmbTheLoai" id="cmbTheLoai">

<?php

include_once("DataProvider.php");

$dsTheLoai = DataProvider::ExecuteQuery("Select * From Category");

if ( $dsTheLoai != false )

{

while ($row = mysql_fetch_array($dsTheLoai,MYSQL_ASSOC))

{

$maTheLoai = intval ($row["CategoryID"]);

$tenTheLoai = $row["CategoryName"];

?>

<option value="<?php echo($maTheLoai); ?>">

<?php echo($tenTheLoai); ?>

</option>

<?php

}

}

?>

</select>

</td>

</tr>

<tr>

<td>Danh sách tên tác giả</td>

<td><input type="text" name="txtTacGia" /></td>

</tr>

<tr>

<td>Nhà xuất bản</td>

<td>

<select name="cmbNhaXuatBan" id="cmbNhaXuatBan">

<?php

$dsNhaXuatBan = DataProvider::ExecuteQuery("Select * From Publisher");

if($dsNhaXuatBan != false)

Page 24: Bai 7 - Php Ket Noi Csdl Mysql

3

i 7

: P

HP

kế

t nố

i C

SD

L M

ySQ

L |

9/2

6/2

00

7

{

while($row = mysql_fetch_array($dsNhaXuatBan,MYSQL_ASSOC))

{

$maNhaXuatBan = $row["PublisherID"];

$tenNhaXuatBan = $row["PublisherName"];

?>

<option value="<?php echo($maNhaXuatBan); ?>">

<?php echo($tenNhaXuatBan); ?>

</option>

<?php

}

}

?>

</select>

</td>

</tr>

<tr>

<td>Năm xuất bản</td>

<td><input type="text" name="txtNamXuatBan" /></td>

</tr>

<tr>

<td>Giá tiền</td>

<td><input type="text" name="txtGiaTien" /></td>

</tr>

<tr>

<td align="right">

<input type="submit" name="btnThemMoi" value="Thêm mới" />

</td>

<td>

nbsp;<input name="btnLamLai" type="reset" value="Làm lại" />

</td>

</tr>

</table>

</fieldset>

<a href="TrangChu.php" >Trở về trang chủ </a>

</form>

</body>

</html>

Page 25: Bai 7 - Php Ket Noi Csdl Mysql

4

i 7

: P

HP

kế

t nố

i C

SD

L M

ySQ

L |

9/2

6/2

00

7

Bổ xung mã lệnh xử l y việc ghi nhận một đầu sách mới trên trang ThemSach.php khi

người dùng click button Thêm mới

<?php

if(isset($_REQUEST["btnThemMoi"]))

{

include_once("DataProvider.php");

// ghi nhan sach moi

$sql = "Insert into Book ( BookTitle, BookDesc, BookCatID,

BookAuthor, BookPubID, BookYear, BookPrice ) values (";

$sql .= "'" . $_REQUEST["txtTenSach"] . "',";

$sql .= "'" . $_REQUEST["txtNoiDungTomTat"] . "',";

$sql .= $_REQUEST["cmbTheLoai"] . "," ;

$sql .= "'" . $_REQUEST["txtTacGia"] . "',";

$sql .= $_REQUEST["cmbNhaXuatBan"] . "," ;

$sql .= $_REQUEST["txtNamXuatBan"] . "," ;

$sql .= $_REQUEST["txtGiaTien"] . ")" ;

DataProvider::ExecuteQuery($sql);

$maSach = -1;

$sql = "select max(BookID) From Book";

$result = DataProvider::ExecuteQuery($sql);

if($result!=false)

{

$row = mysql_fetch_array($result,MYSQL_ASSOC);

$maSach = $row["max(BookID)"];

}

// upload hinh bia cuốn sách

if (is_uploaded_file($_FILES['fileUploadHinhBia']['tmp_name']))

{

$fileName = $_FILES['fileUploadHinhBia']['name'];

$pos = strrpos( $fileName, "." );

$fileExtension = substr($fileName,$pos);

$hinhBia = "upload/" . $maSach . $fileExtension;

move_uploaded_file($_FILES['fileUploadHinhBia']['tmp_name'], $hinhBia );

// cập nhật lại giá trị cột BookPic

$sql = "Update Book Set BookPic='" . $hinhBia . "' Where BookID=" . $maSach;

DataProvider::ExecuteQuery($sql);

}

}

?>

<!—chèn mã lệnh của file themSach.php ở trên -->

Page 26: Bai 7 - Php Ket Noi Csdl Mysql

5

i 7

: P

HP

kế

t nố

i C

SD

L M

ySQ

L |

9/2

6/2

00

7

4.6. Trang cập nhật thông tin sách (CapNhat.php)

Quy trình xử ly:

- Lấy mã sách từ trang xlTimSach.php ( $_REQUEST[“BookID”])

- Tạo câu query truy vấn thông tin của sách cần cập nhật

- Thực thi câu query vừa tạo, đưa các thông tin truy vấn được vào các control trên trang

CapNhat.php

Xử l y sự kiện người dùng click vào button Cập nhật để hiệu chỉnh thông tin sách xuống

CSDL.