Как сделать лайки в php

Собственная система лайков на PHP и JQuery

Информация о лайках будет храниться у нас в Базе Данных MYSQL. Для начала создадим структуру таблицы.

CREATE TABLE `article` ( `id` int(11) NOT NULL auto_increment, `name` varchar(255) NOT NULL, `description` text NOT NULL, `count_like` int(11) default 0, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;

И добавим в таблицу одну статью

INSERT INTO `article` (`id`, `name`, `description`, `count_like`) VALUES (1, 'Первая статья', 'Текст первой статьи!', 0);

HTML

Для начала подготовим html шаблон страницы

На странице мы будем выводить статьи из БД, поэтому нужно сначала подключится в БД и сделать выборку наших статтей:

exec("SET NAMES utf8"); /** Выбираем статьи и выводим их */ $query = $pdo->prepare("SELECT * FROM article"); $query->execute(); $articles = $query->fetchAll(PDO::FETCH_ASSOC); ?>  

в data-id будем хранить ID нашей статьи которую будем лайкать.

Желательно блок с подключением к БД вынести в отдельный файл и потом везде его подключать, чтобы не дублировать везде доступы к БД.

CSS

.like < cursor:pointer; width:128px; height:128px; margin:10px auto 40px; position:relative; >.like:hover.active, .like < background: url('../images/like.png') no-repeat; >.like.active, .like:hover < background: url('../images/like_active.png') no-repeat; >.like .counter

Стили для нашей страницы мы вынесем в отдельный файлик

Javascript

После того как подготовили страницу и задали стили, перейдем к javascript. Наша задача будет отправить на сервер запрос с ID статьи и обратно получить количество лайков к статье. Это нужно для того чтобы обновить актуальную информацию по количеству лайков и вывести правильный результат.

Все это нужно сделать без обнволения страницы, т.е. методом Ajax. Использовать будем библиотеку JQuery.

$(document).ready(function() < $(".like").bind("click", function() < var link = $(this); var $.ajax(< url: "/like.php", type: "POST", data: , // Передаем ID нашей статьи dataType: "json", success: function(result) < if (!result.error)< //если на сервере не произойло ошибки то обновляем количество лайков на странице link.addClass('active'); // помечаем лайк как "понравившийся" $('.counter',link).html(result.count); >else < alert(result.message); >> >); >); >);

PHP

Теперь осталось написать скрит для обработки запросов на сервере. Для этого создаем файлик like.php:

exec("SET NAMES utf8"); /** Получаем наш ID статьи из запроса */ $id = intval($_POST['id']); $count = 0; $message = ''; $error = true; /** Если нам передали ID то обновляем */ if($id)< /** Обновляем количество лайков в статье */ $query = $pdo->prepare("UPDATE article SET count_like = count_like+1 WHERE $query->execute(array(':id'=>$id)); /** Выбираем количество лайков в статье */ $query = $pdo->prepare("SELECT count_like FROM article WHERE $query->execute(array(':id'=>$id)); $result = $query->fetch(PDO::FETCH_ASSOC); $count = isset($result['count_like']) ? $result['count_like'] : 0; $error = false; >else < /** Если ID пуст - возвращаем ошибку */ $error = true; $message = 'Статья не найдена'; >/** Возвращаем ответ скрипту */ // Формируем масив данных для отправки $out = array( 'error' => $error, 'message' => $message, 'count' => $count, ); // Устанавливаем заголовок ответа в формате json header('Content-Type: text/json; charset=utf-8'); // Кодируем данные в формат json и отправляем echo json_encode($out);

Мы в данной статье привели общее понимание как делается система лайков на PHP с использованием Ajax. Однако, для идеального скрипта его нужно еще дорабатывать и дорабатывать. Во-первых, еще нужно сделать защиту от накруток лайков, для этого нужно или записывать в cookie информацию о том, что пользователь уже лайкнул данную статью. Либо самое правильное решение позволить ставить лайки только зарегистрированным пользователям (как это делается в социальных сетях).

Если будут вопросы пишите в комментариях, буду рад помочь.

Источник

Пишем функцию лайков для постов блога

Пишем функцию лайков для постов блога

Для чего нужна функция лайков? В первую очередь, чтобы пользователи могли оценить Вашу запись, а также видеть, как её оценивают другие. Как сделать самостоятельно такой функционал - я расскажу в данном посте. Если Вам понравится данный пост - поставьте лайк! 🙂

Первым делом нам нужно создать таблицу в базе данных. Допустим, у нас сайт с базой данных MySQL. Если у Вас в проекте используется другая БД - перечень действий будет аналогичным, за исключением некоторых команд.

❶ Создаём таблицу. Назовём её likes . Если Вы используете phpMyAdmin - находясь в корне всех таблиц, ниже кнопки "Создать таблицу" вводим имя likes , количество столбцов ставим 3 , нажимаем " Вперёд ".

Первому столбцу вводим имя - id , тип - INT , Индекс - PRIMARY (во всплывающем окне нажимаем ВПЕРЁД), ставим галочку A_I (auto increment).

Второму столбцу вводим имя - client_ip , тип - VARCHAR , длина - 15 .

Третьему столбцу вводим имя - article_id , тип INT

Сравнение ставим utf8_general_ci , тип InnoDB .

Если Вы работаете с базой данных из консоли - находясь в режиме sql выполняем команду:

CREATE TABLE likes (id INT NOT NULL AUTO_INCREMENT, client_ip VARCHAR(15) NOT NULL, article_id INT NOT NULL, PRIMARY KEY (id)) ENGINE = InnoDB CHARSET=utf8 COLLATE utf8_general_ci;

Далее, для оптимизации таблицы сделаем уникальными связку "IP пользователя" - "ID поста" . Это нужно для того, чтобы, если вдруг пользователь попытается проголосовать повторно за один и тот же пост, не происходило лишней записи в базу данных. Таким образом, с одного IP адреса проголосовать за один пост можно будет только один раз.

ALTER TABLE likes ADD UNIQUE INDEX (client_ip, article_id);

❷ Далее создаём файл, назовём его like.php

В файле первым делом создаём подключение к базе данных:

$link = mysqli_connect('имя_хоста', 'имя_пользователя', 'пароль', 'имя_БД'); $link->set_charset('utf8'); $link->query("SET NAMES utf8 COLLATE utf8_general_ci"); ?>

Если у Вас уже есть подключение к базе данных в отдельном файле, то просто подключаем этот файл через requi re_once() .

Затем в файле like.php создаём переменные и делаем запрос к БД на вставку новых данных:

$clientIp = $_POST['ip']; $article_id = $_POST['id']; $sql ; $query = mysqli_query($link, $sql); ?>

❸ Затем создаём PHP функцию для подсчёта лайков:

ction quantityLikes($postID) < // функция принимает ID поста global $link; $sql ; // выбираем IP из таблицы likes с уникальными значениями $query = mysqli_query($link, $sql); $likes = mysqli_fetch_all($query, 1); return $likes; > ?>

В результате вызова данной функции мы получим ассоциативный массив со значениями вида:

Array ( [0] => Array ( [client_ip] => 77.111.247.27 ) [1] => Array ( [client_ip] => 80.92.29.98 ) . )

Поскольку мы передавали ID конкретного поста, то мы получаем список IP-адресов только для данного поста.

❹ При загрузке страницы нам нужно определять, голосовал ли данный пользователь ранее за данный пост. Т.е. нам нужно определить его IP-адрес и проверить, есть ли он в массиве, полученном нами выше. К сожалению, стандартная функция PHP in_array() не подходит для проверки вхождения значений в ассоциативных массивах, поэтому мы будем использовать свою функцию:

tion is_in_array($array, $key, $key_value) < $within_array = false; foreach($array as $k=>$v) < if(is_array($v)) < $within_array = is_in_array($v, $key, $key_value); if($within_array == true) < break; >> else < if($v == $key_value && $k == $key) < $within_array = true; break; > > > return $within_array; > ?>

Функция возвратит нам true или false в зависимости от того, будет ли присутствовать IP-адрес пользователя в массиве адресов ранее голосовавших пользователей. Вызывать функцию будем со следующими параметрами:

is_in_array($likesArr, 'client_ip', $_SERVER['REMOTE_ADDR'])

❺ Далее заходим в файл шаблона, формирующий наш пост и в верху файла пишем PHP-код:

$likesArr = quantityLikes($post['id']); // в функцию quantityLikes мы передаём ID текущего поста. В моём блоге - это $post['id']. В Вашем это будет другое значение $likes = count($likesArr); // считаем лайки с помощью подсчёта общего значения количества элементов массива ?>

Далее в html-разметке вставляем:

$likesArr, 'client_ip', $_SERVER['REMOTE_ADDR'])): ?> $likes?> $likes?>

Таким образом, уже при загрузке страницы мы выводим разные иконки для новых или голосовавших ранее пользователей: для новых стандартно используется с пустым сердечком, для голосовавших - с заполненным. Также выводим в разных случаях разный title .

В data-параметрах для новых пользователей мы указали IP-адрес и ID данного поста. Эти параметры мы будем использовать в javascript-запросе к серверу при нажатии на иконку лайка.

  

❼ И напоследок, минимальный набор стилей:

.icon_head < height: 15px; width: 15px; cursor: pointer; >.noClick < pointer-events: none; /* делаем элемент некликабельным */ >

В итоге мы имеем удобный функционал:

  • считающий лайки;
  • с уникальными значениями в базе данных;
  • с возможностью проголосовать 1 раз только с одного IP;
  • не требующий никаких авторизаций через социальные сети или сервисы;
  • не требующий зависимостей и сторонних библиотек.

Подписывайтесь на группу в ВКонтакте, вступайте в сообщество на Facebook, чтобы всегда быть в курсе актуальных выпусков
W e b d e v e l o p m e n t b l o g !

Источник

Система «лайков» Facebook’а с помощью Jquery, MySQL и PHP

Система « лайков » Facebook ’а – это одна из лучших реализаций подобных систем в социальных сетях. Возможно в будущем на основе данных по « лайкам » Facebook решит запустить механизм семантического поиска. В этой статье я расскажу, как реализовать систему « Нравится»/«Не нравится »: проектирование базы данных и веб-реализация с помощью PHP и jQuery.

Проектирование Базы Данных

Чтобы построить систему сообщений, вам надо создать три таблицы: Users (Пользователи), Messages (Сообщения) и Messages_Like (Отметки « Нравится »). Следующие изображения сгенерированы, используя Mysql Workbench.

Таблица пользователей

Таблица пользователей содержит всю информацию о зарегистрированных пользователях.

CREATE TABLE `users` ( `uid` int NOT NULL PRIMARY KEY AUTO_INCREMENT , `username` varchar(25) NOT NULL UNIQUE, `password` varchar(50) NOT NULL , `email` varchar(100) NOT NULL );

Данные будут храниться в следующем виде (здесь пароли зашифрованы в формате MD5):

Таблица пользователей

Таблица пользователей - 2

Таблица сообщений

Эта таблица содержит статусы пользователей. Здесь uid_fk – это внешний ключ, ссылающийся на поле users.uid.

CREATE TABLE `messages` ( `msg_id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, `message` varchar(200) NOT NULL, `uid_fk` int(11) NOT NULL, `like_count` int(11) DEFAULT NULL, `created` int(11) DEFAULT NULL, FOREIGN KEY (uid_fk) REFERENCES users(uid) );

Таблица сообщений

Таблица сообщений - 2

Таблица отметок «Нравится»

Содержит всю информацию об отметках « Нравится » к статусам. Здесь uid_fk – внешний ключ, ссылающийся на поле users.uid , а msg_id_fk внешний ключ, ссылающийся на поле messages.msg_id

CREATE TABLE `message_like` ( `like_id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, `msg_id_fk` int(11), `uid_fk` int(11) NOT NULL, `created` int(11) NOT NULL, FOREIGN KEY (uid_fk) REFERENCES users(uid), FOREIGN KEY (msg_id_fk) REFERENCES messages(msg_id) );

Таблица отметок «Нравится»

Таблица отметок «Нравится» - 2

Код HTML

: Изменения Статуса
Нравится
Вам, Srinivas, Harsha и ещё 20 пользователям это нравится.

Код PHP

Следующий код отображает «Нравится» или «Не нравится» из таблицы message_like, основываясь на ID сообщения.

Код PHP

Этот код отобразит информацию из таблиц users и message_like о пользователях, которым нравится сообщение, основываясь на ID сообщения.

0) < $query=mysql_query("SELECT U.username,U.uid FROM message_like M, users U WHERE U.uid=M.uid_fk AND M.msg_id_fk='$msg_id' LIMIT 3"); ?>

"> Вам,'; > else < echo ''.$likeusername.''; > > echo 'и ещё '.$new_like_count.' пользователям это нравится.'; ?>

else

JavaScript

Следующий блок содержит код javascipt: основная функция – $(". like ").click(function()<>, где like – имя класса якорного тэга « Нравится»/«Не нравится ». Используя $(this).attr("id") получаем значение атрибута ID якорного тега.

  

message_like_ajax.php

Следующий блок содержит код PHP для обновления данных при клике на « Нравится» или «Не нравится ».

Итоговый код PHP

Система « Нравится»/«Не нравится » полностью.

 
: Изменения Статуса
Не нравится'; > else < echo 'Нравится'; > ?>
0) < $query=mysql_query("SELECT U.username,U.uid FROM message_like M, users U WHERE U.uid=M.uid_fk AND M.msg_id_fk='$msg_id' LIMIT 3"); ?>
"> Вам'; > else < echo ''.$likeusername.''; > > echo ' и ещё '.$new_like_count.' пользователям это нравится.'; ?>
else
?>

db.php

Файл конфигурации базы данных.

Источник

Читайте также:  Html рамка вокруг кнопки
Оцените статью