Bonjour à tous,
Je viens vers vous car je rencontre un petit problème. Je souhaite que l’utilisateur puisse modifier la quantité d’un objet dans son panier s’il le souhaite, via un input tout simple fait avec bootstrap (cf capture d’écran). Je vous poste le code que je vais expliquer ensuite.
public function updateItem()
{
$cartsTable = new CartsTable();
$cart = $cartsTable->getCart(Auth::getUserId());
foreach ($cart as $key => $value) {
$_POST['quantity'] = $key;
if ($_POST['down'] != $key || $_POST['up'] != $key) {
array_slice($cart, $_POST['quantity']);
}
}
$cart = serialize($cart);
$carts = new Carts();
$carts
->setUsers_Id(Auth::getUserId())
->setItems($cart);
$cartsTable->updateCart($carts);
}
Dans un premier temps, je récupère le panier de l’utilisateur que je déserialize pour ensuite mettre en place le changement de quantité via l’input. Si la valeur est différente, je met à jour le panier après la condition. Sauf qu’il ne se passe absolument rien lors du traitement, la page se recharge, mais la quantité reste la même, je n’ai pas de messages d’erreur, j’ai l’impression que tout le code n’est pas pris en compte. Je vous met ci-dessous le formulaire
{% for item_id, item in cart %}
<tr>
<td>{{ product_name(item_id) }}</td>
<td>
{{ form.start() }}
<div class="def-number-input number-input safari_only">
<button name="down" onclick="this.parentNode.querySelector('input[type=number]').stepDown()">
<i class="fa fa-minus"></i>
</button>
<input class="quantity" min="0" name="quantity" value="{{ item.quantity }}" type="number">
<button name="up" onclick="this.parentNode.querySelector('input[type=number]').stepUp()">
<i class="fa fa-plus"></i>
</button>
</div>
{{ form.end() }}
</td>
<td>
{{ form.start({action:generate('technicien_cart_item_delete')}) }}
{{ tag.input({type:'hidden', name:'product_id', value:item_id}) }}
<button type="submit" class="btn btn-danger"><i class="fas fa-trash"></i></button>
{{ form.end() }}
</td>
</tr>
{% endfor %}
Je ne sais pas vraiment d’ou peut venir le problème, car la logique me paraissait bonne. Si quelqu’un peut jeter un oeil et me dire ou est-ce que cela cloche, je lui en serait très reconnaissant ! Merci d’avance