Le problème vient de la conception... tu demandes à ta base de données de supprimer tous les enregistrements pour lesquels le nom est dupont, c'est donc ce qu'elle fait.
Pour supprimer un enregistrement en particulier, il te faut un moyen unique de distinguer chacun d'entre eux. En général, on utilise un identifiant de façon à pouvoir dire "supprime les enregistrement dont l'id est 7" et dont on sait qu'il n'y aura qu'un seul 7 dans ta base, au lieu de "supprime les enregistrement dont le nom est dupont" et se retrouver dans ton cas

Je multiplie à l'infini la justesse de cette remarque, en ajoutant mon grain de sel:
Il est plus qu'aberrant de concevoir une table de "personnes" sans avoir un identificateur unique, indépendant des champs de la table. J'imagine la Sécu devant choisir entre les 10000 "dupont"...
Cet identificateur unique permet entre autres détails de faire facilement des jointures entre tables, la table des personnes et la table des formations qu'ils suivent, par exemple.
personnes:
id_personne (unique), nom, prenom
1, toto, jean
2, toto, jean (un homonyme absolu)
3, dugland, albert
4, du gland, médor
5, Brunette, julie
formations
id_formation(unique), titre....
1, culture des petits pois
2, fabrication des cornichons
peronnes_formations
id_personne (pris dans personnes), id_formation (pris dans formation)
1, 1 = toto jean suit la formation culture
1,2 = toto jean suit la formation cornichons
2,2 dugland albert suit la formation cornichons
3,2 du gland médor suit la formation cornichons
Les mises à jour en sont largement si!mplifiées
le changement de nom de Brunette Jolie, par exemple, ou la suppression d'une formetion
Pour l'exploitation, il suffit d'avoir
<input .... value ='$id_personne'>$nom
....
Il est extrêmement facile d'ajouter une colonne INTEGER UNIQUE autoincrement à une table, d'en faire la clef...
Je simplifie, mais une bonne lecture serait:
sql-bases-donnees/petit-rappel-normalis ... 23004.html