Как делается такое с записью в базе mysql?

99
04 февраля 2022, 22:10

Хочу реализовать что то такое: Имеем на сайте кнопку и имеем счётчик:

После того как я нажал на "Добавить в любимые", становится так +1: После того как нажал "Удалить из любимых" -1 стало.

В JS я понял как это всё реализовать. Добавляет и удаляет "+1", "-1". Но я не могу понять как сделать, чтоб оно записалось и пользователи видели "кто сколько нажал" в общем кликов. Для каждого товара, свой счётчик получается.

Таблица: ok_products

Столбец сделал: loves

Структура:

Подскажите идеи, может кто такое реализовывал???

размета html где счётчик

<span class="loves" id="loves_{$product->id}">
   <span name="loves">{$product->loves}</span> 
   Влюблёны
</span>

Разметка кнопки нажатия

<div class="whilist">
                                    <div>
                                        <span class="fn_wishlist wishlist_button-right serdce"></span>
                                        {if $smarty.get.module != "WishlistView"}
                                            {if $product->id|in_array:$wished_products}
                                                <a href="#" data-id="{$product->id}" class="fn_wishlist wishlist_button selected like" title="{$lang->remove_favorite}" data-result-text="{$lang->add_favorite}">
                                                    <span class="buttom-delete">Удалить из любимыx</span>
                                                </a>
                                            {else}
                                                <a href="#" data-id="{$product->id}" class="fn_wishlist wishlist_button" title="{$lang->add_favorite}" data-result-text="{$lang->remove_favorite}">
                                                    <span class="buttom-add">{$lang->dobavit_v_lyubimye_}</span>
                                                </a>
                                            {/if}
                                        {/if}
                                    </div>
                                </div>

Сам Jquery который делает накидал временно так: Добавление +1

$(document).on('click', '.wishlist_button', function(e) {
    e.preventDefault();
    var lovesAmmount = $("[name='loves']");
    $('.loves span').html(lovesAmmount.val() + 1);
});

Удаление -1

$(document).on('click', '.wishlist_button.selected', function(e) {
    e.preventDefault();
    var lovesAmmount = $("[name='loves']");
    $('.loves span').html(1 - 1);
});

Сайт сам ссылка

Ajax сделал:

$(".wishlist_button").click(function() {
    $.ajax({
        url: 'ajax/loves.php',         /* Куда пойдет запрос */
        method: 'post',             /* Метод передачи (post или get) */
        dataType: 'html',          /* Тип данных в ответе (xml, json, script, html). */
        data: {name: $("#name").val()},     /* Параметры передаваемые в запросе. */
        success: function(data){   /* функция которая будет выполнена после успешного запроса.  */
            $('#result').html(data);
        }
    });
});

Сайт loves.php:

if (isset($_POST['name']) && isset($_POST['name'])) {
        //$product_id = intval(str_replace('product_', '', $_POST['id']));
        $name = $_POST['name'];
        //$name = "321";
        $query = $okay->db->placehold("UPDATE ok_products SET loves = '.$name.' WHERE id = '214'");
        $okay->db->query($query);
        //$product = $okay->db->result();
    }

Разметка html:

<input type="text" id="name">

В итоге имеем кнопку и имеем input, где ввожу любое число и где сердце закрашенное выводит, только в запросе 1 товар

Answer 1
$query = $okay->db->placehold("UPDATE ok_products SET loves = '.$name.' WHERE id = '214'");

У вас тут в запросе ошибка, а именно там где точки возле переменной .$name., я так понимаю, вы хотели сделать конкатенацию строк? Правильный вариант:

$query = $okay->db->placehold("UPDATE ok_products SET loves = '" . $name . "' WHERE id = '214'");

Возможно после этих изменений все заработает. Ведь этим запросом, вы пытались сделать вставку строки .$name. в поле, у которого тип int, и база данных скорее всего выдавала вам ошибку.

Так же, рекомендую обратить внимание на название переменных - они явно не совсем хорошо названы, например переменная $name казалось бы, что там должно быть какое-то имя/название а там я так понимаю значение количества лайков.

Answer 2

Добавил переменную $id = $_POST['id'];

Добавил запрос $query = $okay->db->placehold("UPDATE ok_products SET loves = '$plus_love' WHERE id = '$id'");

READ ALSO
обращение к группе пользователей opencart

обращение к группе пользователей opencart

Как обратиться к группе пользователей на opencart через short_name? Версия 23

84
PHP - что за кодировка у json?

PHP - что за кодировка у json?

Не могу разобраться как привести в обычный текстИмею результат в виде строки json, вот кусок

123
composer не устанавливается на компьютер

composer не устанавливается на компьютер

Скачал ComposerSetupexe с официального сайта

76