Chƣơng 6 : CHO PHÉP NGƢỜI SỬ DỤNG
SOẠN THẢO CƠ SỞ DỮ LIỆU
Nhận dữ liệu từ cơ sở dữ liệu khi cung cấp một vài dữ liệu cho cơ sở dữ liệu.
Nhưng cơ sở dữ liệu thì không tạo ra nội dung mà chỉ lấy dữ liệu từ hệ thống khác. Điều
này có nghĩa là bạn phải tạo hệ thống dữ liệu từ PHP.
Tất cả cơ sở dữ liệu tương tác dựa trên SQL. Bạn biết là cú pháp SQL lấy dữ liệu
từ mảng.
Hầu hết mọi người dùng SQL để chèn dữ liệu mà PHP sửa đổi hoặc tạo ra.
Chương này đề cập đến soạn thảo cơ sở dữ liệu, bao gồm:.
Thêm: điều này thì đơn giản, nhưng bạn sẽ tìm để thêm vào trong một cơ sở dữ liệu
Xóa: không sửa đổi lại cấu trúc cơ sở dữ liệu và có liên quan đến tính toàn vẹn.
Sữa đổi: thay thế một vài vùng soạn thảo với nội dung mới trong một hồ sơ có
sẵn.
Xóa một mẩu tin
Xóa một mẩu tin thì dễ dàng. Như đã đề cập từ trước, luôn phải kiểm tra truy vấn
trong cơ sở dữ liệu thử nghiệm. Việc xóa một mẩu tin trong cơ sở dữ liệu thử nghiệm
không bao giờ là mối đe dọa cho hệ thống của bạn. Và việc kiểm tra truy vấn giúp bạn
tìm ra những lỗi SQL trước khi xóa tất cả các mẩu tin trong cơ sở dữ liệu bởi vì bạn quên
một vài thứ như câu lệnh WHERE. MySQL xóa những thứ thỏa câu lệnh SQL.
Xóa có nghĩa là mất dữ liệu. Để xóa một mẩu tin bạn cần biết vị trí của mẩu tin
trong cơ sở dữ liệu thông qua một tập hợp các câu lệnh điều kiện WHERE. Mỗi lần câu
lệnh được thực thi mẩu tin sẽ bị xóa, không thể quay lại. Mẩu tin bị xóa không hy vọng
trả lại. Đây là điều cần lưu ý khi sử dụng câu lệnh DELETE.
Ví dụ: Xóa mẩu tin đơn giản
Trước khi bảo PHP xóa mọi thứ, bạn nên thử xóa một mẩu tin từ phpMyAdmin với
câu lệnh DELETE.
1. Mở phpMyAdmin và nhập đoạn mã sau:
DELETE FROM movie
WHERE movie_id = 12
LIMIT 1
2. phpMyAdmin trả lại thông báo rằng bạn xóa một mẩu tin từ bảng
Cách thức hoạt động
Câu lệnh DELETE SQL sử dụng rất đơn giản, bạn sử dụng câu lệnh LIMIT 1 để
giới hạn xóa một mẩu tin.
Một cơ sở dữ liệu thường chứa những mẫu tin liên quan với nhau trong những
bảng khác nhau. Xóa một vài mẫu tin không xem xét quan hệ của chúng, làm cho bạn
khó hiểu.
Không may là MySQL không duy trì tính toàn vẹn.
Để tránh vấn đề này bạn có thể dùng form phức tạp hơn của câu lệnh
DELETE,Cascade Delete, như đề cập trong phần sau
Ví dụ:Cascade Delete
Bây giờ bạn đã biết cách sử dụng DELETE, bạn sẽ thêm nó vào hệ thống để xóa
thông tin một người từ hệ thống. Khi bạn lưu trữ quan hệ một người trong bảng movie,
bạn cần cập nhật nội dung của bảng, vì vậy bạn không cần xóa những gì liên quan tới
người.
Xóa một người giống như cách mở khóa xe và mong đợi bãi giữ xe trống. Bạn cần
để chắc chắn không liên quan đến việc xóa các mẩu tin còn lại.
Sau đây là những bước thực thi Cascade Delete:
1. Tạo một file mới với tên delete.php và nhập đoạn mã sau:
<?php
$link = mysql_connect(“localhost”, “bp5am”, “bp5ampass”)
or die(“Could not connect: “ . mysql_error());
mysql_select_db(„moviesite‟, $link)
or die ( mysql_error());
// DELETE SCRIPT
if (!isset($_GET[„do‟]) || $_GET[„do‟] != 1) {
?>
<p align=”center” style=”color:#FF0000”>
Are you sure you want to delete this
<?php
echo $_GET[„type‟]; ?>?<br>
<a href=”<?php echo $_SERVER[„REQUEST_URI‟];
?>&do=1”>yes</a>
or <a href=”index.php”>Index</a>
</p>
<?php
} else
{
if ($_GET[„type‟] == “people”) {
// Xóa những gì liên quan đến người trong bảng movie
// Xóa những gì liên quan đến lãnh đạo diễn viên
$actor = “UPDATE movie
SET movie_leadactor = „0‟
WHERE movie_leadactor = „“ . $_GET[„id‟] . “„“;
$result = mysql_query($actor)
or die(“Invalid query: “ . mysql_error());
// Xóa những gì liên quan đến đạo diễn
$director = “UPDATE movie
SET movie_director = „0‟
WHERE movie_director = „“ . $_GET[„id‟] . “„“;
$result = mysql_query($director)
or die(“Invalid query: “ . mysql_error());
}
// SQL chung
$sql = “DELETE FROM “ . $_GET[„type‟] . “
WHERE “ . $_GET[„type‟] . “_id = „“ . $_GET[„id‟] . “„
LIMIT 1”;
// xuất SQL cho mục đích
echo “<! ” . $sql . “ >”;
$result = mysql_query($sql)
or die(“Invalid query: “ . mysql_error());
?>
<p align=”center” style=”color:#FF0000”>
Your <?php echo $_GET[„type‟]; ?> has been deleted.
<a href=”index.php”>Index</a>
</p>
<?php
}
?>
2. Lưu delete.php vào thư mục chap6.
3. Mở index.php trên trình duyệt. bạn sẽ thấy DELETE những liên kết tiếp sau mỗi film
hoặc người như Hình 6.4.1
Hình 6.4.1
4. Thử xóa film mà bạn đã thêm vào ở bài tập trước bởi việc click vào liên kết
DELETE trên hàng “Test” movie name. Bạn sẽ thấy như Hình 6.4.2 .
Hình 6.4.2
5. Click vào liên kết “yes” để xác nhân việc xóa và đợi thông báo xác nhận như Hình
6.4.3
Hình 6.4.3
Cách thức hoạt động
Ở đây là kế hoạch tiêu diệt 1 tập hợp vô tội của dữ liệu. Đặt nó sang một bên,
chúng ta hay xem tập lệnh này hoạt động như thế nào.
Đầu tiên, bạn cần hiểu rằng bạn không thể xóa mẩu tin trong cơ sở dữ liệu và phải
quên chúng đi. Việc xóa được xem xét cẩn thận. Ví dụ nếu xóa một người từ bảng
people, điều này ngăn cản bạn từ việc tìm ra một khả năng có liên quan đến người trong
bảng movie. Nếu bạn xóa Jim Carrey từ bảng people, ai sẽ lãnh đạo diễn viên Bruce
Almight? Nếu bạn không làm mọi thứ, id của Jim Carrey‟s sẽ còn lại trong mẩu tin và bạn
sẽ có một cơ sở dữ liệu bị sữa đổi. Bạn không muốn điều này đúng không (câu trả lời là
không)
Để giải quyết vấn đề này thì để chắc rằng bạn luôn có một khóa ngoại trong mẩu
tin. Trong đoạn mã sau bạn cập nhật bảng film với giá trị 0 trước khi xóa mẩu tin people.
Điều này cũng cho phép bạn kiển tra cách hoạt động của câu lệnh UPDATE SQL.
// xóa phần liên quan đến lãnh đạo diễn viên
$actor = “UPDATE movie
SET movie_leadactor = „0‟
WHERE movie_leadactor = „“ . $_GET[„id‟] . “„“;
$result = mysql_query($actor)
or die(“Invalid query: “ . mysql_error());
// xóa phần liên quan đến đạo diễn
$director = “UPDATE movie
SET movie_director = „0‟
WHERE movie_director = „“ . $_GET[„id‟] . “„“;
$result = mysql_query($director)
or die(“Invalid query: “ . mysql_error());
Trong đoạn mã trước, đặt bất kì một vùng nào trong bảng movie mà có thể chứa
một điều rủi ro cho bạn, khi bạn xóa một người. Câu lệnh UPDATE làm việc một cách
đơn giản. Nó đặt những vùng lý thuyết với những giá trị lý thuyết mới trong tất cả các
mẩu tin theo nhu cầu của câu lệnh WHERE.
Bạn có thể hỏi điều gì sẽ xảy ra nếu một người quên đi phần WHERE. Điều này sẽ
cập nhật tất cả những mẩu tin trong bảng, mà có thể không có một thứ gì bạn muốn làm
trong thực tế .
Thứ tự xóa
// phát sinh SQL
$sql = “DELETE FROM “ . $_GET[„type‟] . “
WHERE “ . $_GET[„type‟] . “_id = „“ . $_GET[„id‟] . “„
LIMIT 1”;
// Xuất SQL cho mục đích biên dịch
echo “<! ” . $sql . “ >”;
$result = mysql_query($sql)
or die(“Invalid query: “ . mysql_error());
Truy vấn DELETE là một đơn vị động, nhưng nó khá dễ hiểu. Bạn không muốn
mã hóa câu lệnh SQL cho mỗi loại. Vì vậy bạn sử dụng thông tin thông qua việc truyền
biến trong URL để phát sinh ra câu lệnh SQL. Bảng và vùng khóa chính được phát sinh
linh hoạt từ loại mục để xóa.
. DỮ LIỆU
Nhận dữ liệu từ cơ sở dữ liệu khi cung cấp một vài dữ liệu cho cơ sở dữ liệu.
Nhưng cơ sở dữ liệu thì không tạo ra nội dung mà chỉ lấy dữ liệu. dữ liệu từ PHP.
Tất cả cơ sở dữ liệu tương tác dựa trên SQL. Bạn biết là cú pháp SQL lấy dữ liệu
từ mảng.
Hầu hết mọi người dùng SQL để chèn dữ liệu