[RESOLU] Supprimer des données de la bdd en sql

Eléphant du PHP | 89 Messages

06 mai 2023, 11:07

Bonjour, voilà j'ai un programme qui m'affiche une liste de client dans un tableau en fonction de s'il on leurs carte de fidélité qui est complète. Cependant, j'aimerais faire en sorte que lorsqu'un client possède plusieurs carte de complète je puisse en supprimer le nombre que je veux. Et c'est là que je bloque car avec mon niveau actuelle j'arrive uniquement à supprimer toutes les cartes d'un seul coup.
voilà la structure du tableau

Code : Tout sélectionner

<form method="post" name="validerclient"> <div class="container"> <table class="styled-table"> <thead> <tr> <th>Nom</th> <th>Prénom</th> <th>Téléphone</th> <th>Mail</th> <th>Quantiter</th> <th>Supprimer</th> <th></th> </tr> </thead> <tbody> <?php if($clients != ""): ?> <?php foreach ($clients as $client): ?> <tr> <td><?= $client['nom'] ?></td> <td><?= $client['prenom'] ?></td> <td><?= $client['phone'] ?></td> <td><?= $client['mail'] ?></td> <td><?= $client['id_client'] ?></td> <td><input type="submit" value="Supprimer" name="supprimer"></td> <td><input type="hidden" name ="client_id" value="<?= $client['id'] ?>" ></td> </tr> <?php endforeach; ?> <?php endif; ?> </tbody> </table> </div> </form>
voilà la requete sql $clients

Code : Tout sélectionner

$clients = $db->query(" SELECT c.id, c.nom, c.prenom, c.phone, c.mail, COUNT(a.id_client) as id_client FROM client c LEFT JOIN complet a ON a.id_client = c.id WHERE a.id_client != '' GROUP BY c.nom ")->fetchAll();
et voici mon code qui supprime dans la bdd

Code : Tout sélectionner

$delete = $db->query(" DELETE FROM complet WHERE id_client = $id_client ")->fetchAll();
je suppose qu'il faut que je passe par l'id des carte complètes mais je ne sais pas comment les placer dans le tableaux donc avez vous une solution à me proposer ?

Mammouth du PHP | 2703 Messages

06 mai 2023, 14:09

il faut mettre l'ouverture du formulaire dans la boucle, afin qu'il y ai 10 formulaires s'il y a 10 lignes.
et si, cela doit être mis en production, mieux vaut le faire en ajax qu'avec un formulaire qui oblige au rechargement de la page.

Eléphant du PHP | 89 Messages

06 mai 2023, 15:16

Alors merci pour ta réponse cependant j'ai réussi à commencer à trouver une solution entre-temps. C'est à dire que pour faire ça j'ai, lors de la requête fais un group_concat pour avoir un string et avec un explode je transforme ce string en array et avec une boucle for ($i=0;...) et j'obtiens l'id voulu quand je fais un explode dans ma boucle for

Mammouth du PHP | 2703 Messages

06 mai 2023, 15:26

en faisant ainsi, on obtient à chaque tous les id, pas seulement celui qui correspond au bouton supprimer choisi.

Eléphant du PHP | 89 Messages

06 mai 2023, 15:29

C'est en effet le cas mais cela n'est pas gênant à cause du WHERE (et car en général la quantité qui ressortira de la requête n’excèdera jamais 5 lignes)

Mammouth du PHP | 2703 Messages

06 mai 2023, 15:31

si le where est sur, autant faire directement un delete avec le même where que pour le select.

Eléphant du PHP | 89 Messages

06 mai 2023, 15:34

en effet, autant pour moi, j'ai modifié et mon code est comme ça moins charger et il fonctionne quand même. Merci pour ton aide