آموزش کامل ایجاد سیستم like مطالب با PHP و AJAX (قسمت چهارم)

- visibility ۴٨ mode_comment

سلام دوستان،توی قسمت های قبلی ما کد های مربوط به قسمت طراحی و هم چنین کد های درخواست ای جکس رو نوشتیم ،تو این قسمت کد های PHP و mysql رو می نویسیم،قبل از شروع من باید یه نکته بگم و اونم اینه که به خاطر کارکرد بهتر کد های من تغییرات جزئی رو در کد های HTML و جاوا اسکریپت دادم که شما می تونید از فایل پروژه دانلود کنید و توضیح این قسمت های ویرایش شده هم میمونه برای قسمت بعدی که قسمت آخر هم هست.

شروع مرحله به مرحله

خوباول از همه باید جدول های دیتابیس خودمون رو بسازیم،ما اینجا دو تا جدول داریم یکی جدول مطالب (posts) و یکی هم جدول likes،جدول مطالب به غیر از ستون های معمول خودش که میتونه عنوان مطلب یا متن مطلب یا هر چیز دیگه ای که داره،دارای تو ستون up و down هست که تعداد لایک های مثبت و منفی رو توی خودشون نگهداری میکنن.

خوب این کد SQL ساخت جدول مطالب :

البته ما این جا برای راحتی کار ستون ها رو ساده گرفتیم چون کار اصلی ما با همون دو تا ستون up و down هست.

خوب حالا ما جدول likes رو داریم،که این جدول لایک هایی که برای یه مطلب ثبت میشه رو توی خودش نگه میداره (با استفاده از این جدول میتونیم محدودیت IP کاربران یا مثلا محدودیت هر لایک برای هر مطلب توی 24 ساعت قرار بدیم)،توی این جدول ما ستون های ip_id,ip,p_id,ip_date رو داریم (عجب چیزی شد 🙂 !)،ستون ip_id همون primary_key ماست که از ورود داده های تکراری جلوگیری میکنه،ستون ip هم ip کاربر رو توی خودش نگهداری میکنه،ستون p_id هم id مطلبی که برای اون لایک خورده رو نگهداری میکنه (ما این ستون رو به صورت Foreign Key تعریف میکنیم تا مطمئن باشیم که مقادیری که توی این ستون قرار میگیره دقیقا همون مقادیری هست که توی ستون id جدول مطالب قرار میگیره).

خوب اینم از کد ساخت جدول likes:

توی خط اخر هم میبینید که توی تعریف Foreign key ما بعدش از کلمه References استفاده کردیم،خوب واسه اینه که مرجع این ستون ما (p_id) همون ستون id جدول باشه دیگه،دلیلشم بالا گفتم.

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

اول بگم فایل database توی فایل پروژه هست پس نگران نباشید،ما دو تا متغییر دریافت میکنیم یکی func یکی هم id (این id همون id مطلب ما هست که باید برای ثبت لایک اینجا لازمش داریم،البته من اینو توی قسمت ویرایش ها اضافه کردم و توضیحش برا قسمت بعده پس اصلا نگران نباشید)،متد ارسال ما GET بود پس با GET دریافت میکنیم،متغییر های func و id رو که تعریف کردیم مقدار دهی میکنیم و چک میکنیم که اگه خالی بودن ار برنامه خارج شو (این برا اینه که یکی شیطونی نکنه و ادرس رو مستقیم بده و اطلاعات خالی بفرسته و دردسر های بعدش پیش بیاد).

ما برای حالت های مختلفی که داشتیم توی قسمت ای جکس یه تابع نوشتیم  حالا باید به تناسب هر درخواستی که  دریافت میکنیم  پاسخ مناسب رو بدیم،ما برای اینجا یه دستور switch ایجاد کردیم که چک میکنه ببینه مقدار func ما چیه و بعدش تابع مناسب رو برای ما اجرا میکنه.

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

تابع update like

خوب اول از همه ip کاربر رو دریافت کردیم،بعدش به بانک متصل شدیم،یه کوئری انجام دادیم که تمام فیلدهای جدول پست رو متناسب با id  دریافت کن،مقادیر رو هم گرفتیم و توی row$ گذاشتیم،بعدش ما نیاز داریم تا کاربر رو اعتبار سنجی کنیم ببینیم فبلا امتیاز داده یانه پس براش یه تابع نوشتیم که آخر کار توضیح میدم،مقدار id مطلب و اون ip رو هم براش ارسال میکنیم (شما می تونید این اعتبار سنجی رو بذارید اول تابع حالا من سلیقه ای گذاشتم اینجا،البته بهتره بذارید اول تابع)،اگه کاربر اعتبار سنجی شد که میره برا ثبت لایک،اگه نه پیغام نشون میده رای شما قبل ثبت شده،خوب حالا اگه اعتبار سنجی شد مقدار فیلد up رو یکی افزایش میدیم و با یه کوئری توی دیتابیس ثبتش میکنیم،یه کوئری هم میزنیم برای جدول likes که ip کاربر،id, و تاریخ رو براش ثیت می کنیم (البته من تاریخ رو به صورت NULL گذاشتم که مجبور نباشیم حتما براش مقداری ارسال کنیم،شما اگه خودتون خواستین می تویند براش تاریخ جاری رو ارسال کنید)،خوب بعدشم قطع ارتباط از دیتابیس و نشون دادن پیغام رای شما ثبت شد.

تابع updatedislike  

خوب دقیقا شبیه همون تابع بالاست فقط ستون down رو چک میکنیم،پس توضیح خاصی نداره.

تابع showlike

این تابع خیلی ساده است،فقط مقدار ستون up رو می گیریم و نشون میدیم همین.

تابع showdislike

این تابع هم شبیه تابع بالایه فقط مقدار down رو دریافت میکنه و نمایش میده.

خوب حالا فقط میمونه تابع اعتبار سنجی کاربر :

خوب این جا هم id مطلب و ip کاربر رو که از تابع اصلی گرفتیم (updatelike یا updatedislike) توی کوئری ارسال کردیم و اگه مقداری برگشت داده بشه معلومه این کاربر به این مطلب قبلا رای داده پس مقدار false برمیگردونه و اگه نه که true برمیگردونه.

فقط یه تابع اعتبار زمان میمونه که من اینو رو نوشتم اما استفاده نکردم،میشه باهاش تنظیم کرد که هر کابر توی مثلا 24 ساعت یکبار بتونه برای مطلب لایک بزنه،دیگه تنظیم زمانش بر عهده خودتون چون سلیقه ایه،فقط اگه خواستین حتما توی تابع updatelike و updatedislike اعمالش کنید.

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

راستی توی فایل config.php تنظیمات دیتابیس خودتون رو وارد کنید،توی پوشه img هم دوتا تصویر لایک دیگه هست ،برای تنوع.

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

موفق و پیروز باشید.

دموی نهایی پروژه (برای دمو شرط اعتبار رو برداشتم)

دانلود فایل های نهایی پروژه

comment دیدگاه کاربران
mohamadi.manijeh

جناب مهندس من کدها را دستکاری نکردم دیتابیسم هم اسکیوال کردم ولی باز این مشکل را داشت وقتی رفتم توی دیتابیس یک مقداری را دستی وارد کردم تونستم خروجی را ببینم یعنی این با مقدار اولیه مشکل داره … بع د هم که مقدار اولیه بهش دادم وقتی روی + – کلیک میکنم پیغام ثبت شد را میدهد ولی این علامت لودینگ همچنان میچرخد تا اینکه یک بار صفحه را رفرش کنم تا از این حالت خارج شود .. یک مورد دیگه هم اینه که اصلا چک نمیکنه من قبلا رای دادم و اجازه میدهد من هر تعداد که میخواهم لایک کنم .. این حالت ویرایش شده فایل هست که من تست میکنم

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

mohamadi.manijeh

همان که شما چندیدن تایپک بالاتر گداشتین
(۱۵ مرداد ۱۳۹۲ ساعت ۱:۳۳ ب.ظ )
که البته دستکاری در کد hover بود ..فرق انچنانی با کد اصلی نداست….

mohamadi.manijeh

کد جاوااسکریپت این بوده

خوب این کد دقیقا همون کدی هست که تست شده و جواب داده،قبلا یکی از کاربران از ما خواسته بودن کد رو کمی بهینه کنیم و به همین خاطر ما هم این کارو انجام دادیم.من این کد های بهینه تر رو برای شما هم قرار میدیم امیدوارم استفاده کنید.خواهشا برای قرار دادن کد ها حتما توی یه فایل بذارید و اپ کنید،اینجوری کلی فضای نظرات به هم میریزه.ممنون
http://up.persianscript.ir/uploads/137804493289211.zip

کریمی

اگر حس روئیدن در تو باشد، حتی در کویر هم رشد خواهی کرد…
(دکتر شریعتی)
ممنون از انتشار اطلاعات مفیدتون. موفق باشید و سلامت.

برای من هیچ اروری نمیده ولی اصلا هیچ کاری هم نمیکنه

عمل نمیکنه

درست شد 🙂

ممنون

raminn

با تشکر از مطلب خوبتون ..فقط یه سوال من میخاوم نمایش تعداد لایک ها و دیس لایک ها کنار دکمه هاباشه و تو hover نباشه ! … ممنون میشم دقیقا بگید کدوم قسمت رو تغییر بدم ! ..مرسی

سلام کمی باید کدها رو دستکاری کرد،من برای نشون دادن لایک های اینو مینویسیم خودتون دیگه از این الگو بگیرید.

$('.like').each(function() {
var el=$(this);
var id = el.data("id");
showlike(el,id);
});

نیاز به لاگین

برای ارسال دیدگاه و یا پرسیدن سوال خود در این قسمت، باید در سایت لاگین شوید.
1 2