Mauvaise suppression BBD

Eléphant du PHP | 184 Messages

16 mai 2011, 19:13

Bonjour à vous,

J'ai un petit tableau affichant les données d'une base clients.
J'ai fait une dernière ligne pour supprimer chaque ligne en cliquant sur un bouton supprimer.

Mon problème est le suivant:

Quel que soit la ligne sur laquelle je clique sur le bouton "supprimer", c'est toujours le dernier ID de ma table qui est supprimé, et non pas celui que je désire:

Voici mon code, je ne comprend pas du tout:

Code : Tout sélectionner

if(isset($_GET['id'])){ $id = $_GET['id']; mysql_query("DELETE FROM contact WHERE ID_contact='$id'")or die(mysql_error()); echo '<p style="color:#ff0000;font-weight:bold;">Le client a bien été supprimé</p>'."<br><br><a href=\"adduser.php\">Ajouter un nouveau client</a>"."<br><br><a href=\"index.php\">Revenir à l'accueil</a>"; } else{ ?> <p style="text-align: center;"><input type="button" name="nouveau" value="Nouveau Client" onclick="self.location.href='adduser.php'"/>&nbsp;&nbsp;&nbsp;&nbsp;<input type="button" name="rechercher" value="Rechercher" onclick="self.location.href='rechercher.php'"/></p> </center> <form action="index.php" method="GET" onSubmit="return confirm('Etes vous sur de vouloir supprimer ce client ?');" > <table border="5" align="center"> <tr> <th align="center" valign="middle">&nbsp;ID&nbsp;</th> <th align="center" valign="middle">&nbsp;Numéro Client&nbsp;</th> <th align="center" valign="middle">&nbsp;Société&nbsp;</th> <th align="center" valign="middle">&nbsp;Nom&nbsp;</th> <th align="center" valign="middle">&nbsp;Adresse&nbsp;</th> <th align="center" valign="middle">&nbsp;Code Postal&nbsp;</th> <th align="center" valign="middle">&nbsp;Ville&nbsp;</th> <th align="center" valign="middle">&nbsp;Téléphone Fixe&nbsp;</th> <th align="center" valign="middle">&nbsp;Téléphone Portable&nbsp;</th> <th align="center" valign="middle">&nbsp;Fax&nbsp;</th> <th align="center" valign="middle">&nbsp;Mail&nbsp;</th> <th align="center" valign="middle">&nbsp;Remarques&nbsp;</th> </tr> <?php do { ?> <tr> <td align="center" valign="middle"><input type="hidden" name="id" value="<?php echo $row_clients['ID_contact']; ?>"></td> <td align="center" valign="middle">&nbsp;<?php echo $row_clients['numeroclient']; ?>&nbsp;</td> <td align="center" valign="middle">&nbsp;<?php echo $row_clients['societe']; ?>&nbsp;</td> <td align="center" valign="middle">&nbsp;<?php echo $row_clients['nom']; ?>&nbsp;</td> <td align="center" valign="middle">&nbsp;<?php echo $row_clients['adresse']; ?>&nbsp;</td> <td align="center" valign="middle">&nbsp;<?php echo $row_clients['codepostal']; ?>&nbsp;</td> <td align="center" valign="middle">&nbsp;<?php echo $row_clients['ville']; ?>&nbsp;</td> <td align="center" valign="middle">&nbsp;<?php echo $row_clients['telfixe']; ?>&nbsp;</td> <td align="center" valign="middle">&nbsp;<?php echo $row_clients['telportable']; ?>&nbsp;</td> <td align="center" valign="middle">&nbsp;<?php echo $row_clients['fax']; ?>&nbsp;</td> <td align="center" valign="middle">&nbsp;<?php echo $row_clients['mail']; ?>&nbsp;</td> <td align="center" valign="middle">&nbsp;<?php echo $row_clients['remarques']; ?>&nbsp;</td> <td><input type="submit" name="Supprimer" value="Supprimer"></td> </tr> <?php } while ($row_clients = mysql_fetch_assoc($clients)); ?> </table>

Eléphant du PHP | 241 Messages

16 mai 2011, 19:21

Salut,

as-tu bien vérifié que le $id = $_GET['id']; te renvoyé le bon numéro d'id ?

Eléphant du PHP | 184 Messages

16 mai 2011, 19:36

Justement, voilà ce que j'obtiens quand je clique sur supprimer dans la barre d'adresse:

http://localhost/index.php?id=34&Suppri ... d=36&id=35

:(

Eléphant du PHP | 184 Messages

16 mai 2011, 19:37

Justement, voilà ce que j'obtiens quand je clique sur supprimer dans la barre d'adresse:

Code : Tout sélectionner

http://localhost/index.php?id=34&Supprimer=Supprimer&id=36&id=35
:(

Eléphant du PHP | 241 Messages

16 mai 2011, 19:59

Je croyais qu'il n'y avait qu'un seul client par page :wink:

Au lieu de faire des submit tu peux les remplacer par des simple button avec un onclick qui réouvrira la page avec la valeur de l'id.
<input type="button" name="Supprimer" value="Supprimer" onclick="window.open('?Supprimer=Supprimer&id=<?php echo $row_clients['ID_contact']; ?>','_self')" />
Par contre niveau sécurité de ta requête SQL c'est pas terrible :D
Regarde de ce côté ci : http://www.php.net/manual/fr/function.m ... string.php

Eléphant du PHP | 184 Messages

16 mai 2011, 20:15

Merci ça marche du tonnerre.

Mais pourrais tu m'expliquer pourquoi cela faisait cette erreur juste pour ne pas mourir idiot.

Merci encore!

Eléphant du PHP | 241 Messages

16 mai 2011, 20:28

Et bien comme tu fais une boucle, il s'affiche plusieurs lignes comme ca :
<td align="center" valign="middle"><input type="hidden" name="id" value="<?php echo $row_clients['ID_contact']; ?>"></td>
Donc il y a plusieurs champs qui ont un name identique (ici name="id") et qui ont une valeur définie.


Lorsque que tu fais le submit, il s'affichera toutes les valeurs de tous tes champs <input présent dans ton formulaire, qu'ils aient pour nom name="id" ou un autre d'ailleurs (simplement, le nom dans l'url ne serait plus id= mais la valeur du name dans le champ input).
Mais comme il y a plusieurs <input qui ont le même name, php prendra le dernier dans la liste pour son traitement.


S'ils avaient tous eu un name différent, ton url aurait eu une allure différente, de même s'il y aurait eu d'autres champs <input dans ton formulaire, leur valeurs se seraient ajoutés dans l'url


Imaginons que tu rajoutes un input avec le nom du client et que tu donne un name différent à chaque id de client :

Code : Tout sélectionner

http://localhost/index.php?id1=34&nom1=arthur&Supprimer=Supprimer&id2=36&nom2=david&id3=35&nom3=paul

pas facile à expliquer clairement :mrgreen:

Eléphant du PHP | 184 Messages

16 mai 2011, 21:04

Non au contraire j'ai parfaitement compris ton explication !

Merci infiniment pour ces réponses et ta patience !

Eléphant du PHP | 184 Messages

17 mai 2011, 17:17

J'ai encore une petite question !

Comment je pourrais faire pour quoi, quand je clique sur le bouton supprimer, il me demande je suis bien sur de vouloir.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

17 mai 2011, 17:47

avec un peu de javascript
par exemple
onclick="javascript:confirmation();" sur le bouton

et la fonction js

Code : Tout sélectionner

function confirmation() { if (alert("Voulez vous vraiment supprimer ?")) { return true; } else { return false; } }
le mieux serait de stocker en session les info du formulaire et de faire une demande de confirmation en affichant un formulaire html pour ne pas avoir de pb avec l'activation ou non de JS.


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 184 Messages

17 mai 2011, 17:53

Le problème c'est que j'ai deja quelque chose sur le onclick, c'est possible de faire les deux ?

<input type="button" name="Supprimer" value="Supprimer" onclick="window.open('?Supprimer=Supprimer&id=<?php echo $row_clients['ID_contact']; ?>','_self')" />

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

17 mai 2011, 17:57

heu oui, le mieux est d'utiliser une fonction à laquelle tu passe l'id, et sur le même principe au lieu de true tu met le code existant.

Par contre c'est quand même assez moche le coup de la popup pour supprimer un truc.

a la limite tu peut en profiter pour une demande de confirmation sur la popup et après valider la suppression (coup de sauvegarde en session des valeurs.

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 184 Messages

17 mai 2011, 19:10

Oui c'était pour ça en fait, pour ne pas supprimer brusquement si jamais on clique sans le vouloir.

Mais du coup je n'ai pas compris la réponse, on peut mettre deux onclick ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

17 mai 2011, 19:35

NON un seul et on combine les deux dans une fonction javascript !
Il en faut peu pour être heureux ......

Eléphant du PHP | 184 Messages

17 mai 2011, 20:08

J'ai fait ça, mais ça ne supprime plus du coup :(

<script>

function supprimer()
{
if (alert("Voulez vous vraiment supprimer ?")) {
return (window.open('?Supprimer=Supprimer&id=<?php echo $row_clients['ID_contact']; ?>','_self'));
}
else {
return false;
}
}

</script>

Par contre, il y a moyen d'avoir un popup qui dit oui ou non ? Parce que là je peux juste faire ok lol