آموزش برنامه نویسی پی اچ پی قسمت چهاردهم
در ادامه سری آموزش پیاچپی قصد داریم تا روش ویرایش دادههایی که در بانک اطلاعاتی MySQL ذخیره کردهایم را به شما آموزش دهیم. در کار با بانکهای اطلاعاتی پیش از این نیز گفتیم که چند عملیات اصلی وجود دارد. در جلسات قبل روش اتصال به MySQL، افزودن دادهها و خواندن دادهها را مرور کردیم. اما یکی از مهمترین عملیاتی که حتما به آن نیاز پیدا میکنید ویرایش دادههای ذخیره شده است.
در واقع میتوان ویرایش اطلاعات در MySQL را ترکیبی از خواندن و درج داده دانست.
ویرایش دادهها در بانک اطلاعاتی MySQL
ابتدا مثل همیشه نرمافزار سرور مجازی Xampp را باز کرده و سرور آپاچی و مایاسکیوال را اجرا کنید. پوشه cms که مربوط به پروژه ما میشود را باز کرده و یک فایل جدید به نام edit.php ایجاد کنید. در این فایل قصد داریم همانند روشی که اطلاعات را در فایل index به نمایش درآوردیم، لیست مطالب را نشان دهیم اما با این تفاوت که اینبار فقط عنوان مطالب را نمایش میدهیم و در کنار هر مطلب یک گزینه برای ویرایش آن قرار میدهیم. حال کدهای زیر را در این فایل قرار داده و فایل را ذخیره کنید.
<!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>)</h2>"; } ?> </center> </body> </html>
حال به بررسی کد بالا میپردازیم. ابتدا فایل config.php را در صفحه فراخوانی کردهایم تا اتصال به بانک اطلاعاتی انجام شده و سپس جدول مورد نظر ما برای انجام عملیات مختلف انتخاب شود. سپس همانند آنچه در مورد خواندن اطلاعات و در فایل index.php انجام دادیم، در این فایل نیز عنوان مطالب را با یک کوئری از بانک اطلاعاتی MySQL دریافت کرده و سپس آنها را نمایش میدهیم. تفاوت این فایل با فایل index,php در این است که اینجا متن مطلب را نمایش نمیدهیم و در عوض، در جلو عنوان هر مطلب یک لینک با عنوان ویرایش قرار دادهایم و لینک آن را به فایلی به نام editpost.php ست کردهایم. همانند لینک ثابتی که برای نمایش هر مطلب در فایل index ایجاد کردیم در این فایل نیز یک لینک پویا برای ویرایش هر مطلب ایجاد کردهایم.
از آنجا که شناسه id هر مطلب منحصر به فرد است، همین مشخصه از هر پست را برای ایجاد لینک منحصر به فرد ویرایش هر مطلب بکار بردهایم. بنابراین با کلیک روی لینک ویرایش هر مطلب، شناسه id آن مطلب را به فایل editpost.php ارسال میکنیم تا در آن فایل با دستور GET و مانند آنچه در بخش آمورش فرمها توضیح داده بودیم، شناسه مطلب مورد نظر را دریافت کرده و بر اساس آن شناسه اطلاعات پست انتخاب شده را از بانک اطلاعاتی دریافت کنیم. پس از اجرای فایل edti.php باید صفحه شما شبیه به زیر باشد.
حال یک فایل جدید به نام editpost.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;"> <?php include ("config.php"); $pid = $_GET['id']; //select post that its id = pid $get_query = mysql_query("SELECT * FROM `posts` WHERE `id` = '$pid' "); $fetch_result = mysql_fetch_array($get_query); $postTitle = $fetch_result['title']; $postText = $fetch_result['text']; ?> <center> <form action="editpost2.php" method="post"> عنوان مطلب : <input type="text" name="postTitle" size="40" value="<?php echo $postTitle;?>"><br> متن مطلب: <br> <textarea name="postText" rows="10" cols="50"> <?php echo $postText;?> </textarea> <br> <input type="hidden" name="postID" value="<?php echo $pid;?>"> <input type="submit" value="ثبت مطلب"> </form> </center> </body> </html>
همانطور که مشاهده میکنید باز هم ابتدا فایل config.php را فراخوانی میکنیم و دلیل آن را هم مطمئنا میدانید. سپس همانند کاری که در فایل single.php انجام دادیم، ابتدا از طریق دستور GET_$ شناسه پستی که قصد ویرایش آن را داریم دریافت کرده و با استفاده از یک کوئری شرطی، تمامی مشخصات مطلبی که شناسه آن را دریافت کردهایم را از بانک اطلاعاتی بیرون میکشیم و عنوان و متن مطلب را در دو متغیر قرار میدهیم. سپس فرمی مانند فرمی که در فایل insert.php ایجاد کرده بودیم را ایجاد کرده ولی این بار بخش action را برابر editpost2.php قرار میدهیم زیرا قصد داریم محتویات این فرم به فایل editpost2.php ارسال شود.
سپس در فرم خود برای فیلد عنوان یک خاصیت جدید به نام Value را تعریف کردهایم تا مقدار عنوان دریافت شده از بانک اطلاعاتی را در آن قرار دهیم.
نکتهای که اینجا باید بدانید این است که میتوان در کنار کدهای اچتیامای به تعداد نامحدود کد پیاچپی بکار ببریم ولی باید دقت کنید که هر بار تگ پیاچپی را باز کردید باید آن را در جایی که نیاز است ببندید. ما در کد بالا پس از اینکه اطلاعات مطلب مورد نظرمان را از بانک اطلاعاتی خود بیرون کشیدهایم، تگ پیاچپی را بستهایم و سپس فرم خود را ایجاد کردهایم. مقدار مشخصه Value در فیلد عنوان مطلب را با یک کد پیاچپی پر کردهایم که به صورت زیر انجام شده است:
<?php echo $postTitle;?>
همانطور که میدانید این کد، متغیر postTitle را چاپ میکنید و هر مقداری که در مشخصه Value فیلدهای متنی قرار داده شود، به صورت پیشفرض در آن فیلد قرار داده خواهد شد. سپس در textarea مربوط به متن مطلب نیز به همین صورت و با استفاده از کد:
<?php echo $postText;?>
در این textarea قرار میدهیم. فرض کنید روی لینک ویرایش مطلب اول کلیک کردهایم. همچنین قبل از دکمه ثبت فرم، یک فیلد مخفی تعریف کردهایم که به صورت زیر است:
<input type="hidden" name="postID" value="<?php echo $pid;?>">
این فیلد به کاربر نمایش داده نمیشود چراکه نوع آن hidden تعیین شده است. اما سایر خواص این فیلد نیز همانند فیلدهای معمولی است. نام این فیلد postID تعیین شده و مقدار آن نیز برابر با شناسه مطلب است که قصد ویرایش آن را داریم و در بالای صفحه با استفاده از دستور GET_$ آن را در متغیری به نام pid ذخیره کرده بودیم.
حال اگر تمامی مراحل را تا اینجای کار به درستی انجام داده باشید، باید صفحه شما به صورت زیر اجرا شود.
به لینک این صفحه توجه کنید. در ادامه نام فایل id=1 است که نشان از این دارد که ما قصد ویرایش مطلبی که شناسه id آن برابر ۱ است را داریم. البته دقت کنید در نامگذاری متغیر URL میتوانید به جای id از هر متغییر دیگری نیز استفاده کنید ولی در این صورت باید در فایل editpost.php نیز در محلی که با دستور GET_$ میخواهیم ای دی پست را دریافت کنیم، از نام انتخاب خود استفاده کنید.
همانطور که گفتیم، پس از اعمال تغییرات در این فرم، در صورتی که دکمه ثبت مطلب را کلیک کنیم، محتویات این فرم به صفحهای به نام editpost2.php ارسال خواهد شد. پس باید فایلی به نام editpost2.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"); $newtitle = trim ($_POST['postTitle']); $newText = trim ($_POST['postText']); $pid = $_POST['postID']; if($newtitle != "" && $newText != ""){ //do insert $query_res = mysql_query("UPDATE `posts` SET `title` = '$newtitle', `text` = '$newText' WHERE `id` = '$pid'"); if($query_res){ echo "مطلب با موفقیت ویرایش شد."; }else{ echo "مشکلی در ویرایش مطلب رخ داده است. مجددا تلاش کنید"; } }else{ echo '<a href=edit.php>لیست مطالب</a>'; } ?> </center> </body> </html>
در این فایل نیز پس از فراخوانی config.php، مقادیری که از فرم editpost.php ارسال شده را با روشی که پیش از این در جلسات قبلی آموختهاید در متغییرهایی به نام newTitle، newText و pid ذخیره کرده ایم. سپس با یک دستور شرطی if بررسی میکنیم که کاربر مقادیر فیلدهای عنوان و متن مطلب را حتما وارد کرده باشد. اگر فیلد عنوان و متن مطلب خالی نباشد شرط برقرار بوده و عملیات ویرایش انجام خواهد شد.
برای ویرایش مطالب باید از کوئری UPDATE استفاده کنیم. همانطور که در کد بالا مشاهده میکنید، کد بروزسانی اطلاعات در جدول post به صورت زیر است:
$query_res = mysql_query("UPDATE `posts` SET `title` = '$newtitle', `text` = '$newText' WHERE `id` = '$pid'");
ابتدا دستور UPDATE را نوشته و سپس نام جدولی که قصد ویرایش رکوردهای آن را داریم مینویسیم. نام جدول ما در اینجا posts ست و سپس کلمه کلیدی SET را اضافه میکنیم. حالا به تعداد فیلدهایی که قصد ویرایش آنها را داریم ابتدا نام فیلد رکورد مورد نظر را نوشته و سپس مقدار جدید را برابر = قرار میدهیم. در اینجا `title` = ‘$newtitle’ است که یعنی مقدار فیلد title برابر با مقدار جدیدی که در متغیر newTitle ذخیره کرده بودیم شود. به همین صورت فیلدهای دیگر را نیز در این کوئری مینویسیم.
در آخر باید یک شرط نیز برای کوئری خود تعیین کنیم و به MYSQL بگوییم که فقط مطلبی را ویرایش کند که شناسه id آن برابر متغیر pid است. اگر این شرط را ننویسید، تمامی رکوردها یعنی تمامی مطالب ذخیره شده در بانک اطلاعاتی ما و در جدول posts با مقادر جدید جایگزین خواهند شد و قطعا ما نمیخواهیم این اتفاق رخ دهد. پس دلیل استفاده از شرطی که در انتهای این کوئری بکار بردهایم را اکنون میدانید.
در نهایت همانند آنچه در فایل ثبت مطلب انجام دادیم، با یک شرط بررسی میکنیم که آیا کوئری به درستی انجام شده یا خیر. اگر نتیجه کوئری که در متغییر query_res ذخیره شده true باشد پیغام موفقیت آمیز بودن ویرایش مطلب نمایش داده میشود و اگر false باشد، پیغامی مبنی بر عدم موفقیت ویرایش مطلب به کاربر نشان داده خواهد شد.
اگر مراحل را تا به این قسمت به درستی انجام داده باشید پس از اعمال تغییرات در پست مورد نظر خود باید با صفحهای مثل تصویر زیر مواجه شوید.
اگر با پیغام خطا مواجه شدید مراحل را به دقت بررسی کنید تا ایراد کار خود را یافته و آن را اصلاح کنید. خب، تا به اینجای کار سه عملیات اصلی و مهم را در کار با بانکهای اطلاعاتی MySQL با استفاده از PHP فرا گرفتهاید. مشاهده اطلاعات، درج اطلاعات و ویرایش اطلاعات ذخیره شده قبلی.
به عنوان تمرین این جلسه سعی کنید همانند آنچه در جلسه قبل گفته شد، فیلدهای بیشتری برای مطلب خود ایجاد کرده و در بخش ویرایش تمامی آنها را بکار ببرید. مثلا فیلدی برای نام نویسنده و فیلد دیگری برای خلاصه مطلب و ….برای اضافه کردن فیلد جدید دقیقا همانطور که در آموزشهای جلسات قبل توضیح دادیم عمل کنید و فقط برای فیلدهای جدید خود نامهای جدیدی در نظر گرفته و در بخشهای مختلف نظیر نمایش اطلاعات، و ویریش و اضافه کردن اطلاعات، بخشهای لازم برای نمایش و ویرایش آن فیلدها را نیز ایجاد کنید.
در جلسه بعدی روش حذف اطلاعات دلخواه از بانک داده مایاسکیوال را فرا خواهید گرفت. همچنین میتوانید فایلهای تمرینی این جلسه را از این لینک دانلود کنید.
منبع: www.zoomit.ir