There are " n " ways to do this, but a simple way to get this by using jQuery looks like this:
<a href="javascript:void(0);" class="btn_nornal">Favoritar</a>
In the example below it makes a "autoload" ajax request by loading the page that checks the status:
$(function(){
var user_id = '123';
//checa o status ao carregar a página...
actionFavorite('checar', user_id);
//favorita
$('.btn_normal').on('click', function(){
actionFavorite('favoritar', user_id);
});
});
function actionFavorite(action, user_id) {
$.post('check-or-add-status-favorite.php',{action:action, id:user_id},function(e){
var statusClass = jQuery.parseJSON(e);
if (statusClass.status == 'active') {
$('.btn_normal').addClass(statusClass.status);
$('.btn_normal').text(statusClass.txt)
} else {
$('.btn_normal').removeClass('active');
$('.btn_normal').text(statusClass.txt)
}
});
}
and in PHP:
<?php
$action = $_POST['action'];
$user_id = $_POST['id'];
$status = 'active';
$txt = 'Favoritos';
if ($action == 'checar') {
$consulta = $pdo->query("SELECT status_favorito
from usuarios
WHERE id_usuario=:id_usuario;");
$consulta->bindParam(':id_usuario',(int) $user_id, PDO::PARAM_INT);
$consulta->execute();
$row = $consulta->fetch(PDO::FETCH_ASSOC);
//se já for gravado, será: 'active', caso constrário, ele emprimirá '';
if ($row['status_favorito'] == 'active') {
$txt = 'Favoritos';
} else {
//reseta se não estiver ativo
$status = '';
$txt = 'Favoritar';
}
echo json_encode(array(
'status' => $status,
'txt' => $txt
));
} else {
//faz update se ação: 'favoritar'
$consulta = $pdo->query("UPDATE usuarios SET
status_favorito=:status
WHERE id_usuario=:id_usuario;");
$consulta->bindParam(':status',$status, PDO::PARAM_STR);
$consulta->bindParam(':id_usuario',(int) $user_id, PDO::PARAM_INT);
$consulta->execute();
echo json_encode(array('status' => $status, 'txt'=> $txt ));
}