Prova una cosa così:
codice:
<div class="row">
<?php foreach ($elencolibri as $libro) : ?>
<div class="col-md-3">
<!-- card -->
<div class="card border-primary mb-3">
<div class="card-header">
<h5id="titolo"><?= $libro['titolo']; ?></h5>
</div>
<div class="card-body">
<p><img class="card-img" id="immagine" src="../img/cover/<?= $libro['titolo']; ?>.jpg" alt=""></p>
<!-- opzioni disponibili solo al cliente-->
<?php if ($_SESSION['seller'] === 'no') : ?>
<span id="prezzo"><?= $libro['prezzo']; ?>€ </span>
<input type="number" id="qnt-<?= $libro['id_libro']; ?>">
<a type="button" class="add-cart" data-id="<?= $libro['id_libro']; ?>">
<i class="fa-solid fa-cart-shopping"></i>
</a>
<a type="button" class="add-fav">
<i class="fa-solid fa-heart"></i>
</a>
<?php endif; ?>
<p><a id="dettagli" class="btn btn-warning" href="./scheda_libro.php?id=<?= $libro['id_libro']; ?>" role="button"> Dettagli </a></p>
</div> <!-- fine card body -->
</div> <!-- fine card -->
</div> <!-- fine col-md-3 -->
<?php endforeach; ?>
</div> <!-- fine row -->
<script>
$(".add-cart").click(function(event) {
event.preventDefault();
var productId = $(this).data('id');
var prod_qnt = $('#qnt-' + productId).val();
console.log(prod_qnt);
console.log(prod_id);
$.ajax({
url: "function_cart_fav.php",
dataType: 'text',
method: 'POST',
data: {
cart: 1,
prod_id: prod_id,
prod_qnt: prod_qnt,
// user_id: user_id // Inutile, lo hai già in sessione
},
success: function(response) {
if (response.indexOf('success') > 0) {
$("#success_cart").html('Prodotto aggiunto al carrello.');
} else {
$("#alert_cart").html(response);
}
}
});
});
</script>
L'id degli elementi html DEVE essere univoco a livello di pagiona.