Bonsoir,
voici quelques heures que j'ai un petit soucis concernant une requête SQL en AJAX via JQuery.
Je développe pour m'entrainer, un site E-commerce avec un panier et la possibilité d'y modifier les quantités. J'utilise pour cela un "input number", associé à un bouton "modifier". Le click sur le bouton modifier va activer un script JQuery, qui va traiter les données reçues (quel produit est actualisé, quelle quantité est ajoutée ou retirée en fonction du nombre inscrit dans l"input number par l'utilisateur, ET SI il a entré un chiffre égal ou inférieur à zéro, alors on supprime la ligne du produit concerné). C'est à cette dernière étape que je ne comprends pas ce qu'il se passe.
Bref, voici quelques images et mon code qui seront certainement plus parlant :
Mon Panier :
Mon Code HTML / PHP (affichage du panier simplifié) :
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 echo'<tr> <td class="img-table"><img src="assets/img/shop/produit_'.$produit['id'].'/photo_1.jpg" alt="'.$produit['name'].'" title="'.$produit['name'].'"></td> <td>'.$produit['name'].'</td> <td class="test"> <input type="number" name="quantite" id="quantite_'.$produit['id'].'" class="quantite" value="'.$caddyItems['quantite'].'"><br> <input type="button" name="modifier" id="modifier_'.$produit['id'].'" class="modifier" value="Modifier" data-id="'.$produit['id'].'" data-user="'.$idUser.'" data-idDel="'.$caddyItems['id'].'"> </td> <td>'.$produit['prix'].'</td> <td>'; if($produit['pourcent'] != 0) { echo $produit['pourcent'].'%'; } else{ echo '-'; } echo'</td> <td>'.$total.'</td> </tr>
Mon Code JQuery (je vous place TOUT le traitement lié au panier) :
(Alors oui, je mélange du JQuery et du JS, c'est pas très beau, mais ça fonctionne et j'améliorerais cela avec le temps.)
Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 // Actualisation des quantités du caddy ou suppression de ce dernier si quantite < ou = 0 $(document).ready( function() { // On créé une délégation d'événement sur TOUT le documents afin de toujours vérifier le click sur ce dernier et si le clic correspond au bouton "Modifier" $(document).on('click', ".modifier", function () { // On récupère l'ID du produit sur lequel on désire modifier la quantité const idProduit = $(this).attr('data-id'); // On récupère l'ID de l'utilisateur qui effectue cette modification const idUser = $(this).attr('data-user'); // On récupère l'input number associé au bouton sur lequel on a cliqué pour valider la modification const idItem = $(this).attr('id'); var recupId = document.getElementById(idItem); const inputQuantite = document.querySelector('input[id="quantite_' + recupId.dataset.id + '"]') if (inputQuantite) { // On récupère la value de l'input number concerné let quantite = inputQuantite.value; let idDelete = $(this).attr('data-idDel'); // On UPDATE la BDD avec la nouvelle quantité via une requête AJAX si quantite > 0 if (quantite > 0) { $.ajax( { type: "POST", data: 'newQuantite='+quantite+'&idP='+idProduit+'&idU='+idUser, url: "./assets/fonctions/modifQuantite.php", // Si succès, on actualise la liste du panier success: $('#caddyList'). load('index.php #caddyList') }); } // Sinon, on supprime le produit concerné du panier de l'utilisateur else { $.ajax( { type: "POST", data: 'idI='+idDelete, url: "./assets/fonctions/deleteProduit.php", // Si succès, on actualise la liste du panier success: $('#caddyList'). load('index.php #caddyList') }); } return false; } }); }); // FIN ACTUALISATION CADDY
Lorsque je modifie un produit avec une quantité supérieure à 0, tout fonctionne bien. Mon caddy s'actualise avec la nouvelle valeur et les nouveaux prix, pas de soucis avec ça.
En revanche, lorsque j'inscris 0 ou un chiffre négatif dans l'input number, mon algo rentre bien dans le ELSE (j'ai testé avec des console.log) et l'actualisation du caddy a bien lieu, mais la requête n'est pas exécutée.
Code PHP deleteProduit.php :
D'ordinaire je fais mes requêtes comme ceci :
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <?php $idI = $_POST['idI']; $delete = $db->prepare('DELETE FROM caddy WHERE id = :idI'); $delete->execute([ 'idI' => $idI ]) or die(print_r($db->errorInfo())); $delete->closeCursor(); ?>
Mais ne fonctionnant pas, j'ai tenté tout ce que j'ai pu trouver sur le net, mais rien n'y fait.
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $delete = $db->prepare('DELETE FROM caddy WHERE id = :idI'); $delete->execute(array( 'idI' => $idI));
Je ne vois pas mon erreur...
Parce que TOUT fonctionne, sauf la ligne qui n'est pas retirée de la BDD... C'est à n'y rien comprendre :s
La connexion à ma BDD est ok. Les droits de suppression me semblent être bons car je me connecte en root.
Si quelqu'un a la patience de me lire et de m'aider à comprendre, je suis preneur
En attendant, je vous souhaite une très bonne soirée !
Cordialement,
Derko.
Partager