автоматическое добавление лайков для пользователей - PullRequest
0 голосов
/ 02 августа 2020
• 1000 предназначен для добавления red_hearth к понравившемуся сообщению пользователя в этом html элементе
<i onclick="like_post(this)" class="fas fa-heart float-right p-1 my-1 mr-3" data-id="1" id="like_check_0" data-toggle="tooltip" data-placement="top" title="I like it"></i>
<i onclick="like_post(this)" class="fas fa-heart float-right p-1 my-1 mr-3" data-id="2" id="like_check_1" data-toggle="tooltip" data-placement="top" title="I like it"></i>
<i onclick="like_post(this)" class="fas fa-heart float-right p-1 my-1 mr-3" data-id="3" id="like_check_2" data-toggle="tooltip" data-placement="top" title="I like it"></i>
<i onclick="like_post(this)" class="fas fa-heart float-right p-1 my-1 mr-3" data-id="4" id="like_check_3" data-toggle="tooltip" data-placement="top" title="I like it"></i>
<i onclick="like_post(this)" class="fas fa-heart float-right p-1 my-1 mr-3" data-id="5" id="like_check_4" data-toggle="tooltip" data-placement="top" title="I like it"></i>

, но он не работает это мой php код для ajax запрос

if (isset($_POST['comment_check'])) {
  $get_comment_id = mysqli_real_escape_string($con, test_input($_POST['comment_check']));
  $get_user_id = $_SESSION['user_id'];
  $commentcheck = mysqli_query($con, "SELECT * FROM `comment_like` WHERE `liker_id` = '$get_user_id' AND`comment_id` = '$get_comment_id' AND liked='Y'") or exit(mysqli_error($con));
if(mysqli_num_rows($commentcheck)>0){
    echo "ok";
}else{
    echo "unliked";
}

}

1 Ответ

0 голосов
/ 02 августа 2020

Поскольку я действительно не использую jQuery, было бы глупо пытаться ответить на вопрос, используя его и, таким образом, делая ошибки, так что поймите, поэтому я отвечаю здесь ванильным Javascript. Не зная схему таблицы, что делает функция like_post или как кто-то может unlike что-то ставить вопросы, но делая определенные предположения, можно проигнорировать это здесь.

Если вы немного измените HTML, чтобы удалить атрибуты ID (которые на самом деле не требуются)

<i class='fas fa-heart float-right p-1 my-1 mr-3' data-id='1' data-toggle='tooltip' data-placement='top' title='I like it'></i>
<i class='fas fa-heart float-right p-1 my-1 mr-3' data-id='2' data-toggle='tooltip' data-placement='top' title='I like it'></i>
<i class='fas fa-heart float-right p-1 my-1 mr-3' data-id='3' data-toggle='tooltip' data-placement='top' title='I like it'></i>
<i class='fas fa-heart float-right p-1 my-1 mr-3' data-id='4' data-toggle='tooltip' data-placement='top' title='I like it'></i>
<i class='fas fa-heart float-right p-1 my-1 mr-3' data-id='5' data-toggle='tooltip' data-placement='top' title='I like it'></i>

Затем вы можете собрать значения data-id из элементов HTML - по-видимому, они не всегда будут просто 1,2,3,4,5, но фактически будут Идентификаторы из статей или что-то еще из db - так что на самом деле это может быть больше похоже на 23,6,98,123,5 (?)

var iCol=document.querySelectorAll( 'i[data-id]' );
var ids=[];

iCol.forEach( i=>{
    ids.push( i.dataset.id )
});

Со всеми соответствующими идентификаторами вы можете отправить свой единственный Ajax запрос на сервер, который будет использовать при обработке идентификаторы, которые из things ранее понравились пользователю. Поскольку ниже приведено базовое c jQuery и только слегка измененное по сравнению с вашим оригиналом, я использую его здесь, а не XMLHttpRequest или Fetch

$.ajax({  
    url:'comment_post.php',  
    type:'POST', 
    data:{ comment_check:ids },  // send the collected IDs
    dataType:'text',  
    success:function(json){
        json.liked.forEach( id => {
            document.querySelector('i[ data-id="'+id+'" ]').classList.add('red_heart')
        })
    }
});

Скрипт PHP для проверки db :

<?php

    session_start();
    
    if( isset( $_POST['comment_check'] ) ) {
        
        $payload=[];
        $ids=explode( ',', $_POST['comment_check'] );
        
        $sql='select `comment_id` from `comment_like` where `liker_id`=? and `liked`="Y"';
        $stmt=$con->prepare( $sql );
        $stmt->bind_param( 's', $_SESSION['user_id'] );
        $status=$stmt->execute();
        $stmt->bind_result( $cid );
        
        
        $payload['status']=$status;
        $payload['user_id']=$_SESSION['user_id'];
        $payload['liked']=[];
        
        
        while( $stmt->fetch() ){
            if( in_array( $cid, $ids ) ) $payload['liked'][]=$cid;
        }
    
        
        header('Content-Type: application/json');
        exit( json_encode( $payload ) );
    }

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