Система лайков на сайт

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


Скачать исходный код

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

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

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

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

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


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

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


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

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


Код HTML

Простой код HTML.

Код PHP

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

Код PHP

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

JavaScript

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

message_like_ajax.php

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

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

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

db.php

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

Данная публикация представляет собой перевод статьи « Facebook Like System with Jquery, MySQL and PHP » , подготовленной дружной командой проекта Интернет-технологии.ру

Наверняка, почти каждый из Вас знает, что такое лайки. Однако, помимо лайков в социальных сетях, можно сделать свою собственную систему лайков на PHP и Ajax. В этой статье мы это подробно разберём.

Безусловно, на практике настоятельно рекомендую хранить лайки в базе данных. Однако, в рамках данной статьи, чтобы код легко было проверить, я решил сделать хранение лайков в ini-файле. Итак, вот собственно файл likes.ini:

Формат следующий: " > $data = parse_ini_file("likes.ini"); // Парсим INI-файл
$likes = $data[$id]; // Получаем количество лайков у статьи
?>

Код прокомментирован, поэтому проблем с его пониманием возникнуть не должно. Теперь приступим к HTML-коду:

Здесь мы просто выводим данные на страницу. Самому блоку можно задать, безусловно, различные стили (например, хотя бы cursor: pointer;) для красоты.

Читайте также:  Рут проводник для андроид

Переходим к JavaScript: наша задача при клике отправить запрос на сервер, передав ID статьи:

Здесь мы перехватываем клик по контейнеру #like. Далее отправляем запрос, передав соответствующий ID. Получив положительный ответ от сервера, увеличиваем количество лайков на 1 в блоке. Если пришёл ответ false от сервера, то сообщаем об ошибке.

И, наконец, пришло время написать скрипт like.php, который и занимается увеличением числа лайков:

if ($parts[0] == $_POST[" > $new_likes[] = implode("=", $parts); // Формируем новую строку вида " > >
$text = implode("
", $new_likes); // Преобразуем массив с новыми данными в строку с разделителем в виде перехода на новую строку
echo file_put_contents("likes.ini", $text); // Записываем строку в файл и выводим false в случае неудачи
?>

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

Также обратите внимание, что в данном скрипте при попытке добавить лайк к статье, которой нет в INI-файле, ничего не выйдет. Эта проблема решается добавлением новой строки в INI-файл, если в процессе цикла так и не было обнаружено искомой статьи. Но, учитывая, что всё равно лайки надо хранить в базе данных, я убрал эту дополнительную функциональность из кода.

Вот таким образом делается система лайков на PHP и Ajax.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

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

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

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Она выглядит вот так:

  • BB-код ссылки для форумов (например, можете поставить её в подписи):
  • Комментарии ( 5 ):

    какой у вас плагин для подсветки кода?

    Насколько я понял по коду страниц, плагин этот: https://code.google.com/p/google-code-prettify/ Что же касается самой статьи, нужно понимать, что отдельно взятый "лайк" на практике соответствует не только статье, но и конкретному пользователю. Поэтому для реализации с БД логично было бы сделать отдельную таблицу с лайками, которая будет иметь поля с id лайка, id связанной статьи и id связанного пользователя. На мой взгляд проблема состоит именно в этом, чтобы правильно организовать связи, а отправка ajax – это уже дело техники. И если уж совсем "разложить по косточкам" – получать данные в json было бы даже несколько удобнее.

    Читайте также:  Почему батарея на айфоне стала желтой

    а после отправки запроса на like.php какой переменной будет обозначаться id статьи?

    Хорошая статья Михаил, но, как мне кажется, пора уже отказываться полностью от шорт тегов в PHP.

    ты знаеш как добавить код и куда поставить хммммммм

    Для добавления комментариев надо войти в систему.
    Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

    Copyright © 2010-2019 Русаков Михаил Юрьевич. Все права защищены.

    06.04.2015 18 16572

    В данной статье мы разработаем собственную систему лайков на PHP и использованием Ajax. Что такое лайки я думаю вам не стоит обьяснять с таким изобилием социальных сетей в наши дни 🙂

    MYSQL

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

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

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

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

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

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

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

    Javascript

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

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

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

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

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

    Комментарии

    Сделал всё работает только как сделать чтобы с 1 усройства можно было поставить 1 лайк

    "В ближайшее время постараюсь расписать эти 3 пункта по подробнее с примерами."
    Администратор уже второй год пошел, для Вас ближайшее время это когда?
    Сколько вешать в граммах?

    Было бы здорово если бы Вы все-таки выполнили свое обещание, пожалуйста)
    Если конкретно интересует вариант № 3

    Читайте также:  Почему написано только экстренные вызовы

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

    Что конкретно у вас не работало? Ошибки какие то были?
    Проверьте, может вы указали неверные доступы к БД.

    Согласен оно не работает херня полная

    Здравствуйте, вы писали что может реализуете лайки с авторизацией с примерами, если вы это сделали, где можно найти?

    при клике на картинку,лайк не прибавляется,показывает 0.
    доступы к бд верные

    Админ, очень хотелось бы увидеть эти 3 способа

    Думаю в ближайшее время найду свободную минутку и напишу статью о них )

    У вас оибка в исходниках в Index.php, вы зачем -то делаете выход из папки

    (знак "/" – первыйне нужен)

    – вот так работает, это же относится и к другим путям)))

    А так статья хорошая спасибо!))))

    Это верно если из папки запускать, если же все это делается на http сервере нужно указывать адрес от корня сайта.
    Т.к. например если у вас будет такого вида url http://site.ru/article/ , то css будет пытаться подгрузиться из такой директории http://site.ru/article/css/style.css – естественно это будет ошибкой

    Не везде и не всегда, на хостинге у меня уже нужно прописывать локально а не отталкиваться от корня сайта.

    Все работает, пытаюсь сделать так, чтобы можно было удалять лайки еще, а не только ставить, ничего не выходит. Как бы получается что-то, то коряво работает очень

    При перезагрузке страницы поле колличества лайков равно нулю!
    Как исправить, но при первом же клике выводится число из БД.

    Александр, нужно в файле index.html подключится к БД и выбрать статьи из таблицы articles, и потом вывести их и количество лайков к каждой статье.
    Как это будет работать можете посмотреть в обновленном примере или посмотреть в статье (обновил описание)

    Спасибо огромное!
    Сейчас буду пробовать.

    Привет! Отличная статья, но без записи cookies – не имеет смысла. Как прикрутить защиту от накрутки?

    1. Самый лучший способ защититься от накрутки – сделать авторизацию на сайте и разрешить ставить лайки только зарегистрированным пользователям, при этом сохранять в БД (user_id и article_id) чтобы знать какой пользователь какую статью лайкнул. Таким способом врядли можно сделать накрутку лайков, разве что кто-то зарегистрирует много аккаунтов-ботов.
    2. Второй способ сохранять IP пользователя который лайкнул статью (user_ip и article_id), но тогда не все пользователи смогут поставить лайк, например из-за динамического IP. Накрутить лайки в таком случае будет не трудно, нужно просто изменить IP (например подключить прокси)
    3. Третий вариант – это записывать в куки браузера что этот пользователь уже поставил лайк. Самый легкий способ накрутить лайки – просто очистить куки )

    В ближайшее время постараюсь расписать эти 3 пункта по подробнее с примерами.

    Leave a Reply

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    You may use these HTML tags and attributes:

    <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>