Partage
  • Partager sur Facebook
  • Partager sur Twitter

Fonction DELETE

Supprimer dans une bdd

Sujet résolu
    7 septembre 2010 à 13:22:20

    Bonjour, je souhaite préciser que je suis débutant au niveau base de donner ^^
    J'aimerai supprimer une ligne dans une table mai sje ne sais pas trop commen mi prendre, je sais qu'il faut utiliser la fonction DELETE.
    Voici mes codes:

    <h3>Suprimer</h3>
    	<form action="administrationDernierMatchSupression.php" method="post">
            <p>
            <label for="idSupr"> ID à supprimer</label> : <input type="text" name="idSupr" id="idSupr" /><br />
            <input type="submit" value="Supprimer" />
    	</p>
    	</form>
    


    <?php
    // Connexion à la base de données
    try
    {
    	$bdd = new PDO('mysql:host=localhost;dbname=newmatch', 'root', '');
    }
    catch(Exception $e)
    {
            die('Erreur : '.$e->getMessage());
    }
    
    // Suppression du message à l'aide d'une requête préparée
    $req = $bdd->exec('DELETE FROM newmatch WHERE id='$_POST['idSupr']'');
    // Redirection du visiteur vers la page du newmatch
    echo 'Message supprimé !'
    ?>
    <br />
    <a href="administrationDernierMatch.php">Retour au tableau d'administration</a>
    

    Merci de votre attention.
    • Partager sur Facebook
    • Partager sur Twitter
      7 septembre 2010 à 14:42:47

      Salut !

      Il te manque juste un point-virgule à la fin de ta requête :

      <?php
      $req = $bdd->exec('DELETE FROM newmatch WHERE id='$_POST['idSupr']';');
      ?>
      


      Normalement, si tu exécutes ta requête, cela devrait fonctionner ;)
      • Partager sur Facebook
      • Partager sur Twitter
        7 septembre 2010 à 14:58:34

        Et aussi protège contre les inclusions , je ne sais pas comment on fait avec PDO par contre ... :-°
        • Partager sur Facebook
        • Partager sur Twitter
          7 septembre 2010 à 15:22:11

          Ne marche toujours pas.
          Et c'est quoi les inclusions?
          • Partager sur Facebook
          • Partager sur Twitter
            7 septembre 2010 à 15:36:28

            bah imagine la $_POST = "3 UNION DELETE FROM newmatch" ... ta table sera entièrement vider
            pour info UNION permet de faire plusieurs requêtes à la fois
            • Partager sur Facebook
            • Partager sur Twitter
              7 septembre 2010 à 15:40:43

              Merci pour se détail qui ne met pas très important, déjà, je dois réussir à supprimer une donné en indiquant l'id.
              SVP aider moi :)
              • Partager sur Facebook
              • Partager sur Twitter
                7 septembre 2010 à 15:42:12

                Est-ce que t'as une erreur quand tu exécutes ta requête ??
                • Partager sur Facebook
                • Partager sur Twitter
                  7 septembre 2010 à 15:43:05

                  la seul erreur que je vois dans ton code c'est le point virgule manquant après le echo, je pense ça vient de la
                  • Partager sur Facebook
                  • Partager sur Twitter
                    7 septembre 2010 à 15:52:59

                    Citation : fayçall

                    bah imagine la $_POST = "3 UNION DELETE FROM newmatch" ... ta table sera entièrement vider
                    pour info UNION permet de faire plusieurs requêtes à la fois


                    UNION permet de combiner les résultats de différentes requêtes : ne fonctionne que sur des SELECT.

                    Sinon l'erreur provient tout simplement d'une mauvaise concaténation :
                    <?php $req = $bdd->exec('DELETE FROM newmatch WHERE id='.$_POST['idSupr']);

                    Cependant pour plus de sécurité, tu devrais utiliser une requête préparée qui protège contre les injections SQL :
                    <?php
                    // Connexion à la base de données
                    try
                    {
                    	$bdd = new PDO('mysql:host=localhost;dbname=newmatch', 'root', '');
                    }
                    catch(Exception $e)
                    {
                            die('Erreur : '.$e->getMessage());
                    }
                    
                    // Suppression du message à l'aide d'une requête préparée
                    $req = $bdd->prepare('DELETE FROM newmatch WHERE id= ?');
                    $req->execute(array($_POST['idSupr']));
                    $req->closeCursor();
                    // Redirection du visiteur vers la page du newmatch
                    echo 'Message supprimé !'
                    ?>
                    <br />
                    <a href="administrationDernierMatch.php">Retour au tableau d'administration</a>
                    


                    Tout ceci est expliqué en long, en large et en travers dans le tutoriel il me semble.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      7 septembre 2010 à 16:00:59

                      Merci beaucoup ! Ca marche à une condition... si j'enlève

                      catch(Exception $e)
                      {
                      die('Erreur : '.$e->getMessage());
                      }
                      Sans sa marche très bien mais il me met une erreur au niveau de la ligne catch(Exception $e) quand je la met...
                      Je met sujet résolue si vous me trouver se petit problème ^^
                      • Partager sur Facebook
                      • Partager sur Twitter
                        7 septembre 2010 à 18:14:17

                        bonjour,
                        il est préférable de gérer les erreurs sur tout le script, pas seulement sur la connexion.
                        1) Donc le try, catch devrait englober toutes les instructions PDO.
                        2) Par précaution, et ce pourrait être le cas ici, même si MySQL n'est parfois pas très regardant quant aux types, il est préférable de typer les arguments.
                        Donc plutôt qu'un, parce que ID doit être numérique.
                        $req->execute(array($_POST['idSupr']));
                        

                        il est préférable d'écrire
                        $req->bindParam(1, $_POST['idSupr'], PDO::PARAM_INT);
                        $req->execute();
                        

                        Aujourd'hui ça passe sans ça, mais demain si vous faites un SELECT .... LIMIT x,y ça ne passera pas. Pensez-y :)
                        • Partager sur Facebook
                        • Partager sur Twitter
                          16 janvier 2021 à 11:47:20

                          salut !j'ai soucis je n'arrive pas a supprimer les donnees de ma base de donnee PDO

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Fonction DELETE

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          • Editeur
                          • Markdown