There’s "n" ways to do this, but a simple way to get this by using jQuery is like this:
<a href="javascript:void(0);" class="btn_nornal">Favoritar</a>
In the example below it makes a request "autoload" ajax, when 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 ));
}
							
							
						 
About front, I can work in the back end, I just wanted to know how this communication would be, I don’t know anything about front rs
– Thiago