آموزش PHP - جلسه پانزدهم: حذف داده ها از بانک اطلاعاتی MySQL
همانطور که میدانید در کار با دادهها و ذخیره اطلاعات ۴ عملیات اصلی را پیش رو داریم؛ درج، خواندن، ویرایش و حذف اطلاعات. گاهی نیاز پیدا میکنید تا یکسری از دادههای مورد نظرتان را از جداول MySQL حذف کنید. برای انجام این عملیات نیز باید از کوئری مخصوص حذف دادهها استفاده کنیم.
پیش از ادامه این مبحث یک مرور کلی بر بانک اطلاعاتی CMS و جدول posts خواهیم داشت. در این جدول همانطور که میدانید سه فیلد برای هر مطلب در نظر گرفتیم. فیلد id برای نگهداری شناسه منحصربفرد عددی هر مطلب، فیلد title به منظور نگهداری عنوان مطالب و فیلد text برای نگهداری متن مطلب. پس هر رکورد در جدول posts شامل این سه فیلد است. اما برای حذف اطلاعات نیز نیاز به id منحصربفرد رکوردها خواهید داشت. البته اگر بخواهید تمام رکوردها را با هم و به صورت یکجا حذف کنید نیازی به شناسه یکتای id نداریم. حال به ادامه آموزش میپردازیم.
نرمافزار Xampp را باز کرده و سرور آپاچی و MySQL را اجرا کنید. حالا فایل edit.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 browserwhile ($fetch_result = mysql_fetch_array($get_query)){$postTitle = $fetch_result['title'];$postText = $fetch_result['text'];$postId = $fetch_result['id'];echo "$postTitle (ویرایش) - (حذف)";}?>
تنها تغییری که در این فایل ایجاد کردیم، اضافه کردن یک لینک ثابت جدید برای حذف هر مطلب است. همانطور که جلسه پیش یک لینک ثابت برای ویرایش هر مطلب ایجاد کردیم به همان صورت یک لینک دیگر با عنوان حذف برای هر مطلب ایجاد کردهایم و لینک مقصد آن را deletepost.php تعیین کردهایم. همچنین شناسه منحصربفرد هر پست را با متغیر id? به فایل deletepost.php ارسال کردهایم تا از این طریق بتوانیم پست انتخابی را حذف کنیم. مطمئنا با توجه به توضیحات کاملی که تا کنون در این مورد ارائه دادهایم، میدانید که دلیل این کار چیست. پس از اجرای این فایل باید صفحه وب شما شبیه به زیر باشد:
حال یک فایل جدید به نام deletepost.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 "مشکلی در حذف پست مورد نظر رخ داده است.";}?>
حال به بررسی کد بالا میپردازیم. از آنجا که شناسه پست مورد نظر را از طریق آدرس 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 شما باید به صورت زیر باشد:
ویرایش مطلب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 browserwhile ($fetch_result = mysql_fetch_array($get_query)){$postTitle = $fetch_result['title'];$postText = $fetch_result['text'];$postId = $fetch_result['id'];echo "$postTitle (ویرایش) - (حذف)";}?>حذف همه مطالب
البته میتوانید لینک حذف کلی مطالب را در بالای لیست نیز قرار دهید و این مورد بستگی به سلیقه خودتان دارد. توجه کنید که این لینک را خارج از حلقه باید بکار ببرید زیرا اگر لینک همانند لینک ویرایش و حذف تکی مطالب در داخل حلقه باشد، به ازای هر مطلب یک لینک با عنوان حذف همه مطالب نیز به نمایش در خواهد آمد. پس از اعمال این تغییرات صفحه edit.php شما باید صورت زیر اجرا شود:
حال یک فایل دیگر به نام deleteall.php ایجاد کنید و کدهای زیر را در آن قرار دهید:
حذف همه مطالبinclude ("config.php");//select all records from posts table$get_query = mysql_query("DELETE FROM `posts`");if($get_query){echo "تمامی مطالب با موفقیت جذف شدند";}else{echo "مشکلی در حذف همه پست ها رخ داده است";}?>
این فایل نیز دقیقا همانند فایل deletepost.php است با این تفاوت که این بار در کوئری حذف رکوردها شرط کوئری را برمیداریم تا همه رکوردها حذف شوند. در نتیجه کوئری زیر:
$get_query = mysql_query("DELETE FROM `posts`");
به بانک داده مایاسکیوال اعلام میکند که تمام رکوردهایی که در جدول posts وجود دارد را حذف کند. مجددا با یک دستور شرطی بررسی میکنیم که اگر کوئری به درستی انجام شده باشد پیام موفقیت آمیز بودن حذف همه پستها نمایش خواهد یافت و در غیر این صورت پیام عدم موفقیت در حذف پستها نمایش مییابد. پس از کلیک روی لینک حذف همه مطالب در صورتی که همه مراحل را به درستی انجام داده باشید باید با صفحهای مشابه زیر مواجه شوید:
تا اینجای کار شما پایه و اساس ۴ عملیات اصلی در کار با بانکهای اطلاعاتی را فرا گرفتهاید. دقت کنید این آموزشها فقط برای درک کلی شما از عملیات حذف، درج، ویرایش و مشاهده اطلاعات بوده و قطعا میتوانستیم به جای ایجاد یک فایل برای هر عملیات تمامی کدها را به صورت منظمتر در یک فایل ایجاد کنیم. اما برای درک بهتر تصمیم گرفتیم برای هر عملیات یک فایل جدید ایجاد کنیم.
اما اگر بخواهیم سیستم مدیریت محتوای ساخته شده را کاربردیتر کنیم باید موارد بیشتری را در آن در نظر بگیریم. مثلا بخش حذف و درج و ویرایش مطالب فقط برای مدیر سایت در دسترس باشد. این جزئیات را به مرور در جلسات آینده به سیستم اضافه خواهیم کرد و مباحث جدیدی را نیز در خلال آن به شما آموزش میدهیم.
نکته دیگری که لازم میدانیم اعلام کنیم، این است که برخی از دوستان در نظرات اعلام کرده بودند که چرا از pdo یا mysqli استفاده نکردهایم. در جواب این دوستان همانطور که بارها در نظرات هم پاسخ دادهایم، هدف ما آموزش پایهای پیاچپی است و در دروس آینده و پس از یادگیری مباحث شیء گرایی روشهای نوین و جدیدتر آموزش داده خواهد شد. این آموزشها برای افرادی در نظر گرفته شده که برای اولین بار قصد یادگیری پیاچپی را دارند و در ادامه آموزشها و مباحث پیشرفتهتر روشهای حرفهای برنامهنویسی نیز در سطح متوسطه و حرفهای آموزش داده میشود.
برای دانلود فایلهای تمرینی این جلسه اینجا کلیک کنید. اگر سوالی در مورد مباحث این جلسه دارید آن را در بخش نظرات اعلام کنید.
نظرات