در این جلسه روش حذف کردن رکورد از بانک اطلاعاتی و ویرایش رکوردهای بانک اطلاعاتی را آموزش می دهیم. برای حذف کردن یا ویرایش رکورد رکورد از لینک های حذف و ویرایش در کنار سطرهای جدول استفاده می کنیم.
حذف رکوردهای بانک اطلاعاتی
جهت حذف یک رکورد خاص از جدول بانک اطلاعاتی، باید ابتدا مقدار کلید اصلی آن رکورد را در اختیار داشته باشیم تا بتوانیم دستور DELETE به زبان SQL را با عبارت شرطی مناسب اجرا کنیم. این مقدار را می توانیم از طریق GET به برنامه ارسال کرده و سپس با دریافت آن، در دستور حذف استفاده کنیم. فایل stud-del.php ، دانشجویی را که شماره دانشجویی آن ارسال شده است را حذف می کند.
stud-del.php |
<?php $sid=$_GET[“sid”]; require(“config.php”); $sql= ” DELETE FROM tbl_studs WHERE sid=$sid” ; $res = mysql_query( $sql , $conn ); if ( $res ) echo ” success”; else echo “error”; mysql_close( $conn ); ?>
|
در مثال فوق شماره دانشجویی از طریق GET در یافت شده است:
برای ارسال شماره دانشجویی با روش GET به دو روش می توان عمل کرد:
در روش اول یک فرم طراحی می کنیم که دارای یک جعبه متن برای دریافت شماره دانشجویی، و یک دکمه برای ارسال آن به برنامه حذف (stud-del.php) باشد. این روش چندان مناسب نیست.
در روش دوم نیازی به طراحی فرم جداگانه نیست بلکه در برنامهی نمایش لیست دانشجویان (stud-list.php) ، در هر سطر جدول، پیوندی به برنامه حذف ( و یا ویرایش) برقرار کرده و برای آن پارامتری بنام sid با مقدار شماره دانشجویی آن سطر اضافه می کنیم.
برای ساخت پیوند همراه پارامتر از قالب زیر استفاده می کنیم:
به این منظور صفحه stud-list.php را مجدداً بصورت زیر طراحی میکنیم:
stud-list.php |
<table width=”600″ border=”1″ align=”center” dir=”rtl”> </tr> $result = mysql_query(“SELECT * FROM tbl_studs” , $conn ); </tr> |
اصلاح رکوردهای بانک اطلاعاتی
برای اصلاح یک رکورد جدول بانک اطلاعاتی باید :
- مقدار کلید اصلی (مثلاً شماره دانشجویی در جدول دانشجویان) برای ویرایش تعیین شود.
- با اتصال به بانک اطلاعای و اجرای دستور SELECT ، اطلاعات رکورد بدست آمده و در یک فرم نمایش داده شود.
- با انجام اصلاحات در فرم و ارسال آن، با اتصال به بانک اطلاعاتی و اجرای دستور UPDATE ، رکورد مورد نظر در بانک اطلاعاتی اصلاح شود.
می خواهیم مشخصات یک دانشجو از جدول tbl_studs را ویرایش کنیم:
- برای تعیین رکورد مورد ویرایش از همان روشی استفاده می کنیم که در حذف رکورد استفاده شد. یعنی قراردادن لینک هایی در هر سطر در فایل stud-list.php به همراه پارامتری بنام sid .
- برای دریافت شماره دانشجویی، بازیابی مشخصات کامل دانشجو از بانک اطلاعاتی و نمایش آنها بصورت فرم کد زیر را در صفحه stud-edit1.php می نویسیم:
stud-edit1.php |
<html> <body> require(“config.php”); $sid=$_GET[‘sid’]; $result = mysqli_query( $conn,”select * from studs where sid=$sid” ); $row =mysqli_fetch_assoc($result , $conn); ?> <form action=”stud-edit2.php” method=”post”> Sid: <input type=”text” name=”sid” value=”<?php echo $row[‘name’]; ?>” readonly/> <br> <input type= Name : <input type=”text” name=”name” value=”<?php echo $row[‘name’]; ?>”/> <br> Avgr : <input type=”text” name=”avgr” value=”<?php echo $row[‘avgr’]; ?>”/> <br> Fid: <input type=”text” name=”fid” value=”<?php echo $row[‘fid’]; ?>”/> <br> <input type=”submit” value=” edit ” /> </form> </body> </html> |
- پس از ارسال فرم فوق برنامه stud-edit2.php با کد زیر اجرا می شود تا اطلاعاتی ارسالی از فرم را دریافت کرده و با اتصال به بانک تغییرات را به بانک منتقل کند:
stud-edit2.php |
<?php $sid = $_POST[‘sid’]; $name = $_POST[‘name’]; $avgr = $_POST[‘avgr’]; $fid = $_POST[‘fid’]; require(“config.php”); $sql=”UPDATE tbl_studs SET name=’$name’, avgr=$avgr, fid=$fid WHERE sid=$sid ” ; $res = mysqli_query( $conn ,$sql); if ( $res ) echo “Success” ; else echo “Error”; mysqli_close( $conn ); ?> |
بهبود طراحی 3 : دستور headerبرای تغییر مسیر درخواست
از دستور header برای تغییر مسیر درخواست استفاده می شود. به این صورت که وقتی از طریق مرورگر صفحه ای درخواست می شود، این صفحه می تواند شامل دستور header باشد، در این دستور آدرس صفحه ای قراردارد که باید سرویس دهنده آنرا اجرا کرده و خروجی آنرا به مرورگر برگرداند. این دستور ممکن است در صفحه بعدی هم وجود داشته باشد و … تا بالاخره آخرین صفحه اجرا شده و خروجی آن به مرورگر فرستاده می شود.
بعنوان مثال در صفحه page1.php می توانیم دستور زیر را بنویسیم:
که در این صورت مرورگر با درخواست صفحه page1.php، سرور پس از اجرای دستورات این صفحه و رسیدن به دستور header ، از ادامه برنامه page1.php صرف نظر کرده و صفحه page2.php را اجرا خواهد کرد. نهایتاً چیزی که به مرورگر برگردانده می شود خروجی صفحه page2.php خواهد بود. باید توجه داشت که هیچگاه نباید تگ های HTML و یا دستورات خروجی PHP قبل از دستور header قرار گرفته و اجرا شوند. بعبارتی دیگر نباید قبل از اجرای دستور header هیچ نوع خروجی تولید شده باشد.
در برنامه اضافه، حذف و ویرایش دانشجویان میتوانیم پس از اجرای موفق دستورات DELETE، INSERT و UPDATE بجای نمایش پیغام موفقیت (success) ، دستور header را بصورت زیر اجرا کرده و درخواست را به صفحه نمایش لیست دانشجویان(stud-list.php) تغییر دهیم. و یا در صورت وقوع خطا، مسیر را به صفحه error.php که برای نمایش پیغام خطا طراحی شده است ، تغییر دهیم.
در زیر تغییرات لازم روی برنامه stud-del.php انجام شده است که باید صفحات stud-add2.php و stud-edit2.php نیز بطور مشابه تغییر کنند.
stud-del.php |
<?php $sid = $_GET[‘sid’]; require(“config.php”); $res = mysqli_query($conn ,”DELETE FROM tbl_studs WHERE sid=$sid ” ); if ( $res ) header(“location:stud-list.php”); else header(“location:error.php”); ?> |
صفحه error.php می تواند حداقل دارای طراحی زیر یا طراحی پیشرفته تری باشد.
error.php |
<html> |
بهبود طراحی 4: ادغام فایل ها جفتی
تا بحال برای عملیات درج و ویرایش رکورد از دو فایل مجزا استفاده شد، فایل اول برای نمایش فرم و فایل دوم برای اجرای دستور درج یا اصلاح روی بانک اطلاعاتی. با روش زیر می توان برای هر عمل ، دو فایل را با هم ترکیب کرد.
در مثال زیر ابتدا وجود یکی از متغیرهای داخل فرم بررسی می شود، اگر وجود داشت به معنای ارسال فرم است و باید دستورات دریافت اطلاعات فرم و اجرای درج (INSERT ) شود ، در غیر اینصورت باید فرم نمایش داده شود. یعنی اینکه صفحه stud-add.php کار هر دو صفحه stud-add1.php و stud-add2.php با انجام می دهد:
stud-add1.php + stud-add2.php = stud-add.php
stud-add.php |
<?php if (isset ($_POST[‘name’] )) { $name = $_POST[‘name’]; $avgr = $_POST[‘avgr’]; $fid = $_POST[‘fid’]; include(‘config.php’); $sql=”INSERT INTO tbl_studs (name, avgr, fid) VALUES(‘$name’ ,$avgr ,$fid )” ; $res=mysql_query( $sql ,$conn); if ( $res ) header(“location:stud-list.php”); else header(“location:error.php”); } ?> <html> <body> <form action=”stud-add.php” method=”post”> Name : <input type=”text” name=”name” /> Avgr : <input type=”text” name=”avgr” /> Fid: <input type=”text” name=”fid” /> <input type=”submit” value=” add ” /> </form> </body> </html>
|