illustrator Curse
  • 7Learn Android Course
  • 7Learn SEO Course
  • 7Learn WP Theme Course

    حرفه ای ترین دوره آموزش طراحی قالب وردپرس



  آیا می دانید دوره های آموزشی سون لرن از جامع ترین و کاربردی ترین آموزش های موجود در سطح وب فارسی است!

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

15949 ۶ مرداد ۹۲

سلام دوستان،توی قسمت های قبلی ما کد های مربوط به قسمت طراحی و هم چنین کد های درخواست ای جکس رو نوشتیم ،تو این قسمت کد های 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 هم دوتا تصویر لایک دیگه هست ،برای تنوع.

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

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

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

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

:: مطالب جدید سون لرن را از طریق ایمیل دریافت کنید :

دیدگاه ها 48 دیدگاه برای این مطلب ارسال شده است. نظردهی برای این مطلب بسته شده است .

  • ‏‏

    مشکل رو رفع کردم . فقط موضوعی این مقدا ها بصورت ایجکس تغییر نمیکنه برام و تو کوکی و کش مرورگر ثبت میشه مثلا رای میدم تغییر نمیکنه مقدارش به همون صورت میمونه و تو کوکی ذخیره میشه و باید تمام کوکی مرورگرو پاک کنم تا دوباره مقدار رای رو نشون بده. ❗

    • ‏‏
      کیوان علی محمدی(۲۷ اردیبهشت ۱۳۹۳)

      رای ها بر اساس آی پی و در دیتابیس ثبت میشه.

      • ‏‏

        متوجه منظور بنده نشدید به ادرس فوق نگاه کنید http://iran-sky.ir/iran/vot/ لایک یا دیس لایک که میزنم میزنه با موفقیت ثبت گردید اما مقدارش یک نمیشه و باید کل هیستوری و کش مرورگر رو تخلیه کنم تا نشون بده

        • ‏‏
          وحید صالحی(۲۸ اردیبهشت ۱۳۹۳)

          دوست عزیز کد شما مشکلی نداره و بعد از ثبت رای اگر موس رو روی تصویر نگه دارید عدد رو نشون میده.با یه مرورگر دیگه مثل فایرفاکس تست کنید.

  • ‏‏

    هم با موزیلا و هم با کروم تست کردم و وقتی موس رو هم میرم روش عددی که کنارش ظاهر میشه مقدار قبلی رای هستش و مقدار جدید که باید افزوده شده باشه نیست

    • ‏‏
      کیوان علی محمدی(۲۸ اردیبهشت ۱۳۹۳)

      الان اگه تابع اعتبار سنجی فعال باشه شما دیگه نمیتونید رای بدید،باید از دیتابیس پاکش کنید تا بتونید دوباره بدید.

      • ‏‏

        داداش منظور من اصلا اینچیزا نیست. من ساختار کلی این سیستم رو متوجه شدم. یه توضیح ساده میدم تو تیبل posts جدول up مقدار امتیازات مثبت رو ذخیره میکنه حالا مثلا ما دستی این مقدار رو میذاریم 300 و وقتی صفحه رو رفرش میکنم باید وقتی موس روی علامت مثبت میبرم مقدارش 300 باشه ولی همون مقدار قبلی که مثلا 1 بوده هستش و هر چند بار که اف 5 هم بزنم عوض نمیشه الا زمانی که کلا هیستوری مرورگر رو خالی کنم. که نباید چنین چیزی باشه چون مقدار دیتابیس که نباید کش بشه . احتمالا مشکلی تو نوشتن این کد ها وجود داشته که مقدار هارو کش میکنه

        • ‏‏
          کیوان علی محمدی(۲۸ اردیبهشت ۱۳۹۳)

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

  • ‏‏

    اما من این افزونه رو هنوز بدون تغییر گذاشتم و تغییری ندادم کش میکنه. حالا خارج از همه اینا چطور میشه جای امتیاز منفی که شما گذاشتین اسمشو dislike کاری کرد که dislike برای برداشتن لایک باشه. یعنی مثلا من لایک کردم پستی رو حالا پشیمون شدم میخوام لایکمو بردارم وگزینه دیس لایک رو میزنم لایک برداشته بشه و spin دیس لایک تا وقتی گزینه لایک زده نشده نشون داده نشه

  • ورود/عضویت سریع با اکانت فیسبوک/جیمیل شما

    :: شما می توانید با استفاده از اکانت یاهو یا جیمیل خود به صورت کاملا امن، سریع و بدون نیاز به ورود اطلاعات عضو و وارد سایت شوید. در این صورت هیچ نیازی به ورود نام کاربری و رمز عبور خود نخواهید داشت و هویت شما از طریق ایمیلتان مورد تائید قرار می گیرد .
    برای استفاده از این روش باید در اکانت گوگل(جیمیل) و یا یاهوی خود لاگین باشید .
    عضویت/ ورود سریع با :
    در حال اتصال ...

    ورود به سایت

    ورود سریع با :
    در حال اتصال ...

    جستجو در سون لرن

    عبارت :
    7LearnTelegram