ای‌جکس‌بازی » حذف رکورد از بانک‌اطلاعاتی با جی‌کوئری

بعضی‌ها فکر می‌کنند که مثلاً جی‌کوئری فقط برای درست‌کردن ِ افکت‌ها و این‌چیزهاست، درصورتی که اصل ِ جی‌کوئری، ماجرای فرستادن درخواست و گرفتن پاسخ از سمت آقای سرور به‌صورت ای‌جکس می‌باشد که الان می‌خواهیم به یک مورد کوچکی از آن اشاره کنیم. این‌که چه‌طور یک رکورد از بانک‌اطلاعاتی‌مان را بدون بارگذاری‌شدن ِ هیچ صفحه‌ای حذف کنیم. این‌کار را بر پایه‌ی پی‌اچ‌پی انجام می‌دهیم.

اتصال به بانک‌اطلاعاتی

برای وصل‌شدن به بانک‌اطلاعاتی، قبل از هرکاری، یک فایل با نام config.php می‌سازیم و آن را با ادیتورمان باز می‌کنیم و کد زیر را در آن می‌نویسیم:

<?php
$db_host = 'localhost';
$db_name = 'your database name';
$db_user = 'your username';
$db_pass = 'your password';
?>

کار خاصی نکردیم، فقط چند متغیر به‌نام‌های db_host، db_name، db_user و db_pass تعریف کردیم که مقادیر آن‌ها را به‌ترتیب، نوع هاست (که اصولا همان localhost می‌باشد)، نام بانک‌اطلاعاتی، نام‌کاربری‌ای که با آن به بانک اطلاعاتی دسترسی پیدا می‌کنیم و در آخر هم رمزعبور را دادیم.

حالا دیگر هرجایی که خواستیم به بانک‌اطلاعاتی وصل بشویم، کافی است این فایل را فراخوانی کنیم.

حذف رکورد

ابتدا باید یک صفحه‌ای برای نمایش رکوردها داشته باشیم. پس یک فایل با نام index.php می‌سازیم و کدهای زیر را در آن می‌نویسیم:

<html>
<head>
<title>حذف رکورد از بانک‌اطلاعاتی با جی‌کوئری</title>
<script src="js/jquery.js" type="text/javascript"></script>
<script src="js/delete.js" type="text/javascript"></script>
</head>
<body>
<?php
include("config.php");

$connect = @mysql_connect($db_host, $db_user, $db_pass) or die('Database Connection Error!');
@mysql_select_db($db_name);

$query = "SELECT * FROM my_tbl ORDER BY id DESC";
$result = @mysql_query($query) or die(mysql_error());
while($row = @mysql_fetch_array($result))
{
?>
<div class="record">
<div class="content"><?php echo($row[content]); ?></div>
<div class="date"><?php echo($row[content_date]); ?></div>
<div class="tools"><a class="delete" id="<?php echo($row[id]); ?>" href="#">حذف</a></div>
</div>
<?php
}
mysql_close($connect);
?>
</body>
</html>

در خط نهم، فایل کانفیگ که حاوی مشخصات بانک‌اطلاعاتی‌مان بود را فراخوانی کردیم. در خط یازدهم و دوازدهم، به بانک‌اطلاعاتی وصل شدیم. در خط‌های چهاردهم و پانزدهم هم تیبل ِ موردنظرمان را انتخاب کردیم و از خط شانزدهم تا بیست‌وسوم هم یک حلقه برای نمایش رکوردهایی که در تیبل ِ انتخاب‌شده‌مان قرار دارد ایجاد کردیم.
در خط بیست‌وششم، اتصال به بانک‌اطلاعاتی را بستیم که البته این دستور فقط جنبه‌ی امنیتی دارد و کاری به عمل‌کرد ِ کدمان ندارد.

حالا دیگر فقط دو مرحله پیش ِ رو داریم. اولی نوشتن اسکریپت ِ حذف رکورد با پی‌اچ‌پی و دومی نوشتن کد جی‌کوئری‌ای که درخواست ِ ما (همان حذف رکورد) را بفرستد به اسکریپتی که در مرحله‌ی اول نوشتیم و آن را اجرا کند.

پس اول یک فایل با نام delete.php می‌سازیم و کدهای زیر را در آن می‌نویسیم:

<?php
include("config.php");

$connect = @mysql_connect($db_host, $db_user, $db_pass) or die('Connection Error');
@mysql_select_db($db_name);

$id = $_GET['id'];

$query = "DELETE FROM my_tbl WHERE id = '$id'";
mysql_query($query);

mysql_close($connect);
?>

باز هم در ابتدا فایل کانفیگ را فراخوانی کردیم و بعد از آن هم به بانک‌اطلاعاتی وصل شدیم. در خط هفتم یک متغیر با نام id تعریف کردیم که جلوتر در مورد ماهیتش توضیح می‌دهم. در خط نهم و دهم هم کد مربوط به حذف رکورد را نوشتیم و در پایان اتصال به بانک‌اطلاعاتی را بستیم.

حالا می‌رویم سراغ کد جی‌کوئری‌مان. یک فایل با نام delete.js می‌سازیم و آن را با ادیتورمان باز می‌کنیم. کدهای زیر را در آن می‌نویسیم:

$(function() {
$(".delete").click(function(){
var element = $(this);
var del_id = element.attr("id");
var info = 'id=' + del_id;
 if(confirm("مطمئنید که قصد حذف این رکورد را دارید؟ این غیرقابل‌بازگشت خواهد بود!"))
		  {
 $.ajax({
   type: "GET",
   url: "delete.php",
   data: info,
   success: function(){
   }
 });
	$(this).parents(".record").css({ backgroundColor: "red" }, "fast")
	.animate({ opacity: "hide" }, "slow");
 }

return false;
});
});

اگر دقت کرده باشید، در صفحه‌ای که رکوردهای‌مان نمایش داده می‌شوند یک دکمه‌ای قرار دادیم که کلاس ِ آن delete هست. به همین خاطر در کد بالا، قبل از هرچیز می‌گوییم که وقتی روی دکمه‌ی حذف کلیک شد، آن‌وقت اتفاقاتی که در ادامه می‌گویم، بی‌اُفتند.

اولین‌کاری که باید بکنیم این هست که شناسه‌ی رکوردی که دکمه‌ی حذف ِ آن را زده‌ایم، مشخص شود. برای این‌کار، در صفحه‌ای که رکوردها نمایش داده می‌شوند، در آی‌دی ِ هر رکورد، شناسه‌ی آن را برمی‌گرداندیم. حالا دیگر کارمان راحت شد و در کد بالا می‌بینید که شناسه‌ی رکورد را خیلی راحت در می‌آوریم (خط‌های ۳ تا ۵). یادتان هست که در فایل delete.php، متغیر ِ $id را ایجاد کرده بودیم؟ مقدار آن برابر با شناسه‌ی رکورد که در کد بالا مشخصش می‌کنیم می‌شود. حالا باید یک پیغام به کاربر بدهیم که اگر آن را تایید کند، آن‌وقت عملیات ِ حذف ِ رکورد انجام بشود.

اصل ماجرا این‌جاست. ما از تابع $.ajax() برای ارسال اطلاعات به اسکریپتی که برای حذف رکورد نوشته بودیم استفاده می‌کنیم. مقدار ِ متد ِ url، را برابر با آدرس فایل delete.php قرار می‌دهیم. این تابع یک متدی دارد به‌نام success. کار اصلی این متد این است که وقتی عملیات با موفقیت انجام شد، یک رویدادی انجام گیرد. مثلاً یک پیغام نمایش داده شود و بگوید که رکورد حذف شد یا یک همچین‌چیزی.
یک افکتی هم در آخر درست می‌کنیم که وقتی رکورد حذف شد، از دید‌مان پنهان شود که در خط‌های پانزده و شانزده، کد ِ مربوط به افکت را می‌بینید. ابتدا رنگ‌زمینه‌ی رکورد را قرمز و بعد از آن، مخفی‌اش می‌کنیم. همین!

این‌جا دمو را ببینید و این نمونه را دریافت کنید:

دیدگاه‌ها (۳۹)

  • ساده ، کامل و بسیار کاربردی بود
    ممنون

    پاسخ

  • سلام
    واقعا مطلب مفیدی بود .
    بعد از یه وقفه توی نوشتن مطلب خوبی نوشتی .
    دستت درست – خسته نباشی .

    پاسخ

  • عالی بود
    ممنون

    پاسخ

  • بسیار عالی بود.
    همین دیروز بود فکر کنم چند ساعت وقتم صرف پیدا کردن همین متد ajax() شد توی گوگل تا پیداش کردم و فهمیدمش

    پاسخ

  • سلام. عزیز خسته نباشید. من که زیاد از این چیزا سر در نمیارم. میخواستم بپرسم که شما برنامه سرچ رو طراحی کردید؟؟؟

    پاسخ

  • خوب بود .

    پاسخ

  • سلام
    ۴ ماهه که بخاطر سربازی نتونستم مطالبتو دتبال کنم . و این وضعبت تا ۱۲ ماه دیگه ادامه داره … :) خوش باشی … به جای ما هم با اینترنت و ای دی اس ال و اینا حال کنید تا من بیام

    پاسخ

  • آقا مطلب خیلی باحالی بود
    با اجازه‏ت یه کپی‏ش رو روی سایتم گذاشتم [البته با ذکر منبع]

    پاسخ

  • مرسی از زحمتی که کشیدی

    پاسخ

  • سلام علی عزیز….خوشحال میشم اگه با هم صحبتی در رابطه با وب داشته باشیم.

    masoodi153
    این ایدیه منه.هر وقت تونستی اد کن.ممنون

    پاسخ

  • خوشم میاد سال به سال به نظرات سر نمیزنی :دی
    من همچنان منتظرم

    پاسخ

  • @مسعود
    سلام رفیق
    من تو جی‌تاک هستم فقط.

    پاسخ

  • پس این ای دی رو اد کن….masoodyazdi
    بای

    پاسخ

  • سلام من این کدو تست کردم خیلی عالی بود و تشکر
    اما واقعا از دیتابس چیزی حذف نکرد ظاهرا از صفحه ایندکس حذف میشد اما در دیتابس رکوردها همچنان بودند

    پاسخ

  • سلام دوست عزیز ، آموزش خوبی بود من از این آموزش استفاده کردم.

    خواهشی داشتم در صورت امکان روشی به همین سادگی ( راحتی ) برای ویرایش مطالب و درج مطالب هم قرار دهید . ( مخصوصا ویرایش ) .

    واقعا عالی بود .
    با سپاس
    یا علی

    پاسخ

  • سلام من تو را با نام یک طراح وب ثبت کردم اگر می شود لطف کنید من را با نام فناوری و اطلاعات جهان ثبت کنید . از سایت خوبتون هم ممنونم

    پاسخ

  • سلام چرا یک خبرنامه درست نمیکنید مثل سایتهای دیگه
    اگه درست کردی ایمیل منم لطفا بزارید توش
    ممکنه دیگه پیداتون نکنم
    با این کار با خبر میشم

    پاسخ

  • سلام بسیار عالی بود . دستت درد نکنه .

    پاسخ

  • سلام
    عالی بود میشه لطف کنید اموزش حذف چندین رکورد باهم به کمک چک باکس و آرایه ها را اموزش بدهید

    پاسخ

  • بسیار عالی و کامل بود
    خسته نباشید
    لطفا ادامه دهید
    با تشکر فراوان

    پاسخ

  • سلام،
    من هم کد رو تست کردم،

    به دلایلی خیلی مشکل داشتم تا اجرا بشه، ولی شکر خدا شد،

    اما همون طور که فاطمه خانم گفتن، از دیتا بیس چیزی حذف نمیشه، گویا اصلا صفحه ی delete.php اجرا نمیشه!!!

    پاسخ

    باید نام تیبل موردنظرتون رو در خط ۹ از فایل delete.php وارد کنید.

    پاسخ

    گمون نمی کنم مشکل من این باشه!
    چون دقیقا این کد رو استفاده نکردم، حذف از بانک اطلاعاتی تست شده و درست کار می کنه…
    فکر می کنم در مورد من، صفحه ای که آدرسش در خط ۱۰ delete.js داده شده اصلا اجرا نمیشه!:(
    البته آدرس رو متناسب با نیازم عوض کردم :)

    نمی دونم مشکل از کجاست… همین که ظاهرا هم موفق شدم جواب بگیرم خوبه! چون
    مشکل مشابهی هم با تست مطلب ” بارگذاری محتوای صفحات با جی‌کوئری” داشتم …

    در هر صورت از مطالب مفید و پاسختون ممنونم.@};-

    پاسخ

  • سلام
    من کد رو وقتی اجر ا می کنم پیغام زیر رو میده. اگه میشه بگین مشکل از کجاست.

    Notice: Use of undefined constant content – assumed ‘content’ in G:\Program Files\EasyPHP-5.3.3\www\jDelete\index.php on line 27

    پاسخ

    مشکل مربوط به نادرست بودن نام تیبل و فیلدهای دیتابیس‌تون هست.

    پاسخ

    فیلد ها رو میاره ولی به صورت علامت سئوال همونی که پاک کردین ولی نمیدونم چرا. البته در کنارش اون پیغام رو هم میاره. در ضمن از هر دیتابیسی هم که مشکل collation هم نداره استفاده کردم ولی مشکلش همونه

    پاسخ

    این کوئری رو بعد از خط ۱۵ قرار بدین:

    mysql_query("SET NAMES 'utf8'");

    پاسخ

    دوست من مشکلم حل شد دیگه اون پیغامها رو نشون نمیده ولی نمیدونم چرا هنوز علامت سئوال به جای جمله فارسی نشون داده میشه

    پاسخ

    کوئری که گفتم اضافه کنید برای حل مشکل همین علامت سوال هست. تست کنید ببینیم چه می‌شه.

  • اون رو که گفتی گذاشتم ولی اصلا نمیدونم چرا اجرا نمیشه. اگه میشه یه تست شده جدید برام بذارین. شرمنده اذیتت کردم

    پاسخ

    دوست عزیز شما صفحه هاتونو با UTF-8 ذخیره کنید

    بانکتون هم UTF-8 ایجاد شده باشه

    دیگه مشکلی نیست
    در ضمن اگر قبلن علامت سوال بوده و کوئری بالا رو اضافه کنید علامت سوالا تصصحیح نمیشن و باید خودتون دستی تصحیح کنید.

    موفق باشید.

    پاسخ

  • سلام این۱۰۰امین سایتیه که سر زدم ولی همه ماشاا… php کارن محض رضای خدا ثواب داره یکی بگه توی asp چطور ا این تکنیک استفاده کنیم خیلی لازم.
    چقدر خواهش کردم!!!!!!!!!!!!!!

    پاسخ

  • سلام دوست عزیز. کارت خیلی درسته! دستت درد نکنه…

    پاسخ

  • سلام. دستتون درد نکنه بابت این آموزشایی که میزارین. من یکم تازه وارد این وادی شدم! یه سوال داشتم. امنیت این روش چقدر هست؟ یعنی قرار دادن متد پاک کردن رکورد توی فایل جاوا باعث نمیشه یه هکر بتونه راحت رکوردهارو پاک کنه؟ (اگه سوالم مسخره هست لطفا نخندید! آخه گفتم تازه واردم)
    ممنون میشم جواب بدید.

    پاسخ

    امنیت برنامه به این تابع ای‌جکس ارتباطی نداره و اصلا اطلاعات مهمی از این طریق قابل دسترسی قرار نگرفته. امنیت باید اول در کل سیستم و سپس در ساختار کدی که برای حذف رکورد با پی‌اچ‌پی نوشتیم برقرار بشه. و به این سوال من جواب بدید، هکری که تونسته به صفحه‌ی دلیت رکوردها دسترسی پیدا کنه، چه نیازی به این کدهای جاوااسکریپت‌مون داره؟ ;)

    پاسخ

    مرسی از جواب سریعتون! من که گفتم خیلی وارد نیستم <": منظورم اینه که مثلاً یک سری کد اضافه کنه به فایل delete.js (فکر کنم میگن inject ؟؟؟) که از طریق اون مثلا کل database رو پاک کنه! میشه؟

    پاسخ

  • با سلام.آقا دست مریزاد واقعا عالی بود با بیانی ساده و قابل فهم اما ای کاش ادامه بدید.

    پاسخ

  • مرسی ..استفاده کردم…..

    پاسخ

  • مرسی ار آموزش های خو بتون
    دست تون درد نکنه خدا قوت

    پاسخ

دیدگاه خود را ارسال کنید


می‌توانید از برخی کدهای HTML استفاده نمایید:


<a> <b> <blockquote> <i> <em> <pre> <code> <strong>