<MyRusakov.ru />

PHP и MySQL с Нуля до Гуру

PHP и MySQL с Нуля до Гуру

Данный курс - это более 20-ти часов видеоуроков по изучению PHP и MySQL. Ключевой момент курса - это создание движка для сайта с нуля. Каждая строчка комментируется. Практически для каждого урока имеются упражнения. Причём данные упражнения направлены не только на закрепление материала, но и на реализацию реальных задач, встающих перед Web-разработчиками при создании сайтов. После курса Вы сможете без проблем создавать движки для любых сайтов.

Также почти к каждому уроку идут упражнения для закрепления материала.

Просмотрев курс и выполнив упражнения, Вы сможете без проблем создавать функциональные движки для самых различных сайтов.

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

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

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

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

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

1=12
2=0
3=6

Формат следующий: "id_статьи=количество_лайков". Теперь займёмся подготовкой данных для вывода на страницу:

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

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

<div id="like" data-id="<?=$id?>"><?=$likes?></div>

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

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

<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript">
  $(document).ready(function() {
    $("#like").bind("click", function(event) {
      $.ajax({
        url: "like.php",
        type: "POST",
        data: ("id=" + $("#like").attr("data-id")),
        dataType: "text",
        success: function(result) {
          if (result) {
            $("#like").text(Number($("#like").text()) + 1);
          }
          else alert("Error");
        }
      });
    });
  });
</script>

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

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

<?php
  $text = file_get_contents("likes.ini"); // Получаем содержимое файла
  $likes = explode("\n", $text); // Разбиваем строку на массив по разделителю в виде перехода на новую строку
  $new_likes = array(); // Массив лайков с новыми данными
  for ($i = 0; $i < count($likes); $i++) {
    $parts = explode("=", $likes[$i]); // Разбиваем строку вида "id_статьи=количество_лайков" по знаку равно
    if ($parts[0] == $_POST["id"]) $parts[1] += 1; // Увеличиваем число лайков на 1 у статьи с переданным ID
    $new_likes[] = implode("=", $parts); // Формируем новую строку вида "id_статьи=количество_лайков" и добавляем в массив
  }
  $text = implode("\n", $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.

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

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

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

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

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

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

Комментарии (4):

weband weband 24.03.2014 15:17:09

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

Ответить

rysich rysich 24.03.2014 22:09:35

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

Ответить

mitya mitya 25.03.2014 00:59:05

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

Ответить

Designer Designer 27.05.2015 15:51:32

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

Ответить

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