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 :

Suppression non prise en compte [PDO]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Octobre 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Octobre 2019
    Messages : 10
    Par défaut Suppression non prise en compte
    Rebonjour, j'ai un problème de syntaxe pour la suppression d'un des enregistrements que je n'arrive pas à résoudre alors que j'ai utilisé à priori la même syntaxe que pour la modification.
    J'ai su afficher dans une nouvelle colonne de ma table un bouton supprimer en passant l'id à supprimer (pour l'instant je laisse affiché les identifiants pour être sûr que je ne me trompe pas).
    Tout se passe correctement jusqu'au formulaire de suppression où rien ne se passait alors qu'il me mettait que l'enregistrement était modifié avec succès.
    J'ai donc mis un ERRMODE dans ma connexion à la base et là il me ressort l'erreur suivante:
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id = '7'' at line 1' in C:\Program Files (x86)\EasyPHP-Devserver-17\eds-www\test\formsupp.php:21 Stack trace: #0 C:\Program Files (x86)\EasyPHP-Devserver-17\eds-www\test\formsupp.php(21): PDOStatement->execute(Array) #1 {main} thrown in C:\Program Files (x86)\EasyPHP-Devserver-17\eds-www\test\formsupp.php on line 21
    L'enregistrement que je veux supprimer est bien le 7 (dans l'exemple pris)
    Voici mes codes.

    recherche_ing.php
    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
    <?php
    $id=$_POST['Id_ing'];
    try
    {
    $bdr= new PDO('mysql:host=localhost;dbname=recettes;charset=utf8', 'root', '');
    }
    catch (Exception $e)
    {
            die('Erreur : ' . $e->getMessage());
    }
    $requete = $bdr->prepare('SELECT * from ingredients where lib_ing LIKE ?');
    $requete->execute(array("$id%"));
     
    $nbresult = $requete->rowcount();
    echo '<br>';
    if ($nbresult == 0) {
    	echo "ingrédient non trouvé. Voulez-vous rajouter cet ingrédient à la liste?";
    	?>
    <form name = "ajout_ing" method= "post" action= "ajout_ing.php">
    <input type = "submit"  value = "Oui" name ="valid"/>
    </form>
    <form name = "retour" method= "post" action= "index.php">
    <input type = "submit" value = "Non" />
     
    <?php	
    }
    else 
    {	
    while($donnees = $requete->fetch(PDO::FETCH_OBJ))
    {
    ?>
    <table border = 1>
    <th>
    identifiant
    </th>
    <th>
    nom de l'ingrédient
    </th>
    <tr>
    <td>
    <?php echo $donnees->id;?>
    </td>
    <td>
    <?php echo $donnees->lib_ing; ?>
    </td>
    <td>
      <form action="ingaafficher.php" method="post">
    	<input type="text" name="id_ing" value="<?php echo $donnees->id; ?>" />
    	<button type="submit" name="btn_modifier_form" title="Modifier">Modifier</button>
      </form>
      </td>
      <td>
     
    <form action = "ingasupprimer.php" method="post">
    	<input type="text" name="id_supping" value="<?php echo $donnees->id; ?>" />
    	<button type = "submit" name = "btn_supprimer_form" title = "Supprimer">Supprimer</button>
    	</form>
    </td>
    </tr>
    </table>
    <?php
    }
    }
    ?>
    ingasupprimer.php

    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
    echo $_POST['id_supping'];
    echo "<br>";
    echo "Voulez vous supprimer cet ingrédient?";
     
    ?>
    <form action = "formsupp.php" method = "post" >
    <input type = "text" name = "id_supping" value = "<?php echo $_POST['id_supping'];?>">
    <button type = "submit" name = "btn_supp_valider"> Oui </button>
    </input>
     
     
    </form>
    <form action = "index.php" method= "post" >
    <button type = "submit" name = "btn_supp_annuler"> Non </button>
    </form>
    formsupp.php
    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
     
    <?php
    $ing_modid=$_POST['id_supping'];
    echo "<br>";
    try
    {
    $bdr= new PDO('mysql:host=localhost;dbname=recettes;charset=utf8', 'root', '');
    $bdr->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
    catch (Exception $e)
    {
            die('Erreur : ' . $e->getMessage());
    }
     
    // -------------
    // TRAITER le formulaire de Modification
    if( isset($_POST['btn_supp_valider']) )
    {
       // ICI, on fait la requête DELETE
            $sql_delete = "DELETE ingredients WHERE id = ?";
            $res_delete = $bdr->prepare($sql_delete);
            $res_delete->execute([$_POST['id_supping']]);
    echo 'ingrédient ' .$ing_modid . ' supprimé avec succès' ;
     
    }
     
    ?>
    <form action = "index.php" method="post" >
    <input type= "submit" name = "retour" value = "retour à la page principale"; />
    </form>
    Pour information j'ai fait des echo et des champs type text et non pas hidden à chaque étape pour être sûr de récupérer la bonne valeur. Ces lignes disparaîtront ou modifiées en hidden une fois que je serai sûr de mon code et que çà fonctionnera.
    Merci de votre compréhension et de vos réponses.
    Cordialement,
    Christophe.

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 513
    Par défaut
    Salut,
    Attention, le code html de recherche_ing.php n'est pas bon, il manque le <thead> + <tr> des <th> puis tu rajoutes un nouveau tableau pour chaque enregistrement, il faut faire sortir le <thead> de la table et les th de la boucle :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    <table border = 1>
    <thead>
    <tr>
    <th>identifiant</th>
    <th>nom de l'ingrédient</th>
    ...
    </tr>
    </thead>
    <tbody>
    <?php 
    while($donnees = $requete->fetch(PDO::FETCH_OBJ)){
      /* c'est ici que tu dois générer les <tr> de chaque enregistrment */
    }?>
    </tbody>

    Pour l'erreur il manque "from" avant le nom de la table.
    Code mysql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "DELETE from ingredients WHERE id = ?"

    Après tu peux utiliser rowCount() pour t'assurer que la suppression s'est correctement effectuée :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $res_delete->execute([$_POST['id_supping']]);
    if($res_delete->rowCount()>0){
         echo 'ingrédient ' .$ing_modid . ' supprimé avec succès' ;
    }

  3. #3
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Octobre 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Octobre 2019
    Messages : 10
    Par défaut Merci à nouveau!!!!
    Mon dieu quelle erreur de ma part j'en ai honte!!

    Je pensais que c'était un problème de quotes mais je n'ai jamais pensé que c'était lié à ce problème.
    Merci beaucoup pour la réponse et je m'empresse de faire le rowCount()Bonne journée.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $id=$_POST['Id_ing'];
    ...
    $requete = $bdr->prepare('SELECT * from ingredients where lib_ing LIKE ?');
    $requete->execute(array("$id%"));
     
    ...
    $ing_modid=$_POST['id_supping'];
    "id", "Id_ing", "ing_modid", "id_supping",....... Comment veux-tu pouvoir t'y retrouver si tu changes sans arrêt le nom de la MEME variable ?
    Ce n'est pas possible.
    Sois plus rigoureux...

    ... et tu verras que tu as mis " where lib_ing LIKE ?" au lieu de " where id = ?".

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

Discussions similaires

  1. [2.x] Suppression d'une image non prise en compte
    Par pixel016 dans le forum Symfony
    Réponses: 19
    Dernier message: 20/01/2015, 09h30
  2. Installation SP2 + RAM non prise en compte
    Par laure_belette dans le forum Windows XP
    Réponses: 3
    Dernier message: 13/10/2005, 12h46
  3. [css] Feuille de style non prise en compte
    Par Neuromancien2 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 29/06/2005, 11h49
  4. [netbeans] Modifications non prises en compte
    Par nadass dans le forum NetBeans
    Réponses: 6
    Dernier message: 07/04/2005, 13h49
  5. Lecture de fichier - dernière ligne non prise en compte
    Par JulienPles dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 16/03/2005, 11h57

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