2015-12-02 4 views
2

Я пытаюсь реализовать кнопку like/dislike на моей странице. Мне удалось заставить кнопку работать (она изменяется, как не нравится, и наоборот при нажатии), а также создает или удаляет подобное в таблице базы данных. Теперь проблема - это счетчик симпатий. Он работает только в первый раз, когда я нажимаю кнопку, то есть, если изначально есть 2 likes, и мне не нравится сообщение, которое сообщение показывает 1 likes, но если я попытаюсь щелкнуть его снова, он будет показывать 1 like, и мне нужно перезагрузить страницу, чтобы увидеть он изменяется на 2 likes.PHP нравится/не нравится кнопка работает только в первый раз

Это то, что я до сих пор:

Jquery

$(document).on('click', ".miPiace", function() { 
    trova = ''; 
    commentoORisposta = ''; 
    valCOR = ''; 
    var comOrisp;  

    try{ 
     trova = $(this).parentsUntil("#fermamiQui"); 
     commentoORisposta = trova.find(".idCommento"); 
     comOrisp = 'commento'; 
     valCOR = commentoORisposta.val(); 

    } catch(err){ 
     trova = $(this).parentsUntil(".infoCommento"); 
     commentoORisposta = trova.find(".idRisposta"); 
     comOrisp = 'risposta'; 
     valCOR = commentoORisposta.val(); 

    } 
    valCOR = commentoORisposta.val(); 



    if ($(this).hasClass('fa-thumbs-o-up')) { 
     $(this).removeClass('fa-thumbs-o-up'); 
     $(this).addClass('fa-thumbs-up'); 

     $.get("lib/ottieniCose.php", { like: "", id: valCOR, comOrisp: comOrisp }) 
      .done(function(data) { 
      trova.find('.numDiLikes').replaceWith('<p>' + data + ' likes</p>'); 
     }); 


    }else if($(this).hasClass('fa-thumbs-up')){ 
     $(this).removeClass('fa-thumbs-up'); 
     $(this).addClass('fa-thumbs-o-up'); 

     $.get("lib/ottieniCose.php", { remLike: "", id: valCOR, comOrisp: comOrisp }) 
      .done(function(data) { 
      trova.find('.numDiLikes').replaceWith('<p>' + data + ' likes</p>'); 
     }); 


    }; 
}); 

PHP

if (isset($_GET['like'])) { 

    if ($_GET['comOrisp'] == 'commento') { 

     $commento->set_likes($_GET['id'], true); 
     return print $commento->get_likes($_GET['id'], true); 

    } elseif ($_GET['comOrisp'] == 'risposta') { 

     $commento->set_likes($_GET['id'], false); 
     return print $commento->get_likes($_GET['id'], false); 
    } 
} elseif (isset($_GET['remLike'])) { 

    if ($_GET['comOrisp'] == 'commento') { 

     $commento->remove_likes($_GET['id'], true); 
     return print $commento->get_likes($_GET['id'], true); 

    } elseif ($_GET['comOrisp'] == 'risposta') { 

     $commento->remove_likes($_GET['id'], false); 
     return print $commento->get_likes($_GET['id'], false); 
    } 
} 

Другое PHP файл, в котором есть commenti класс $

public function get_likes($id, $commento){ 

    $idComm = 0; 
    $idRisp = 0; 

    $retVal = ($commento) ? $idComm = $id : $idRisp = $id; 

    if ($idComm != 0){ 
     $query = "SELECT commento, 
        (SELECT COUNT(*) FROM likes 
        WHERE commento = {$idComm}) 
        AS like_count FROM likes"; 

    } elseif($idRisp != 0){ 
     $query = "SELECT risposta, 
        (SELECT COUNT(*) FROM likes 
        WHERE risposta = {$idRisp}) 
        AS like_count FROM likes"; 

    } 

    $trovaQuanti = mysqli_query($_SESSION['connessione'], $query); 
    $trovaDavveroQuanti = mysqli_fetch_assoc($trovaQuanti); 

    if ($trovaDavveroQuanti == null) { 
     return '0'; 
    } 

    return $trovaDavveroQuanti['like_count']; 

} 
+2

** ПРЕДУПРЕЖДЕНИЕ ** При использовании 'mysqli' вы должны использовать параметризованные запросы и [' bind_param'] (http://php.net/manual/en/mysqli-stmt.bind-param. php), чтобы добавить данные пользователя в ваш запрос. ** НЕ используйте ** интерполирование строк или конкатенацию, чтобы выполнить это, потому что вы создадите серьезные [SQL-инъекции ошибок] (http://bobby-tables.com/). ** НИКОГДА ** не вводите данные '$ _POST' непосредственно в запрос. – tadman

ответ

1

Вы может попробовать обычное $.ajax звонок. И отключите кеширование. Иногда это вызывает проблему, когда вам нужно обновиться, чтобы увидеть изменения.

$.ajax({ 
    type: 'GET', 
    cache: false, 
    url: "lib/ottieniCose.php", 
    data: { like: "", id: valCOR, comOrisp: comOrisp }, 
    dataType: "html", 
    success: function(html){ 
     trova.find('.numDiLikes').html('<p>' + data + ' likes</p>'); 
    } 
}); 
Смежные вопросы