Как мне реализовать подобный счетчик, используя PHP, jQuery и AJAX? - PullRequest
0 голосов
/ 04 февраля 2019

Я работаю над созданием счетчика лайков для кавычек.Я пытаюсь увеличить счетчик похожих, когда пользователь нажимает кнопку «Мне нравится» и отображает количество лайков.

Проблемы, с которыми я столкнулся:

  1. Счетчик лайков увеличивается, когдаЯ обновляю страницу (не потому, что я на самом деле нажал кнопку «Мне нравится»).

  2. Я пытался реализовать jQuery для обновления счетчика лайков в режиме реального времени, но не смог: (

Я ссылался на всю QnA, связанную с этим, не мог найти желаемого решения. Я прошел через этот [вопрос] PHP / MySQL Like Button и внес необходимые изменения, ноТеперь, когда я нажимаю кнопку, в базе данных нет обновлений.

This is the code for one quote.

<div class="testimonial text-sm is-revealing">
 <div class="testimonial-inner">
  <div class="testimonial-main">
   <div class="testimonial-body">
   <p id="q1">
       <?php
         $sql = "select quotes from voted where voted.quote_id = 1";
         $result = mysqli_query($link,$sql);
         $row = mysqli_fetch_array($result);
         echo "$row[0]";
      ?></p>
   </div>
  </div>
  <div class="testimonial-footer">
   <div class="testimonial-name">
    <button method="POST" action='' name="like" type="submit" class="like"><b>Like</b></button>&nbsp;&nbsp;
      <?php
        if(isset($_POST['like'])){
        $link = mysqli_connect("localhost","root","","success");
        $sql = "UPDATE voted SET likes = likes+1 WHERE voted.quote_id = 1";
        $result = mysqli_query($link,$sql);
        }
      ?>
       <label>
        <?php
          $link = mysqli_connect("localhost","root","","success");
          $sql = "SELECT likes from voted WHERE voted.quote_id = 1";
          $result = mysqli_query($link,$sql);
          $row = mysqli_fetch_array($result);
          echo "$row[0]";
         ?>
        </label>&nbsp;&nbsp;
        <button class="btn" id="clipboard" onclick="copyFunction('#q1')"></button>                    
       </div>
  </div>
</div>

Как заставить реализовывать счетчик похожих при нажатии кнопки «Нравится»?

Как реализовать jQueryи AJAX к этому, чтобы счетчик обновлялся без обновления страницы?

Прошу прощения за мою плохую структуру кода.

Спасибо за любую помощь.

PS Вот как одна цитата будетЯ похож на

1 Ответ

0 голосов
/ 04 февраля 2019

Для работы асинхронной установки, подобной этой, необходимы три вещи:

  1. Ваш серверный сценарий для обработки запросов AJAX
  2. Ваша страница интерфейса
  3. Ваш JQuery-скрипт для отправки ajax-запросов и получения данных

Ваш внутренний PHP-скрипт будет выглядеть примерно так (async.php):

 <?php
    if(isset($_POST['get_quotes'])) {
         $sql = "select quotes from voted where voted.quote_id = 1";
         $result = mysqli_query($link,$sql);
         $row = mysqli_fetch_array($result);
         echo "$row[0]";
    }

    if(isset($_POST['like'])) {
        $link = mysqli_connect("localhost","root","","success");
        $sql = "UPDATE voted SET likes = likes+1 WHERE voted.quote_id = 1";
        $result = mysqli_query($link,$sql);
    }
?>

Ваш внешний интерфейсстраница будет содержать элемент с идентификатором, который нужно подключить к JQuery, и кнопку с классом или идентификатором для захвата события щелчка (page.html):

<html>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

    <script src="core.js"></script>
    <body>
    <button id="increment-like" value="Like" type="button" />

    <p id="like-count">
    </p>
</body>
<html>

Наконец, ваш файл JavaScript должен выглядетьчто-то вроде этого, для базового запроса Ajax с использованием JQuery (core.js):

$(document).ready(function() {
    // initially grab the database value and present it to the view

    $('#like-count').text(getDatabaseValue());

    $('#increment-like').on('click', function() {
        incrementDatabaseValue();
    });
});

function getDatabaseValue() {
     $.post("async.php",
        {
            get_quotes: true
        },
        function (data, status) {
            // check status here
            //return value
        return data;
        });
}

function incrementDatabaseValue() {
     $.post("async.php",
        {
            like: true
        },
        function (data, status) {
            // check status here

        // update view
        $('#like-count').text(getDatabaseValue());
        });
}

Я не тестировал этот код, но он должен быть четким и достаточно подробным, чтобы вы могли выбрать правильный путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...