IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

supprimer enregistrement dans bdd


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2012
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 90
    Par défaut supprimer enregistrement dans bdd
    Bonjour,
    J’ai besoin de votre aide !
    Voici un script qui efface un enregistrement dans une base de données grâce à une case à cocher.
    Malheureusement si par malheur dans la colonne nom dela base les données sont similaires(ex.dupont/dupont) alors tous les 2 enregistrements portant le même nom sont effacés. Comment éviter cela, ou est l'erreur ?
    Code : 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
    <?php
    if(isset($_POST['supprimer_situation']))
    {
       if ($_POST['delete'] == "") {
     echo 'cochez la ligne а supprimer !';
     }
     else
    {
    foreach($_POST['delete'] as $val)
    {
    $sql="DELETE FROM sit_formation where nom='$val'";
    $req= mysql_query($sql); 
    }
    echo '***donnйes supprimйes :'.$val.'';
     } }
    ?>
    merci d'avance!

  2. #2
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Comment éviter cela
    Dans cette table, il doit très certainement avoir un identifiant, de plus en auto_increment, genre : sit_formation_id

    Si tel est le cas, alors au niveau du formulaire, il faudrait mettre la valeur de ces identifiants là à la place des noms dans les checkbox.

    Ce sera alors ces IDs qui seront renvoyés, ces Ids étant uniques il ne devrait plus avoir de problème.


    Il faut toujours privilégier de "travailler" avec ces IDs que des noms ou autre dans la mesure du possible.


    Par ailleurs, en admettant qu'il ne soit pas judicieux d'avoirs des noms identiques de "sit_formation", on peu faire en sorte lors de l'étape d'insertion ou de modification de ce nom, de faire une requête SQL recherchant un éventuel nom de "sit_formation" identique.
    Si tel est le cas, on n'effectue pas l'insertion/modification, on invite l'utilisateur à saisir un autre nom.
    On peu même rajouter coté Bdd pour ce champ une contrainte d'unicité (UNIQUE), et là, même en cas d'accident il sera impossible d'avoir 2 noms identiques.
    Faut voir.


    PS : Utilise le BBCode code pour les codes, c'est fait pour et ça plus lisible les post.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    echo 'Du code Php ...';
    ?>

  3. #3
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2012
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 90
    Par défaut
    non ! il n y a pas d'ID auto incrémenté pour l'instant dans mon exemple.
    C'est pour cela que j'utilise en tableau dans mon script:
    ----foreach($_POST['delete'] as $val)
    tiens pour info voici le code du formulaire:
    Code : 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
    <?php
    require ("Connect.php");
    $connexion = mysql_pconnect (SERVEUR, NOM, PASSE);
    mysql_select_db (BASE,$connexion);
     $resultat = mysql_query ($requete, $connexion);
    $sql = mysql_query("SELECT * FROM sit_formation WHERE id='$_SESSION[id]'");
    echo '<table border=0 cellpadding="2" cellspacing="1" >
    	<tr class=memo3_etiquette>
    		<td width=300 height=20>nom</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['nomn'].'"></td>
    	</tr>';
    	} 
    	echo '</table>';
    ?>

  4. #4
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    non ! il n y a pas d'ID auto incrémenté pour l'instant dans mon exemple.
    Tu en est sur ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE id='$_SESSION[id]'
    C'est quoi ce champ id, que contient il lorsqu'il y a 2 noms dupont ?
    Le même id ou pas ?
    Est-ce une clé primaire ou pas ?
    Post la structure de cette table au besoin, qu'on voit mieux.


    Le fonctionnement que tu recherches et le dysfonctionnement que tu remarques demande à mon sens à avoir un champ unique de façon à manipuler une donnée unique même si celle d'à coté (comme un nom) peut être le même plusieurs fois.

    Une base de donnée repose en majeur partie sur ce principe là, sinon c'est ingérable, voir impossible de créer toute une application sans cela.

    Il faudrait avoir quelque chose comme ceci : (un champ en auto_increment)
    table "sit_formation"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    id | nom
     1 | MySQL
     2 | Apache
     3 | Php
     4 | Php
     5 | Javascript
     6 | Css
     7 | Html
    ... etc ...
    Ici, Il y a 2 formations Php, qu'elle y soit 2 fois ne causera pas de problème car elles ont 2 identifiants uniques, ce sont bien 2 formations différentes.


    Qu'est-ce qui n'irait pas en procédant comme ceci ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2012
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 90
    Par défaut
    effectivement très cher c'est toi qui a raison, j'ai crée une id auto incrémenté dans la table, j'ai modifié le code et ça fonction excellemment bien!
    salutations et merci

Discussions similaires

  1. Probleme ajout d'enregistrement dans bdd Access
    Par freerider74 dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 19/11/2008, 10h53
  2. [MySQL] Enregistrement dans bdd via POST
    Par freko dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 06/05/2008, 13h55
  3. [MySQL] problème d'enregistrement dans bdd
    Par guismoman33 dans le forum PHP & Base de données
    Réponses: 19
    Dernier message: 12/03/2008, 14h43
  4. Création d'enregistrement dans bdd
    Par fiatt dans le forum Bases de données
    Réponses: 2
    Dernier message: 13/01/2008, 10h06
  5. enregistrement dans BDD
    Par philguio dans le forum Windows Forms
    Réponses: 2
    Dernier message: 26/03/2007, 12h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo