Добавление поста в избранное с помощью PDO и SQL - PullRequest
0 голосов
/ 25 февраля 2020

Я реализовал Добавить в избранное , используя PHP и SQL, чтобы пользователь мог сохранить там любимый пост в базе данных и Удалить форму избранного

Я использовал следующий код:

    function checkFavorite($mbid, $pid, $conn) {
        $stmt = $conn->prepare("SELECT * FROM favorite WHERE memberID=:mid AND id=:id");
        $stmt->execute(array(':mid' => $mbid, ':id' => $pid));
        $count = $stmt->rowCount();
        if ($count == 0) {
            echo "<div class='button' data-method='Like' data-user-id=" . $mbid . " data-director-id=" . $pid . "><i class='mi' id=" . $pid . ">favorite_border</i>Add Favorite</div>";
        } else {
            echo "<div class='button' data-method='Unlike' data-user-id=" . $mbid . " data-director-id=" . $pid . "><i class='mi mi_sml text-danger' id=" . $pid . ">favorite</i>Remove Favorite</div>";
        }
    }

    $email = 'user@user.com';
    // Query to get the user_id
    $stmt = $conn->prepare('SELECT memberID FROM members WHERE email = :email AND active="Yes" ');
    $stmt->execute(array(':email' => $email));
    $row = $stmt->fetch();
    $mbid = $row['memberID'];

    $pid = '4';
    // Query to Get the Director ID
    $stmt = $conn->prepare('SELECT * FROM allpostdata WHERE id =:id');
    $stmt->execute(array(':id' => $pid));
    $result = $stmt->fetchAll();
    foreach ($result as $row) {

        echo "<p>Director: " . $row['tit'] . "</p> ";
        $fav_image = checkFavorite($mbid, $pid, $conn);
        echo "Favorite? : " . $fav_image . "";
    }

Сценарий

        jQuery(document).ready(function ($) {
            $('.button').on('click', function (e) {
                e.preventDefault();
                const user_id = $(this).attr('data-user-id');
                const director_id = $(this).attr('data-director-id');
                const method = $(this).attr('data-method');
                if (method === "Like") {
                    $(this).attr('method', 'Unlike'); // Change the div method attribute to Unlike
                    $('#' + director_id).replaceWith('<i class="mi mi_sml text-danger" id="' + director_id + '">favorite</i>Remove Favorite'); // Replace the image with the liked button
                } else {
                    $(this).attr('method', 'Like');
                    $('#' + director_id).replaceWith('<i class="mi mi_sml" id="' + director_id + '">favorite_border</i>Add Favorite');
                }
                $.ajax({
                    url: 'favs.php', // Call favs.php to update the database
                    type: 'GET',
                    data: {user_id: user_id, director_id: director_id, method: method},
                    cache: false,
                    success: function (data) {
                    }
                });
            });
        });

enter image description here

Когда вы смотрите на изображение, вы видите,

  1. replaceWith не меняет кнопку и текст
  2. И в XHR запрашивает все методы запроса отправляются как method="like"

, но при отправке запроса данные сохраняются, и в консоли не возникает ошибок.

Так как мне изменить текст для Add to favorite на Remove from favorite при нажатии на кнопку.

1 Ответ

3 голосов
/ 25 февраля 2020

Я думаю, это то, что вам нужно! Вот то, что я использовал в демо-версии несколько лет go, вы можете редактировать ее в соответствии с вашими требованиями.

Добавьте свой URL-адрес для обновления в тексты, подобные мне, и удалите.

$(document).ready(function () {

    $(".like button").click(function () {
        if ($(this).hasClass('btn')) {
            $(this).html('remove').toggleClass('btn mybtn');
        } else {
            $(this).html('Like me').toggleClass('mybtn btn');
        }
    });
});
.mybtn {
    color: red;
}
.btn {
    color: green;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="like">
    <p>Like</p>
    <button class="btn">Like me</button>
</div>

Демо

ОБНОВЛЕНИЕ: Извините, я был далеко от р c! это должно быть очень просто ввести в ваши коды:

Я полагаю, ваши php коды находятся в вашем favs.php Я пытался вот так для ответа в favs.php echo 'response';

Html кнопка! Вы можете изменить свой класс:

$(document).ready(function () {
	$(".button").click(function (e) {
	e.preventDefault();
	const user_id = $(this).attr('data-user-id');
	const director_id = $(this).attr('data-director-id');
	const method = $(this).attr('data-method');	
        if (method === "Like") {
            $(this).html('<i class="mi mi_sml text-danger" id="' + director_id + '">favorite</i>Remove Favorite').toggleClass('button mybtn');
            //Change remove text to your i class
        } else {
            $(this).html('<i class="mi mi_sml" id="' + director_id + '">favorite_border</i>Add Favorite').toggleClass('mybtn button');
            //Change Like me text to your i class 
            //you can remove or edit class mybtn in both remove and like
        }
	$.ajax({
		url: 'favs.php',
		type: 'GET', // type not method
		data: {user_id: user_id, director_id: director_id, method: method},
		cache: false,
		success: function(data) {
			alert(data);
		}
	});
});
});
.mybtn {
    color: red;
}
.btn {
    color: green;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="like">
    <p>Like</p>
    <button type="submit" class="btn">Like me</button>
</div>

У меня могут быть некоторые ошибки, такие как имя класса et c ... вы можете отредактировать и сделать его подходящим для ваших требований.

Я проверил его работоспособность. решено

...