supprimer enregistrement dans bdd

afi
Eléphant du PHP | 51 Messages

26 févr. 2012, 15:04

bonjour, j'ai besoin de votre aide!
Voici mon script:
<?php
if(isset($_POST['supprimer_situation']))
{
   if ($_POST['delete'] == "") {
 echo '<p class=rep_info><i>cochez la ligne à supprimer !</i></p>';
 }
 else
{
foreach($_POST['delete'] as $val)
{
$sql="DELETE FROM formation where nom='$val'";
$req= mysql_query($sql); 
}
echo '<p class=rep_info>***données supprimées : <font color=#FF0000><i> '.$val.'</i></font></p>';
 } }
?>
==================
malheureusement si dans la base figure plusieurs personnes ayant le même NOM, ex. Dupont, au" submit" tous les Dupont sont effacés!
Ou est le pb?
merci!!!!!

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

26 févr. 2012, 16:00

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 :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

afi
Eléphant du PHP | 51 Messages

26 févr. 2012, 16:19

ok tu as raison! dans mon cas j'utilise un formulaire php ci dessous, et j'utilise un checkbox pour lui demander de supprimer qu'un nom :
<p>cochez la ligne à modifier ou à supprimer!</p>
....
echo '<table border=0 cellpadding="2" cellspacing="1" >
<tr class=memo3_etiquette>
<td width=300 height=20>situation à ce jour</td>
<td width=50 height=20>supprimer</td>

</tr>';
while($result=mysql_fetch_array($sql))
{
echo '<tr><td class=data width=300 height=20>'.$result[nom'].'</td>
<td width=50 height=20><input type=checkbox name=delete[] value="'.$result['nom'].'"></td>
</tr>';
}
....

et tout cela se trouve dans un tableau:
foreach($_POST['delete'] as $val)
{
$sql="DELETE FROM sit_formation where nom='$val'";
$req= mysql_query($sql);
}
donc je n'ai pas besoins d'identifiant? ok

Petit nouveau ! | 4 Messages

26 févr. 2012, 16:22

Bonjour,
Si tu appelles une page pour supprimer tes données dans ta BDD tu peux écrire quelque chose comme ça :
<a href="ta_page_pour_supprimer.php?nom=<?=$data['id']?>">Supprimer</a>
Ensuite dans ta page de suppression le code :
$sql = "DELETE FROM ta_table where id=$nom";
J'espère t'avoir aidé pour ma première réponse :)

afi
Eléphant du PHP | 51 Messages

04 mars 2012, 08:44

désolé du retard, je prends note
merci

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

04 mars 2012, 11:02

Attention : les shorts tags n'étant pas la configuration par défaut de php il est plus que recommander de n'a pas les utiliser.

Donc
<?php
echo $variable;
?>
Et non
<?= $variable ?>

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

Mammouth du PHP | 2278 Messages

04 mars 2012, 12:17

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
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

afi
Eléphant du PHP | 51 Messages

04 mars 2012, 12:34

ok sirakawa c'est comme cela je l'ai compris! merci
et grand merci à tous, au plaisir de vous retrouver!!!!