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 :

Problème suppression valeur avec condition [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    526
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 526
    Points : 224
    Points
    224
    Par défaut Problème suppression valeur avec condition
    Bonjour,

    J'ai un problème de suppression de valeur.
    A partir de deux listes déroulantes, je génère une troisième liste dynamique.

    A partir du choix de l'utilisateur sur cette dernière, je voudrais supprimer une ligne dans ma table.
    Le problème, c'est que la condition WHERE n'a pas l'air de fonctionner.


    Voilà mon code :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    if (isset ($_POST['VALIDER'])){
     
    //Connection à la base de données
    connectMaBase();
     
    //On récupère les valeurs entrées par l'utilisateur :
    $annee=$_POST['ANNEE'];
    $formation=$_POST['FORMATION'];
     
    //Création de session pour stocker le nom et la date de la formation
    $_SESSION['formation'] = $formation ;
    $_SESSION['annee'] = $annee ;
     
    //Récupération des coordonnées des étudiants correspondant à la formation choisie
    $sqlnom = " SELECT NomEtudiant, PrenomEtudiant, IdEtudiant FROM etudiant WHERE (NomFormation='$formation' AND DateFormation='$annee')"; 
    $result = mysql_query($sqlnom) or die("Erreur dans la requête sur la table etudiant"); 
     
    //On ferme la connexion
    mysql_close();
     
     }
     
    ?> 
     
     <FORM  name="formulaire2"  action="Supprimeretudiant.php" method="post">
     
    <br><br>
     <div id="decalage">
     
    <label for="NomEtudiant">Etudiants de cette formation : </label><select name="NomEtudiant">
    <?php
    //Génération de la liste dynamique pour les étudiants
    while ($row=mysql_fetch_array($result)) 
    { 
    echo"<option>".$row[0]." ".$row[1]." - ".$row[2]."</option>"; 
    } 
    ?>
    </select>
     
    </div>
     
    <br><br> 
     
    <?php 
     
    if (isset ($_POST['VALIDATION'])){
     
    //Connection à la base de données
    connectMaBase();
     
    $nomEtudiant=$_POST['NomEtudiant'];
    $etudiantId = substr( $_POST['NomEtudiant'], (strpos( $_POST['NomEtudiant'], "-" )+1) );
     
    $sqlsupprim = "DELETE FROM etudiant WHERE (IdEtudiant LIKE '%$etudiantId%')";
    mysql_query ($sqlsupprim) or die ('Erreur lors de la suppression sur la table etudiant !'.$sqlsupprim.'<br />'.mysql_error());
     
    //On ferme la connexion
    mysql_close();
     
    }
    ?>
     
     
     
    <input Type="submit" Value="SUPPRIMER" name="VALIDATION">
    <input Type="reset" Value="ANNULER" name="ANNULER">
     </div>
    </FORM>
    Si qq voit le problème. Merci.

  2. #2
    Membre éclairé
    Avatar de hornetbzz
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Octobre 2009
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Octobre 2009
    Messages : 482
    Points : 773
    Points
    773
    Par défaut
    Salut,

    Déjà, je pense qu'il faut que tu sortes la partie
    if (isset ($_POST['VALIDATION'])){
    ...
    de ton formulaire et que tu la places juste avant ton formulaire.


    Ensuite je fais l'hypothèse que c'est un autre formulaire qui t'envoie vers cette page et que $_POST['VALIDER'] est récupérée de cette manière.

    Enfin, j'imagine aussi que ta page s'appelle "Supprimeretudiant.php" et que l'action du formulaire renvoie donc effectivement sur cette même page.

    Si c'est bien le cas, il faudrait donc penser à récupérer la nouvelle liste après suppression. J'ai ajouté ces lignes ci-dessous :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    <?php
    if (isset ($_POST['VALIDER'])){
     
    //Connection à la base de données
    connectMaBase();
     
    //On récupère les valeurs entrées par l'utilisateur :
    $annee=$_POST['ANNEE'];
    $formation=$_POST['FORMATION'];
     
    //Création de session pour stocker le nom et la date de la formation
    $_SESSION['formation'] = $formation ;
    $_SESSION['annee'] = $annee ;
     
    //Récupération des coordonnées des étudiants correspondant à la formation choisie
    $sqlnom = " SELECT NomEtudiant, PrenomEtudiant, IdEtudiant FROM etudiant WHERE (NomFormation='$formation' AND DateFormation='$annee')"; 
    $result = mysql_query($sqlnom) or die("Erreur dans la requête sur la table etudiant"); 
     
    //On ferme la connexion
    mysql_close();
     
     }
     
    // Cette action est à sortir du <form> et à placer en amont
    if (isset ($_POST['VALIDATION'])){
     
    //Connection à la base de données
    connectMaBase();
     
    $nomEtudiant = $_POST['NomEtudiant'];
    $etudiantId = substr( $_POST['NomEtudiant'], (strpos( $_POST['NomEtudiant'], "-" )+1) );
     
    $sqlsupprim = "DELETE FROM etudiant WHERE IdEtudiant LIKE '%$etudiantId%'"; // parenthèses inutiles me semble-t-il
    $result_supp = mysql_query ($sqlsupprim) or die ('Erreur lors de la suppression sur la table etudiant !'.$sqlsupprim.'<br />'.mysql_error());
     
     
     // Il faudrait aussi penser à récupérer la nouvelle liste après suppression
     if ($result_supp) {
    	$sqlnom = " SELECT NomEtudiant, PrenomEtudiant, IdEtudiant FROM etudiant WHERE (NomFormation='$formation' AND DateFormation='$annee')"; 
    	$result = mysql_query($sqlnom) or die("Erreur dans la requête sur la table etudiant"); 
     }
     
    //On ferme la connexion
    mysql_close();
     
    }
     
     
    ?> 
     
     <FORM  name="formulaire2" action="Supprimeretudiant.php" method="post">
     
    <br><br>
     <div id="decalage">
     
    <label for="NomEtudiant">Etudiants de cette formation : </label><select name="NomEtudiant">
    <?php
    //Génération de la liste dynamique pour les étudiants
    while ($row=mysql_fetch_array($result)) 
    { 
    echo"<option>".$row[0]." ".$row[1]." - ".$row[2]."</option>"; 
    } 
    ?>
    </select>
     
    </div>
     
    <br><br> 
     
    <input Type="submit" Value="SUPPRIMER" name="VALIDATION">
    <input Type="reset" Value="ANNULER" name="ANNULER">
     </div>
    </FORM>
    Pour finir, il faut vérifier ta requête directement dans SQL ; comme ça tu seras certain du résultat. Par ex, je ne crois pas que tu aies besoin des parenthèses encadrant la condition du WHERE. Et pourquoi un 'LIKE' sur un DELETE... ? => A vérifier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [SELECT | UPDATE | DELETE ] WHERE champ1 like '%valeur1%';

  3. #3
    Membre éclairé Avatar de nsanabi
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2003
    Messages : 570
    Points : 678
    Points
    678
    Par défaut
    je n'ai même pas bien lu le post que deux choses m'ont sauté aux yeux.

    pourquoi faire compliqué quand on peut faire simple?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
    echo"<option>".$row[0]." ".$row[1]." - ".$row[2]."</option>";
    ...
    $etudiantId = substr( $_POST['NomEtudiant'], (strpos( $_POST['NomEtudiant'], "-" )+1) );
    ne serais ce pas plus simple avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
    echo"<option value='".$row[2]."'>".$row[0]." ".$row[1]." - ".$row[2]."</option>";
    ...
    $etudiantId = $_POST['NomEtudiant'];
    en plus je ne vois pas l'interet d'un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHERE IdEtudiant LIKE '%$etudiantId%'
    d'autant plus qu'on parle de suppression de données
    un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHERE IdEtudiant ='$etudiantId'
    sera plus précis et permettra de faire jouer les index (je suppose que l'idetudiant en est un) pour plus de rapidité d'exécution.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème LEFT JOIN avec conditions ?
    Par Zane dans le forum Requêtes
    Réponses: 8
    Dernier message: 05/03/2010, 17h29
  2. [XL-2003] Recherche valeur avec condition
    Par Jeyjey1 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 01/02/2010, 13h03
  3. Problème ouverture Etat avec condition
    Par Titiii25 dans le forum IHM
    Réponses: 5
    Dernier message: 05/01/2010, 12h07
  4. [AC-2000] Suppression ligne avec conditions sur deux tables
    Par Loufink dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 09/07/2009, 12h38
  5. Réponses: 2
    Dernier message: 18/09/2008, 19h06

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