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

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



  آیا می دانید با دوره های آموزشی سون لرن می توانید از 0 تا 100 طراحی وب را در منزل فراگیرید!

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

17780 ۳ مرداد ۹۲
1 2

دوستان سلام،در دو قسمت قبلی ما کد های مربوط به ظاهر سیستم لایک خودمون رو نوشتیم و تست کردیم،تو این قسمت دستورات و متدهای ای جکس رو در بخش کدهای جاوا اسکریپت تکمیل میکنیم و بعدش هم اگه مطلب طولانی نشه که بعید میدونم، کد های PHP  هم چنین کد های ارتباط با بانک mysql رو برای ثبت لایک ها می نویسیم.

مرحله به مرحله

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

خوب تابع اول برای دریافت و نمایش تعداد لایک دکمه سبز رنگ :

اسم تابع رو گذاشتیم showlike و هر جا لازم شد از همین تابع برای فراخوانیش استفاده میکنیم،توی خط اول ما یه متغیر XmlHttpRequest با نام xhr بوسیله همون تابعی که در آخر قسمت قبل معرفی کردیم،ایجاد میکنیم،توی خط بعدی ما event شی xhr خودمون رو با یه تابع دلخواه مقدار دهی کردیم (مثل همون کلیک کردن که بگیم هر وقت کلیک شد این تابع رو اجرا کن)،خوب حالا این onreadystatechange چیکار میکنه؟خوب از اسمش هم تقریبا معلومه که تغییر وضعیت شی ما رو چک میکنه و با هر تغییری در وضعیت درخواستی که فرستادیم این رویداد (event) اجرا میشه و به محض اجرا شدن این رویداد اون تابعی که جلوش گذاشتیم فراخوانی میشه،توی خط بعدی که در واقع دستورات توی تابع هست ما یه شرط گذاشتیم،با این شرط خواستیم که وضعیت مطلوب رو بررسی کنیم،حالا وضعیت مطلوب ما چیه؟اینه که خاصیت های readystate و status شی xhr ما به ترتیب برابر 4 و 200 باشه،چرا؟چون خاصیت readyState دارای مقادیر دیگه ای هم هست و ما باید چک کنیم که فقط مقدارش 4 باشه (مقدار 4 یعنی درخواست ما کامل انجام شده) و هم چنین مقدار status که ممکنه 404 هم باشه (404 یعنی نتونسته منبع رو پیدا کنه،یعنی نتونسته همون صفحه PHP رو پیدا کنه) باید 200 باشه،در این حالت درخواست ما به درستی انجام شده و ما می تونیم مقدار برگشتی رو که با responseText معرفی میشه دریافت کرده و نمایش بدیم،ما این جا گفتیم اگه شرایط برقرار بود مقدار برگشتی رو بذار توی عنصری که کلاس l_count رو داره (اگه یادتون باشه این کلاس همون تگ span کنار دکمه سبز رنگ ماست).

خوب توی خط بعدی ما با متد open نوع درخواست و آدرس فایل منبع که قصد ارسال اطلاعات رو داریم و هم چنین آیا اینکه درخواست به صورت اسنکرون  ارسال بشه یا نه رو تنظیم میکنیم و در آخر هم با متد send درخواست رو ارسال میکنیم.خوب تموم شد همش همین بود.

ما متد ارسال رو روی GET تنظیم کردیم و آدرس فایل رو هم گذاشتیم ajx.php و اونی هم که جلوشه یه کوئری استرینگه اطلاعات رو باهاش میفرستیم فایل ajx.php (همون فایل منبع)، متغییر کوئری استرینگ ما اینجا اسمش func هست و جلوش هم نوشتیم showlike،در واقع توضیح این باید توی قسمت کد PHP بدم. پس این رو یادتون باشه.

خوب بچه ها یادتونه ما تو قسمت قبلی برای حالت hover دکمه سبز یه کد نوشتیم،خوب این تابع بالا رو توی اون قسمت به این صورت فراخوانی میکنیم :

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

تابع ای جکس ما :

خوب اسم تابع هست showdislike،بعدشم قراره توی d_count اطلاعات به نمایش در بیاد و بعدشم توی متد open توی قسمت کوئری استرینگ گفتیم func برابر showdislike باشه،حالا این تابع توی کد hover دکمه قرمز فراخوانی میکنیم:

خسته که نشدین ؟؟ :) خوب پس خوبه،این صفحه هم کم کم داره زیاد میشه بریم صفحه بعد برا ادامه،اونجا می بینمتون بچه ها ... 😉

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

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

  • ‏‏

    این پیج من
    http://www.naseralipour.com/like2/index.php
    دقیقا همون آخرین فایل zip است که در آخر صفحه آموزش قسمت چهار قرار دادین.
    و آیدیهاشون از 1 تا 3 هست.

  • ‏‏

    دوست عزیز, من فکر میکنم هنوز مشکل از جدول هست. چون هیچ دیتایی در جدول posts ثبت نشده, در صورتی که در جدول likes چند بار لایک ثبت شده.
    برای این حل این مشکل چکار باید کرد؟

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

      خوب شما چند تا رکورد در جدول posts خودتون با استفاده از تب insert در phpmyadmin اضافه کنید.

  • ‏‏

    ازاف کردم و نشون میده اگه چک کنید و همونطور که گفتم فقط برای جدول اولی نشون میده و در صورتی که جدول 2 و 3 رو بخایم لایک کنیم پیغام میده که قبلا لایک شده.

  • ‏‏

    درواقع هرچیزی که برای جدول اول ثبت میشه برای 2 تای دیگه هم ثبت و دقیقا همون رو نشون میده.

  • ‏‏

    من ٢ تا آیدی ساختم با اعداد ١ و ۴، در جدول posts اومدم دستی اومدم field ١ و ۴ رو وارد کردم و field up و down هم عدد دادم، اگه صفحه رو چک کنید به خوبی نشون میده،
    درواقع من باید جدول posts رو برای اولین بار دستی وارد کنم؟

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

      آیدی های شما در جدول posts باید از 1 تا 3 باشه،تا برای هر سه تا مطلب داخل صفحه به درستی کار کنه،در غیر این صورت باید به صورت دستی آیدی داخل مطالب رو با آیدی های داخل جدول posts تنظیم کنید.بله برای بار اول باید مطالب رو به صورت دستی وارد کنید.

  • ‏‏

    ممنون، پس به لطف کمک شما من درست پیش رفتم، فقط ١ مشکل، اگه چند دستگاه به یک دستگاه wifi وصل باشه و همگی وارد این پیج بشن برای همه دستگاها یک ip مشترک در نظر میگیره، یعنی اگه شما با یک سیستم لایک کردین و خواستین با سیستم دیگه که به همون wifi وصل هست لایک کنید پیام قبلا لایک شده نشون میده،
    چکار باید کرد که در اینجور شرایط برای هر دستگاه یک ip جداگانه در نظر بگیره؟

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

      تا اونجایی که من میدونم برای هر دستگاه یه آی پی ست میشه.

      • ‏‏

        یعنی ممکنه این هم یک ایراد از جدولهای من باشه؟

      • ‏‏

        یعنی ممکنه این هم یک ایراد از جدولهای من باشه؟
        چون من سه id ساختم و هر کدوم رو با یک دستگاه لایک کردم و وقتی جدول likes رو چک کردم هر ٣ لایک با یک ip آدرس زخیره شده بود.

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

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

  • ‏‏

    بسیارخوب پس چک میکنم، فقط توی جدول posts که میخوام دستی field هارو اضاف کنم تو قسمت فانکشن چی باید انتخاب کنم؟ و توی p_title و p_body چیزی باید بزارم یا خالی باشن؟
    من فقط value , ID رو ١ و ٢و ٣ گزاشته بودم.
    الباقی خالی سیو کردم.

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

      کدوم فانکشن؟یه چیز الکی بزنید مثلا عنوان مطلب اول و متن مطلب اول الی آخر،

  • ‏‏

    دوست عزیزم یک چیز برای من خیلی جالبه.
    من از طریق این آدرس
    http://whatismyipaddress.com/ip-lookup?gclid=COzy46CLsLwCFTCWtAodkDMAjg
    IP آدرس هر 3 دستگاهی که به یک wifi کانکت بودن رو چک کردم و هر 3 رو دقیقا یک IP آدرس نشون داد.
    با منطق جور در نمیاد. شما میدونید مسعله چیه؟

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

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

    ورود به سایت

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

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

    عبارت :
    7LearnTelegram