ساخت سیستم لایک با php و ajax شدیدا آسان , جذاب و کاربرپسند می باشد .در بسیاری از سایت ها بخصوص در قسمت نظرات , محصولات و حتی مطالب آموزشی , حتما دیدید که هر مطلب دارای دکمه های می پسندم و نمی پسندم یا همان like و dislike است که در نت پارادیس تمام مطالب یک دکمه لایک قلب مانند دارد !.
در بسیاری از شبکه های اجتماعی مثل اینستاگرام و فیسبوک نیز این قابلیت سیستم لایک بسیار محبوب است . معمولا لایک را برای Promote کردن مطالب انجام میدیم و فایده اش هم این است که می تواند یک میزان و سنجش برای علاقه مندی های یک مطالب باشد و در ضمن هم یه معیار خوب برای مدیران در جهت انتخاب مطالب جذاب برای سایت ها در جهت پیدا کردن علایق کاربران است.
در آموزش ساخت سیستم لایک با php قصد داریم قابلیت like را با php و mysql با تکنیک ajax پیاده سازی کنیم .
ساخت جداول دیتابیس :
۲ جدول برای ذخیره تعداد لایک و دیس لایک های کاربران مربوط به یک محصول می سازیم . جدول likes دارای ستون هایی برای ذخیره id محصول و تعداد like ها و dislike ها است . جدول products نیز برای ذخیره محصولات ما اعم از اسم , قیمت , عکس و وضعیت محصول است .
کد sql برای ساخت جدول و قرار دادن چندین مقدار پیش فرض به صورت زیر است :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
-- Table structure for table `likes` -- CREATE TABLE `likes` ( `id` int(5) NOT NULL AUTO_INCREMENT, `pid` int(10) NOT NULL, `like` int(10) NOT NULL, `unlike` int(10) NOT NULL, `uid` varchar(100) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=1; -- -------------------------------------------------------- -- -- Table structure for table `products` -- CREATE TABLE `products` ( `id` int(11) NOT NULL AUTO_INCREMENT, `product_name` varchar(255) NOT NULL, `price` double(10,2) NOT NULL DEFAULT '0.00', `image` varchar(255) NOT NULL, `status` int(2) NOT NULL DEFAULT '1', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4; -- -- Dumping data for table `products` -- INSERT INTO `products` VALUES (1, 'Books', 20.00, '1.jpg', 1); INSERT INTO `products` VALUES (2, 'RestAPI Code', 10.00, '2.jpg', 1); INSERT INTO `products` VALUES (3, 'NetParadis shells', 100.00, '3.jpg', 1); |
فایل اتصال به دیتابیس – db.php
1 2 3 4 5 6 7 |
<?php define('DB_SERVER', 'localhost'); define('DB_USERNAME', 'username'); define('DB_PASSWORD', 'password'); define('DB_DATABASE', 'database'); $connection = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE); ?> |
فایل index.php
این فایل شامل کدهایی برای بروزرسانی مقادیر جدول و نمایش تعداد لایک ها و dislike ها است . در اینجا از کوکی ها برای صرف نظر کردن از مقادیر نامعتبر like و dislike ها استفاده کردیم .
فایل اصلی برای نمایش لیست محصولات و دکمه های لایک :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
<?php session_start(); include("db.php"); if(!isset($_SESSION['user'])) { $_SESSION['user'] = session_id(); } $uid = $_SESSION['user']; // set your user id settings $query = "SELECT * FROM `products`"; // products list $res = mysqli_query($connection,$query); $HTML = ""; while($row=mysqli_fetch_array($res)) { // get likes and dislikes of a product $query = mysqli_query($connection,"select sum(`like`) as `like`,sum(`unlike`) as `unlike` from `likes` where pid = ".$row['id']); $rowCount = mysqli_fetch_array($query); if($rowCount['like'] == "") $rowCount['like'] = 0; if($rowCount['unlike'] == "") $rowCount['unlike'] = 0; if($uid == "") // if user not loggedin then show login link on like button click { $like = ' <input onclick="location.href = \'login.php\';" type="button" value="'.$rowCount['like'].'" rel="'.$row['id'].'" data-toggle="tooltip" data-placement="top" title="Login to Like" class="button_like" /> <input onclick="location.href = \'login.php\';" type="button" value="'.$rowCount['unlike'].'" rel="'.$row['id'].'" data-toggle="tooltip" data-placement="top" title="Login to Unlike" class="button_unlike" />'; } else { $query = mysqli_query($connection,"SELECT * from `likes` WHERE pid='".$row['id']."' and uid='".$uid."'"); if(mysqli_num_rows($query)>0){ //if already liked od disliked a product $likeORunlike = mysqli_fetch_array($query); // clear values of variables $liked = ''; $unliked = ''; $disable_like = ''; $disable_unlike = ''; if($likeORunlike['like'] == 1) // if alredy liked then disable like button { $liked = 'disabled="disabled"'; $disable_unlike = "button_disable"; } elseif($likeORunlike['unlike'] == 1) // if alredy dislike the disable unlike button { $unliked = 'disabled="disabled"'; $disable_like = "button_disable"; } $like = ' <input '.$liked.' type="button" value="'.$rowCount['like'].'" rel="'.$row['id'].'" data-toggle="tooltip" data-placement="top" title="Like" class="button_like '.$disable_like.'" id="linkeBtn_'.$row['id'].'" /> <input '.$unliked.' type="button" value="'.$rowCount['unlike'].'" rel="'.$row['id'].'" data-toggle="tooltip" data-placement="top" title="Un-Like" class="button_unlike '.$disable_unlike.'" id="unlinkeBtn_'.$row['id'].'" /> '; } else{ //not liked and disliked product $like = ' <input type="button" value="'.$rowCount['like'].'" rel="'.$row['id'].'" data-toggle="tooltip" data-placement="top" title="Like" class="button_like" id="linkeBtn_'.$row['id'].'" /> <input type="button" value="'.$rowCount['unlike'].'" rel="'.$row['id'].'" data-toggle="tooltip" data-placement="top" title="Un-Like" class="button_unlike" id="unlinkeBtn_'.$row['id'].'" /> '; } } $HTML.=' <li> <img src="images/'.$row['image'].'" class=""> <h4 class="">'.$row['product_name'].'</h4> <div class="product-price"> <span class="normal-price">$'.$row['price'].'</span> </div> <a href="#" class="btn btn-default navbar-btn" >Buy Now</a> <div class="grid"> '.$like.' </div> </li>'; } ?> <!doctype html> <head> <title>Create Like & Unlike System in PHP MySQL and jQuery | Netparadis.com</title> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <script type="text/javascript" src="jquery-1.8.0.min.js"></script> <script type="text/javascript" src="script.js"></script> <link href="style.css" rel="stylesheet" type="text/css" /> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"> </head> <body> <div class="container"> <div class="row"> <h1>netparadis Shopping store</h1> <div class="col-sm-12 col-md-12"> <ul class="thumbnail-list"> <?php echo $HTML; ?> </ul> </div> </div> </div> </body> </html> |
برای انجام عملیات لایک با php از کدهای زیر استفاده کردیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
<?php if($_POST) { $pid = mysqli_real_escape_string($connection,$_POST['pid']); // product id $op = mysqli_real_escape_string($connection,$_POST['op']); // like or unlike op if($op == "like") { $gofor = "like"; } elseif($op == "unlike") { $gofor = "unlike"; } else { exit; } // check if alredy liked or not query $query = mysqli_query($connection,"SELECT * from `likes` WHERE pid='".$pid."' and uid='".$uid."'"); $num_rows = mysqli_num_rows($query); if($num_rows>0) // check if alredy liked or not condition { $likeORunlike = mysqli_fetch_array($query); if($likeORunlike['like'] == 1) // if alredy liked set unlike for alredy liked product { mysqli_query($connection,"update `likes` set `unlike`=1,`like`=0 where id='".$likeORunlike['id']."' and uid='".$uid."'"); echo 2; } elseif($likeORunlike['unlike'] == 1) // if alredy unliked set like for alredy unliked product { mysqli_query($connection,"update `likes` set `like`=1,`unlike`=0 where id='".$likeORunlike['id']."' and uid='".$uid."'"); echo 2; } } else // New Like { mysqli_query($connection,"INSERT INTO `likes` (`pid`,`uid`, `$gofor`) VALUES ('$pid','$uid','1')"); echo 1; } exit; } ?> |
همانطور که دیدید پیاده سازی سیستم لایک با php و ajax بسیار بسیار ساده است و می توانید این مثال را در هرجایی از پروژه هاتون که نیاز بود استفاده کنید .
هر گونه مشکلی در پیاده سازی کدها داشتید ، از قسمت نظرات اقدام کنید . سریعا ، پاسخگوی سوالات شما هستیم .
برای دانلود سورس کد ساخت سیستم لایک با php و ajax از باکس دانلود استفاده کنید
موفق و پیروز باشید.
سلام مهندس شفیعی وقت بخیر میشه خط ۶ فایل index رو یه توضیحی بدید لطفا این سشن آیدی چه مقداری داره هنوز که سشنی ست نشده که مقدار آیدی داشته باشه با تشکر از سایت خوبتون
سلام ممنون.
اول کد که باید بررسی بشه فرض کنید کاربر اول بار این فایل رو فراخوانی میکنه پس چون سشن آیدی نداره یکی براش ست میشه کاربر صفحه رو رفرش میکنه پس باید اینجا بررسی بشه که اگر قبلا برای کاربر ست شده دیگه سشن آیدی اختصاص داده نشه
سلام حسن جان من منظورم اینه مگه session_id مقدار id سشن جاری رو بر نمیگردونه ؟ وقتی کاربر اول بار فایل رو فراخونی میکنه این سشن جاری اسمش چیه کجا ست شده با تشکر
حسن جان یه راهنمایی لطفا کنید لطفا در خصوص پیامی که دادم با تشکر
داخل مرورگر کاربر در بخش کوکی ها ذخیره میشه. f12 بزنید و بخش Storage
سلام ببخشید این فایل باکس مشکل داره من وقتی میخوام تستش کنم این ارور رو به من میده
Warning: mysqli_connect(): (HY000/1049): Unknown database ‘codexworld’ in C:\xampp\htdocs\tutorial.php on line 13
Warning: mysqli_query() expects parameter 1 to be mysqli, bool given in C:\xampp\htdocs\tutorial.php on line 24
Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, null given in C:\xampp\htdocs\tutorial.php on line 25
Notice: Undefined variable: data in C:\xampp\htdocs\\tutorial.php on line 29
Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\index.php on line 68
سلام. اطلاعات دیتابیس را داخل فایل tutorial.php تغییر بدید.
میشه بهم یاد بدید چون یاد ندارم
سلام ممنون بابت اموزش تون . اگر بخوایم فقط تعداد مشاهده یک پست رو نمایش دهیم باید چه کار کنیم ؟ لطفا اموزشی در این درباره اماده کنید . ممنون
سلام. خوشحالیم که مفید واقع شده.
نیاز به آموزش خاصی نیست. فقط کافیه در صفحه ای که اطلاعات پست مثل متن یا تصویر رو میخوانید همانجا از همان سطر پست در دیتابیس مقدار ستون مثلا view رو بخوانید و نمایش بدید.
https://netparadis.com/php-pdo-crud
البته باید قبل از آن در جدول پست های بلاگ ستون view رو بصورت integer تعریف کرده و در هربار لود شدن همان صفحه پست ها یک عدد به مقدار قبلی در دیتابیس اضافه کرده باشید.
در خط ۱۹ و ۲۲ و ۳۳ فایل index.php (کد های سایت) مقادیر خالی اند و از این جهت ارور گرفته می شود
برای این مقادیر چکار باید کنیم؟
از این توابع برای کنترل ورودی استفاده کنید
https://netparadis.com/empty-isset-is_null-php
سلام
من فایل پروژه رو نیاز داشتم ولی باکس دانلود خالیه
چیکار باید کنم؟
سلام. در سایت ثبت نام کنید و بعد به این صفحه بازگردید و بعد میتونید فایل ها را به راحتی دانلود کنید
خیلی ممنون
ولی فایل مشکل داره
با توجه به اینکه تابع mysql منسوخ شده کل کد کارایی نداره
امکانش هست کد های فایل رو تغییر بدید و تابع mysqli رو قرار بدید؟
خواهش می کنم.
با این آموزش به راحتی میتونید تغییرات رو لحاظ کنید :
استفاده از MySQLi به جای MySQL در PHP
به هرحال تغییرات لحاظ شد و مجدد از باکس دانلود دریافت و جایگزین کنید
همچنین اگر توجه کنید در آپدیتی که انجام شده بود در کدهای آموزش میتونید ببینید که از mysqli استفاده شده و فقط در پروژه از mysql بهره بردیم که این مورد در پروژه به mysqli بروز شد
خیلی ممنون مشکل حل شد
فقط شرمنده یه سوال دیگه هم داشتم:
برای اینکه محدودیت زمانی برای لایک کردن (مثلا هر یک ساعت یکبار) قرار بدهیم باید کدام قسمت کد را ویرایش کنیم؟
باید rating رو تغییر بدید و از کوکی استفاده کنید
https://netparadis.com/cookies-in-php
میشه بیشتر راهنمایی کنید و بفرمایید دقیقا برای کدام قسمت rating باید کوکی رو قرار بدم؟
در هنگام ثبت اطلاعات در دیتابیس باید ابتدا برسی کنید که کاربر یک کوکی به به نام مثلا like دارد یا خیر اگر داشته باشد که همانجا یک پیام به سمت ajax برگشت میدید و ادامه برنامه رو exit می کنید و اگر وجود نداشت یک کوکی براش ثبت و بعد اطلاعات را داخل دیتابیس قرار میدید
خیلی ممنونم ازتون 🙏
خوشحالیم که مفید واقع شده.
موفق و پیروز باشید.
سلام میشود این اموزش رو برای وردپرس هم پیاده کرد؟
سلام. بله ولی باید با ساختار وردپرس آشنایی نسبی داشته باشید تا بتونید کوئری ها رو اجرا کنید
خسته نباشید بسیار آموزش خوبی بود ممنونم
فقط با قسمت اول این آموزش مشگل دارم
اون گد های sql رو نمیدونم باید چیکار کنم . برای این موضوع آموزشی در سایت دارید؟
و اینکه اگه امکانش هست این مقاله رو اپدیت کنید و اینکه چطور فقط کاربرانی که ثبت نام کرده اند بتونن لایک کنن رو اضافه کنید.
سپاس از شما و سایت خوبتون
سلام. خوشحالیم که مفید واقع شده.
به phpmyadmin وارد بشید و این کد sql را داخل دیتابیس خود اجرا کنید تا جداول ساخته بشه.
سلام اون لایک پایین صفحه سایت شما چگونه ساخته شده لطفا اموزششو بزارید یا یک راهنمایی بکنید مثلا چجوری به این حالت درمیاد با کد نویسی؟
سلام این مورد با پلاگین آماده انجام شده. با این آموزش هم میتونید مشابه رو بسازید
موفق باشید.
من تو هاست واقعی امتحان کردم کار نکرد
سلام
باید دقیقتر بفرمایید که چطور کار نکرد خطا چی بود و این موارد. اگر آشنایی نسبی با php نداشته باشید نمی تونید خطایابی یا به درستی اجرا کنید.
موفق باشید
تشکر
سلام ببخشید اون قسمت کد اخر که گذاشتید باید توی کدام قسمت و کجای کد بزارم؟
سلام. درخواست ajax را باید به این فایلی (مثلا rating.php) که این کدها رو قرار دادید ارسال کنید تا لایک یا دیس لایک ثبت بشه.
موفق باشید.
تشکر همیشه خوشبخت باشید
مثلا چی جوری نفهمیدم
اگر در یک هاست واقعی تست می کنید که گزینه های این مورد وجود داره و اگر از طریق لوکال اجرا می کنید xampp یا نرم افزار مربوطه به نسخه php را دانلود و نصب کنید. همچنین نحوه تغییر نسخه php را بنابر نوع محیط و نرم افزار خود جستجو کنید.
موفق باشید.
سلام من این کد را اجرا کردم این خطا را میدهد
Fatal error: Uncaught Error: Call to undefined function mysql_connect() in C:\xampp\htdocs\like\tutorial.php:12 Stack trace: #0 C:\xampp\htdocs\like\index.php(3): Tutorial->__construct() #1 {main} thrown in C:\xampp\htdocs\like\tutorial.php on line 12
سلام . برای اجرای توابع mysql_ نیاز است که از php نسخه ۵٫۶ به پایین یا ۵٫۵ و غیره استفاده کنید.
موفق باشید.