Наверняка, почти каждый из Вас знает, что такое лайки. Однако, помимо лайков в социальных сетях, можно сделать свою собственную систему лайков на 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.