در این جلسه از سری آموزشهای پیاچپی، قصد داریم تا آخرین عملیاتی که نیاز داریم در ارتباط با بانکهای اطلاعاتی فرا بگیریم را به شما آموزش دهیم. در چند جلسه گذشته روش اتصال به MySQL، درج، ویرایش و مشاهده اطلاعات را فرا گرفتید. در این بخش قصد داریم روش حذف اطلاعات ذخیره شده در بانکهای اطلاعاتی MySQL را از طریق PHP به شما آموزش دهیم. در ادامه با ما همراه باشید.
همانطور که میدانید در کار با دادهها و ذخیره اطلاعات ۴ عملیات اصلی را پیش رو داریم؛ درج، خواندن، ویرایش و حذف اطلاعات. گاهی نیاز پیدا میکنید تا یکسری از دادههای موردنظرتان را از جداول MySQL حذف کنید. برای انجام این عملیات نیز باید از کوئری مخصوص حذف دادهها استفاده کنیم.
پیش از ادامه این مبحث یک مرور کلی بر بانک اطلاعاتی CMS و جدول posts خواهیم داشت. در این جدول همانطور که میدانید سه فیلد برای هر مطلب در نظر گرفتیم. فیلد id برای نگهداری شناسه منحصربفرد عددی هر مطلب، فیلد title به منظور نگهداری عنوان مطالب و فیلد text برای نگهداری متن مطلب. پس هر رکورد در جدول posts شامل این سه فیلد است. اما برای حذف اطلاعات نیز نیاز به id منحصربفرد رکوردها خواهید داشت. البته اگر بخواهید تمام رکوردها را با هم و به صورت یکجا حذف کنید نیازی به شناسه یکتای id نداریم. حال به ادامه آموزش میپردازیم.
نرمافزار Xampp را باز کرده و سرور آپاچی و MySQL را اجرا کنید. حالا فایل edit.php که در جلسه قبلی ایجاد کردیم را باز کرده و کدهای قبلی را پاک کرده و کد زیر را در آن قرار دهید:
<!DOCTYPE html>
<html dir=”rtl” lang=”fa-IR”>
<head>
<title>ویرایش مطلب</title>
<meta charset=”utf-8″ />
</head>
<body style=”font-family: tahoma; font-size:14px;”>
<center>
<?php
include (“config.php”);
//select all records from posts table
$get_query = mysql_query(“SELECT * FROM `posts`”);
//now using while for get each record sepratly and show it to web browser
while ($fetch_result = mysql_fetch_array($get_query))
{
$postTitle = $fetch_result[‘title’];
$postText = $fetch_result[‘text’];
$postId = $fetch_result[‘id’];
echo “<h2><a href=single.php?id=$postId>$postTitle</a> (<a href=editpost.php?id=$postId>ویرایش</a>) – (<a href=deletepost.php?id=$postId>حذف</a>)</h2>”;
}
?>
</center>
</body>
</html>
تنها تغییری که در این فایل ایجاد کردیم، اضافه کردن یک لینک ثابت جدید برای حذف هر مطلب است. همانطور که جلسه پیش یک لینک ثابت برای ویرایش هر مطلب ایجاد کردیم به همان صورت یک لینک دیگر با عنوان حذف برای هر مطلب ایجاد کردهایم و لینک مقصد آن را deletepost.php تعیین کردهایم. همچنین شناسه منحصربفرد هر پست را با متغیر id? به فایل deletepost.php ارسال کردهایم تا از این طریق بتوانیم پست انتخابی را حذف کنیم. مطمئنا با توجه به توضیحات کاملی که تاکنون در این مورد ارائه دادهایم، میدانید که دلیل این کار چیست. پس از اجرای این فایل باید صفحه وب شما شبیه به زیر باشد:
حال یک فایل جدید به نام deletepost.php ایجاد کرده و کدهای زیر را در آن قرار دهید:
<!DOCTYPE html>
<html dir=”rtl” lang=”fa-IR”>
<head>
<title>حذف پست</title>
<meta charset=”utf-8″ />
</head>
<body style=”font-family: tahoma; font-size:14px;”>
<center>
<?php
include (“config.php”);
$pid = $_GET[‘id’];
//delete query
$get_query = mysql_query(“DELETE FROM `posts` WHERE `id` = ‘$pid’ “);
if($get_query){
echo “حذف مطلب مورد نظر با شناسه $pid با موفقیت انجام شد.”;
}else{
echo “مشکلی در حذف پست مورد نظر رخ داده است.”;
}
?>
</center>
</body>
</html>
حال به بررسی کد بالا میپردازیم. از آنجا که شناسه پست موردنظر را از طریق آدرس URL به فایل deletepost.php ارسال کردهایم، با استفاده از کد:
$pid = $_GET[‘id’];
شناسه id پست مورد نظر را در متغیر pid ذخیره کردهایم. سپس کوئری مخصوص حذف دادهها را به صورت زیر نوشتهایم:
$get_query = mysql_query(“DELETE FROM `posts` WHERE `id` = ‘$pid’ “);
ابتدا کلمه کلیدی DELETE را نوشته و سپس FROM را مینویسم و پس از این دو کلمه نام جدولی که قصد حذف اطلاعات از آن را داریم مینویسیم. از آنجا که نام جدول ما posts است پس همین نام را نوشته و سپس مانند جلسات قبل از دستور WHERE استفاده میکنیم تا یک شرط برای اجرای این کوئری تعیین کنیم. پس از این کلمه اعلام میکنیم که تمام اطلاعات مربوط به رکوردی که id آن برابر مقدار ذخیره شده در pid است و در جدول posts قرار دارد را حذف کند. اگر این کوئری به درستی و با موفقیت انجام شود، متغیر get_query برابر true خواهد بود و اگر به درستی اجرا نشود و مشکلی در اجرای این کوئری پیش بیاید، مقدار ذخیره شده در متغیر get_query برابر false خواهد شد.
سپس با یک دستور شرطی if بررسی میکنیم که آیا کوئری حذف به درستی انجام شده یا خیر. اگر عملیات حذف انجام شده باشد پیغامی مبنی بر موفقیتآمیز بودن حذف مطلب موردنظر نمایش خواهد یافت. در غیر این صورت پیام عدم حذف مطلب انتخابی نمایش مییابد. فرض کنید روی لینک حذف یکی از مطالب کلیک کردهایم. در صورتی که همه چیز را به درستی انجام داده باشید پس از کلیک روی لینک حذف باید با صفحهای مشابه زیر مواجه شوید.
آنچه تاکنون انجام دادهایم برای حذف تکی مطالب بود. گاهی نیاز است یک گزینه برای حذف همه رکوردها نیز در اختیار داشته باشیم. برای انجام این کار فایل edit.php را باز کرده و آن را به صورت زیر اصلاح کنید. یک لینک در زیر تمامی مطالب قرار میدهیم و عنوان آن را حذف کل مطالب تعیین میکنیم. همچنین مقصد این لینک را deleteall.php تعیین میکنیم. در نهایت فایل edit.php شما باید به صورت زیر باشد:
<!DOCTYPE html>
<html dir=”rtl” lang=”fa-IR”>
<head>
<title>ویرایش مطلب</title>
<meta charset=”utf-8″ />
</head>
<body style=”font-family: tahoma; font-size:14px;”>
<center>
<?php
include (“config.php”);
//select all records from posts table
$get_query = mysql_query(“SELECT * FROM `posts`”);
//now using while for get each record sepratly and show it to web browser
while ($fetch_result = mysql_fetch_array($get_query))
{
$postTitle = $fetch_result[‘title’];
$postText = $fetch_result[‘text’];
$postId = $fetch_result[‘id’];
echo “<h2><a href=single.php?id=$postId>$postTitle</a> (<a href=editpost.php?id=$postId>ویرایش</a>) – (<a href=deletepost.php?id=$postId>حذف</a>)</h2>”;
}
?>
<hr>
<a href=”deleteall.php”>حذف همه مطالب</a>
</center>
</body>
</html>
البته میتوانید لینک حذف کلی مطالب را در بالای لیست نیز قرار دهید و این مورد بستگی به سلیقه خودتان دارد. توجه کنید که این لینک را خارج از حلقه باید بکار ببرید زیرا اگر لینک همانند لینک ویرایش و حذف تکی مطالب در داخل حلقه باشد، به ازای هر مطلب یک لینک با عنوان حذف همه مطالب نیز به نمایش در خواهد آمد. پس از اعمال این تغییرات صفحه edit.php شما باید صورت زیر اجرا شود:
حال یک فایل دیگر به نام deleteall.php ایجاد کنید و کدهای زیر را در آن قرار دهید:
<!DOCTYPE html>
<html dir=”rtl” lang=”fa-IR”>
<head>
<title>حذف همه مطالب</title>
<meta charset=”utf-8″ />
</head>
<body style=”font-family: tahoma; font-size:14px;”>
<center>
<?php
include (“config.php”);
//select all records from posts table
$get_query = mysql_query(“DELETE FROM `posts`”);
if($get_query){
echo “تمامی مطالب با موفقیت جذف شدند”;
}else{
echo “مشکلی در حذف همه پست ها رخ داده است”;
}
?>
</center>
</body>
</html>
این فایل نیز دقیقا همانند فایل deletepost.php است با این تفاوت که این بار در کوئری حذف رکوردها شرط کوئری را برمیداریم تا همه رکوردها حذف شوند. در نتیجه کوئری زیر:
$get_query = mysql_query(“DELETE FROM `posts`”);
به بانک داده مایاسکیوال اعلام میکند که تمام رکوردهایی که در جدول posts وجود دارد را حذف کند. مجددا با یک دستور شرطی بررسی میکنیم که اگر کوئری به درستی انجام شده باشد پیام موفقیتآمیز بودن حذف همه پستها نمایش خواهد یافت و در غیر اینصورت پیام عدم موفقیت در حذف پستها نمایش مییابد. پس از کلیک روی لینک حذف همه مطالب در صورتی که همه مراحل را به درستی انجام داده باشید باید با صفحهای مشابه زیر مواجه شوید:
تا اینجای کار شما پایه و اساس ۴ عملیات اصلی در کار با بانکهای اطلاعاتی را فرا گرفتهاید. دقت کنید این آموزشها فقط برای درک کلی شما از عملیات حذف، درج، ویرایش و مشاهده اطلاعات بوده و قطعا میتوانستیم به جای ایجاد یک فایل برای هر عملیات تمامی کدها را به صورت منظمتر در یک فایل ایجاد کنیم. اما برای درک بهتر تصمیم گرفتیم برای هر عملیات یک فایل جدید ایجاد کنیم.
اما اگر بخواهیم سیستم مدیریت محتوای ساخته شده را کاربردیتر کنیم باید موارد بیشتری را در آن در نظر بگیریم. مثلا بخش حذف و درج و ویرایش مطالب فقط برای مدیر سایت در دسترس باشد. این جزئیات را به مرور در جلسات آینده به سیستم اضافه خواهیم کرد و مباحث جدیدی را نیز در خلال آن به شما آموزش میدهیم.
نکته دیگری که لازم میدانیم اعلام کنیم، این است که برخی از دوستان در نظرات اعلام کرده بودند که چرا از pdo یا mysqli استفاده نکردهایم. در جواب این دوستان همانطور که بارها در نظرات هم پاسخ دادهایم، هدف ما آموزش پایهای پیاچپی است و در دروس آینده و پس از یادگیری مباحث شیءگرایی روشهای نوین و جدیدتر آموزش داده خواهد شد. این آموزشها برای افرادی در نظر گرفته شده که برای اولین بار قصد یادگیری پیاچپی را دارند و در ادامه آموزشها و مباحث پیشرفتهتر روشهای حرفهای برنامهنویسی نیز در سطح متوسطه و حرفهای آموزش داده میشود.