Это общая идея. Я не знаю, уловил ли я все проблемы.
Что если вместо:
if ($already_like == 1) { ?>
<button class="unlikebtn" name="unlike" id="unlike_btn">
<span class="like_toggle">
<svg aria-label="Unlike" class="like_ico" fill="#ed4956" height="24" viewBox="0 0 48 48" width="24">
<path clip-rule="evenodd" d="M35.3 35.6c-9.2 8.2-9.8 8.9-11.3 8.9s-2.1-.7-11.3-8.9C6.5 30.1.5 25.6.5 17.8.5 9.9 6.4 3.5 13.7 3.5 20.8 3.5 24 8.8 24 8.8s3.2-5.3 10.3-5.3c7.3 0 13.2 6.4 13.2 14.3 0 7.8-6.1 12.3-12.2 17.8z" fill-rule="evenodd">
</path>
</svg>
</span>
</button>
<input type="text" name="post_id" id="post_u_id" hidden="true" value="<?php echo $post_id ?>">
<a href="post.php?id=<?php echo $post_id?>">
<svg aria-label="Comment" class="comment_ico " fill="#262626" height="24" viewBox="0 0 48 48" width="24">
<path clip-rule="evenodd" d="M47.5 46.1l-2.8-11c1.8-3.3 2.8-7.1 2.8-11.1C47.5 11 37 .5 24 .5S.5 11 .5 24 11 47.5 24 47.5c4 0 7.8-1 11.1-2.8l11 2.8c.8.2 1.6-.6 1.4-1.4zm-3-22.1c0 4-1 7-2.6 10-.2.4-.3.9-.2 1.4l2.1 8.4-8.3-2.1c-.5-.1-1-.1-1.4.2-1.8 1-5.2 2.6-10 2.6-11.4 0-20.6-9.2-20.6-20.5S12.7 3.5 24 3.5 44.5 12.7 44.5 24z" fill-rule="evenodd">
</path>
</svg>
</a>
<?php } elseif($already_like == 0){ ?>
<button name="like" class="likebtn" id="like_btn" data-itemID="<?php echo $post_id?>">
<span class="like_toggle">
<svg aria-label="Like" class="like_ico" fill="#262626" height="24" viewBox="0 0 48 48" width="24">
<path clip-rule="evenodd" d="M34.3 3.5C27.2 3.5 24 8.8 24 8.8s-3.2-5.3-10.3-5.3C6.4 3.5.5 9.9.5 17.8s6.1 12.4 12.2 17.8c9.2 8.2 9.8 8.9 11.3 8.9s2.1-.7 11.3-8.9c6.2-5.5 12.2-10 12.2-17.8 0-7.9-5.9-14.3-13.2-14.3zm-1 29.8c-5.4 4.8-8.3 7.5-9.3 8.1-1-.7-4.6-3.9-9.3-8.1-5.5-4.9-11.2-9-11.2-15.6 0-6.2 4.6-11.3 10.2-11.3 4.1 0 6.3 2 7.9 4.2 3.6 5.1 1.2 5.1 4.8 0 1.6-2.2 3.8-4.2 7.9-4.2 5.6 0 10.2 5.1 10.2 11.3 0 6.7-5.7 10.8-11.2 15.6z" fill-rule="evenodd">
</path>
</svg>
</span>
</button>
<a href="post.php?id=<?php echo $post_id?>">
<svg aria-label="Comment" class="comment_ico " fill="#262626" height="24" viewBox="0 0 48 48" width="24">
<path clip-rule="evenodd" d="M47.5 46.1l-2.8-11c1.8-3.3 2.8-7.1 2.8-11.1C47.5 11 37 .5 24 .5S.5 11 .5 24 11 47.5 24 47.5c4 0 7.8-1 11.1-2.8l11 2.8c.8.2 1.6-.6 1.4-1.4zm-3-22.1c0 4-1 7-2.6 10-.2.4-.3.9-.2 1.4l2.1 8.4-8.3-2.1c-.5-.1-1-.1-1.4.2-1.8 1-5.2 2.6-10 2.6-11.4 0-20.6-9.2-20.6-20.5S12.7 3.5 24 3.5 44.5 12.7 44.5 24z" fill-rule="evenodd">
</path>
</svg>
</a>
<?php } ?>
и
<div class="add_a_comment">
<div class="add_comment_section">
<span class="hor-line">
</span>
<div>
<textarea contenteditable aria-label="Add a comment…" placeholder="Add a comment…" class="addcomment_ta" autocomplete="off" autocorrect="off" id="comment_content" name="comment_content" id="editable_comment">
</textarea>
</div>
<div class="post_btn">
<button id="btn_comment" >POST
</button>
</div>
</div>
<input type="text" name="post_id" id="post_id" hidden="true" value="<?php echo $row['post_id'] ?>">
</div>
Мы избавимся от скрытого тега ввода он содержит $post_id
и вместо этого использует его как id
для кнопки:
if ($already_like == 1) { ?>
<button class="unlikebtn" name="unlike" id="<?php echo $post_id ?>">
<span class="like_toggle">
<svg aria-label="Unlike" class="like_ico" fill="#ed4956" height="24" viewBox="0 0 48 48" width="24">
<path clip-rule="evenodd" d="M35.3 35.6c-9.2 8.2-9.8 8.9-11.3 8.9s-2.1-.7-11.3-8.9C6.5 30.1.5 25.6.5 17.8.5 9.9 6.4 3.5 13.7 3.5 20.8 3.5 24 8.8 24 8.8s3.2-5.3 10.3-5.3c7.3 0 13.2 6.4 13.2 14.3 0 7.8-6.1 12.3-12.2 17.8z" fill-rule="evenodd">
</path>
</svg>
</span>
</button>
?>">
<a href="post.php?id=<?php echo $post_id?>">
<svg aria-label="Comment" class="comment_ico " fill="#262626" height="24" viewBox="0 0 48 48" width="24">
<path clip-rule="evenodd" d="M47.5 46.1l-2.8-11c1.8-3.3 2.8-7.1 2.8-11.1C47.5 11 37 .5 24 .5S.5 11 .5 24 11 47.5 24 47.5c4 0 7.8-1 11.1-2.8l11 2.8c.8.2 1.6-.6 1.4-1.4zm-3-22.1c0 4-1 7-2.6 10-.2.4-.3.9-.2 1.4l2.1 8.4-8.3-2.1c-.5-.1-1-.1-1.4.2-1.8 1-5.2 2.6-10 2.6-11.4 0-20.6-9.2-20.6-20.5S12.7 3.5 24 3.5 44.5 12.7 44.5 24z" fill-rule="evenodd">
</path>
</svg>
</a>
<?php } elseif($already_like == 0){ ?>
<button name="like" class="likebtn" id="<?php echo $post_id?>">
<span class="like_toggle">
<svg aria-label="Like" class="like_ico" fill="#262626" height="24" viewBox="0 0 48 48" width="24">
<path clip-rule="evenodd" d="M34.3 3.5C27.2 3.5 24 8.8 24 8.8s-3.2-5.3-10.3-5.3C6.4 3.5.5 9.9.5 17.8s6.1 12.4 12.2 17.8c9.2 8.2 9.8 8.9 11.3 8.9s2.1-.7 11.3-8.9c6.2-5.5 12.2-10 12.2-17.8 0-7.9-5.9-14.3-13.2-14.3zm-1 29.8c-5.4 4.8-8.3 7.5-9.3 8.1-1-.7-4.6-3.9-9.3-8.1-5.5-4.9-11.2-9-11.2-15.6 0-6.2 4.6-11.3 10.2-11.3 4.1 0 6.3 2 7.9 4.2 3.6 5.1 1.2 5.1 4.8 0 1.6-2.2 3.8-4.2 7.9-4.2 5.6 0 10.2 5.1 10.2 11.3 0 6.7-5.7 10.8-11.2 15.6z" fill-rule="evenodd">
</path>
</svg>
</span>
</button>
<a href="post.php?id=<?php echo $post_id?>">
<svg aria-label="Comment" class="comment_ico " fill="#262626" height="24" viewBox="0 0 48 48" width="24">
<path clip-rule="evenodd" d="M47.5 46.1l-2.8-11c1.8-3.3 2.8-7.1 2.8-11.1C47.5 11 37 .5 24 .5S.5 11 .5 24 11 47.5 24 47.5c4 0 7.8-1 11.1-2.8l11 2.8c.8.2 1.6-.6 1.4-1.4zm-3-22.1c0 4-1 7-2.6 10-.2.4-.3.9-.2 1.4l2.1 8.4-8.3-2.1c-.5-.1-1-.1-1.4.2-1.8 1-5.2 2.6-10 2.6-11.4 0-20.6-9.2-20.6-20.5S12.7 3.5 24 3.5 44.5 12.7 44.5 24z" fill-rule="evenodd">
</path>
</svg>
</a>
<?php } ?>
, и мы создаем форму с именем для добавления комментария, чтобы мы могли получить значение сообщения идентификатор, используя document.add_comment.post_id.value
:
<div class="add_a_comment">
<div class="add_comment_section">
<span class="hor-line">
</span>
<div>
<form name="add_comment">
<textarea contenteditable aria-label="Add a comment…" placeholder="Add a comment…" class="addcomment_ta" autocomplete="off" autocorrect="off" id="comment_content" name="comment_content" id="editable_comment">
</textarea>
<div class="post_btn">
<id="btn_comment">POST</button>
</div>
<input type="text" name="post_id" hidden="true" value="<?php echo $row['post_id'] ?>">
</div>
</div>
</div>
Тогда JavaScript становится:
$(document).ready(function(){
$("#btn_comment").click(function(){
$.post("inc/add_comment.php" ,
{
comment_content: $("#comment_content").val(),
post_id: document.add_comment.post_id.value
},
function(data){
alert("data");
})
});
});
$(document).ready(function() {
$(".likebtn").click(function() {
let post_u_id = $(this).attr('id');
$.post("inc/like.php",
{
post_u_id: post_u_id
},
function(data){
})
});
});
$(document).ready(function() {
$(".unlikebtn").click(function() {
let post_u_id = $(this).attr('id');
$.post("inc/unlike.php",
{
post_id: post_u_id
},
function(data){
})
});
});
Предложение
Вы используете AJAX удалять, обновлять и добавлять комментарии. Но вы пренебрегаете обновлением презентации (DOM
) по возвращении из успешного вызова AJAX. Например, при успешном удалении комментария вы должны удалить комментарий из DOM
. Если комментарий «не понравился», теперь он должен отображаться как комментарий, который не понравился. Поскольку вы не делаете ничего из этого, было бы лучше , а не , чтобы вообще использовать AJAX и просто вместо этого создавать формы, подобные следующим:
Вы должны реорганизовать свой HTML так что вы создаете формы для каждого комментария. Пример:
<form action="inc/unlike.php" method="post">
<input type="hidden" name="post_id" value="<?php echo $post_id ?>">
<button type="submit">
<span class="like_toggle">
<svg aria-label="Unlike" class="like_ico" fill="#ed4956" height="24" viewBox="0 0 48 48" width="24">
<path clip-rule="evenodd" d="M35.3 35.6c-9.2 8.2-9.8 8.9-11.3 8.9s-2.1-.7-11.3-8.9C6.5 30.1.5 25.6.5 17.8.5 9.9 6.4 3.5 13.7 3.5 20.8 3.5 24 8.8 24 8.8s3.2-5.3 10.3-5.3c7.3 0 13.2 6.4 13.2 14.3 0 7.8-6.1 12.3-12.2 17.8z" fill-rule="evenodd">
</path>
</svg>
</span>
</button>
</form>
Ваш сценарий unlike.php
будет завершен путем перенаправления обратно на index.php
для воссоздания обновленной презентации.