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

اتصال به بانکاطلاعاتی
برای وصلشدن به بانکاطلاعاتی، قبل از هرکاری، یک فایل با نام 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. کار اصلی این متد این است که وقتی عملیات با موفقیت انجام شد، یک رویدادی انجام گیرد. مثلاً یک پیغام نمایش داده شود و بگوید که رکورد حذف شد یا یک همچینچیزی.
یک افکتی هم در آخر درست میکنیم که وقتی رکورد حذف شد، از دیدمان پنهان شود که در خطهای پانزده و شانزده، کد ِ مربوط به افکت را میبینید. ابتدا رنگزمینهی رکورد را قرمز و بعد از آن، مخفیاش میکنیم. همین!
اینجا دمو را ببینید و این نمونه را دریافت کنید:









صالح
در ۸۹/۰۱/۲۶ گفت:ساده ، کامل و بسیار کاربردی بود
ممنون
پاسخ
مرتضا
در ۸۹/۰۱/۲۶ گفت:سلام
واقعا مطلب مفیدی بود .
بعد از یه وقفه توی نوشتن مطلب خوبی نوشتی .
دستت درست – خسته نباشی .
پاسخ
پیام
در ۸۹/۰۱/۲۶ گفت:عالی بود
ممنون
پاسخ
hadi
در ۸۹/۰۱/۲۸ گفت:بسیار عالی بود.
همین دیروز بود فکر کنم چند ساعت وقتم صرف پیدا کردن همین متد ajax() شد توی گوگل تا پیداش کردم و فهمیدمش
پاسخ
Ali
در ۸۹/۰۱/۳۱ گفت:سلام. عزیز خسته نباشید. من که زیاد از این چیزا سر در نمیارم. میخواستم بپرسم که شما برنامه سرچ رو طراحی کردید؟؟؟
پاسخ
حسن
در ۸۹/۰۲/۰۱ گفت:خوب بود .
پاسخ
محسن
در ۸۹/۰۲/۰۱ گفت:سلام
۴ ماهه که بخاطر سربازی نتونستم مطالبتو دتبال کنم . و این وضعبت تا ۱۲ ماه دیگه ادامه داره … :) خوش باشی … به جای ما هم با اینترنت و ای دی اس ال و اینا حال کنید تا من بیام
پاسخ
محمد
در ۸۹/۰۲/۰۵ گفت:آقا مطلب خیلی باحالی بود
با اجازهت یه کپیش رو روی سایتم گذاشتم [البته با ذکر منبع]
پاسخ
اللهیار
در ۸۹/۰۲/۱۱ گفت:مرسی از زحمتی که کشیدی
پاسخ
مسعود
در ۸۹/۰۲/۱۲ گفت:سلام علی عزیز….خوشحال میشم اگه با هم صحبتی در رابطه با وب داشته باشیم.
masoodi153
این ایدیه منه.هر وقت تونستی اد کن.ممنون
پاسخ
مسعود
در ۸۹/۰۲/۲۵ گفت:خوشم میاد سال به سال به نظرات سر نمیزنی :دی
من همچنان منتظرم
پاسخ
علیها
در ۸۹/۰۲/۲۵ گفت:@مسعود
سلام رفیق
من تو جیتاک هستم فقط.
پاسخ
مسعود
در ۸۹/۰۲/۳۰ گفت:پس این ای دی رو اد کن….masoodyazdi
بای
پاسخ
فاطمه
در ۸۹/۰۳/۰۱ گفت:سلام من این کدو تست کردم خیلی عالی بود و تشکر
اما واقعا از دیتابس چیزی حذف نکرد ظاهرا از صفحه ایندکس حذف میشد اما در دیتابس رکوردها همچنان بودند
پاسخ
علی
در ۸۹/۰۳/۲۳ گفت:سلام دوست عزیز ، آموزش خوبی بود من از این آموزش استفاده کردم.
خواهشی داشتم در صورت امکان روشی به همین سادگی ( راحتی ) برای ویرایش مطالب و درج مطالب هم قرار دهید . ( مخصوصا ویرایش ) .
واقعا عالی بود .
با سپاس
یا علی
پاسخ
احمد
در ۸۹/۰۴/۰۴ گفت:سلام من تو را با نام یک طراح وب ثبت کردم اگر می شود لطف کنید من را با نام فناوری و اطلاعات جهان ثبت کنید . از سایت خوبتون هم ممنونم
پاسخ
h
در ۸۹/۰۵/۰۳ گفت:سلام چرا یک خبرنامه درست نمیکنید مثل سایتهای دیگه
اگه درست کردی ایمیل منم لطفا بزارید توش
ممکنه دیگه پیداتون نکنم
با این کار با خبر میشم
پاسخ
voltan
در ۸۹/۰۵/۲۱ گفت:سلام بسیار عالی بود . دستت درد نکنه .
پاسخ
علی
در ۸۹/۰۷/۰۳ گفت:سلام
عالی بود میشه لطف کنید اموزش حذف چندین رکورد باهم به کمک چک باکس و آرایه ها را اموزش بدهید
پاسخ
سلام
در ۸۹/۰۷/۱۴ گفت:بسیار عالی و کامل بود
خسته نباشید
لطفا ادامه دهید
با تشکر فراوان
پاسخ
فاطمه. الف
در ۸۹/۰۷/۱۴ گفت:سلام،
من هم کد رو تست کردم،
به دلایلی خیلی مشکل داشتم تا اجرا بشه، ولی شکر خدا شد،
اما همون طور که فاطمه خانم گفتن، از دیتا بیس چیزی حذف نمیشه، گویا اصلا صفحه ی 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 ایجاد شده باشه
دیگه مشکلی نیست
در ضمن اگر قبلن علامت سوال بوده و کوئری بالا رو اضافه کنید علامت سوالا تصصحیح نمیشن و باید خودتون دستی تصحیح کنید.
موفق باشید.
پاسخ
hamzeh
در ۸۹/۰۹/۲۴ گفت:سلام این۱۰۰امین سایتیه که سر زدم ولی همه ماشاا… php کارن محض رضای خدا ثواب داره یکی بگه توی asp چطور ا این تکنیک استفاده کنیم خیلی لازم.
چقدر خواهش کردم!!!!!!!!!!!!!!
پاسخ
حامد
در ۸۹/۱۰/۰۷ گفت:سلام دوست عزیز. کارت خیلی درسته! دستت درد نکنه…
پاسخ
حامد
در ۸۹/۱۰/۱۳ گفت:سلام. دستتون درد نکنه بابت این آموزشایی که میزارین. من یکم تازه وارد این وادی شدم! یه سوال داشتم. امنیت این روش چقدر هست؟ یعنی قرار دادن متد پاک کردن رکورد توی فایل جاوا باعث نمیشه یه هکر بتونه راحت رکوردهارو پاک کنه؟ (اگه سوالم مسخره هست لطفا نخندید! آخه گفتم تازه واردم)
ممنون میشم جواب بدید.
پاسخ
علیها
در دی ۱۳م, ۱۳۸۹امنیت برنامه به این تابع ایجکس ارتباطی نداره و اصلا اطلاعات مهمی از این طریق قابل دسترسی قرار نگرفته. امنیت باید اول در کل سیستم و سپس در ساختار کدی که برای حذف رکورد با پیاچپی نوشتیم برقرار بشه. و به این سوال من جواب بدید، هکری که تونسته به صفحهی دلیت رکوردها دسترسی پیدا کنه، چه نیازی به این کدهای جاوااسکریپتمون داره؟ ;)
پاسخ
حامد
در دی ۱۳م, ۱۳۸۹مرسی از جواب سریعتون! من که گفتم خیلی وارد نیستم <": منظورم اینه که مثلاً یک سری کد اضافه کنه به فایل delete.js (فکر کنم میگن inject ؟؟؟) که از طریق اون مثلا کل database رو پاک کنه! میشه؟
پاسخ
eli_68
در ۹۰/۰۵/۱۰ گفت:با سلام.آقا دست مریزاد واقعا عالی بود با بیانی ساده و قابل فهم اما ای کاش ادامه بدید.
پاسخ
جواد
در ۹۰/۱۱/۰۹ گفت:مرسی ..استفاده کردم…..
پاسخ
افشین
در ۹۰/۱۱/۲۴ گفت:مرسی ار آموزش های خو بتون
دست تون درد نکنه خدا قوت
پاسخ