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 d'une ligne d'une base de données (PHP/Mysql) [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Suppression d'une ligne d'une base de données (PHP/Mysql)
    bonjour,
    je sais pas si c'est le bon emplacement
    bref, je suis en train de créer un petit site web et j'ai un problème quant à la supression de lignes d'un tableau
    j'ai crée une page php contenant un tableau qui s'alimente dynamiquement à partir de la base de données
    la première colonne contient des images jouant le rôle de liens de suppression de la ligne devant laquelle elles sont mises
    je veux qu'on cliquant sur l'image, la ligne correspondante se supprime de la base
    voila mes deux bout de code
    clavier.php ( elle affiche tous les claviers contenue dans la table materiels)

    Code php : 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
     $query = "SELECT * from materiel where typ='clavier'"; 
     $result = mysql_query($query);
     while($row = mysql_fetch_row($result))
        {
            $idm = $row[0]; $typ = $row[1]; $marque = $row[2]; $etat = $row[3];$date_acq = $row[4]; $date_meo = $row[5]; $duree_grt = $row[6]; $id_frs = $row[7];
           echo "<tr>\n
           <td><a href=\"supress.php?id=\".$row[0].\"\"> <input type=\"image\" src=\"del.png\" width=\"30\" height=\"30\" alt=\"supprimer\" name=\"del_img\"></a></td>\n
           <td>$idm</td>\n
           <td>$typ</td>\n
           <td>$marque</td>\n
           <td>$etat</td>\n
           <td>$date_acq</td>\n
           <td>$date_meo</td>\n
           <td>$duree_grt</td>\n
            <td>$id_frs</td>\n
                  </tr>\n";
        } 
      ?>

    supress.php (celle-ci doit se charger de la suppression)

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <html>
    <?php
    $id = intval($_POST['id']);      
    mysql_query("DELETE FROM materiel WHERE id_m = '$id' ");
    header("Location:clavier.php");
    mysql_close();
     
    ?>
    <body>
    </body>
    </html>

    ==> la page clavier.php se réaffiche mais rien n'est supprimé
    merci de me clarifer l'erreur
    je serais vraiment très reconnaissante .

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2009
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 208
    Points : 395
    Points
    395
    Par défaut
    Bonjour,

    Pour ton code, avant d'essayer de lancer ta requête sql, a tu essayé d'afficher la variable intval($_POST['id']) ?
    Si je ne me trompe pas, pour récupérer une variable par l'url, tu dois utiliser $_GET et non pas $_POST, à tester.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2009
    Messages : 53
    Points : 64
    Points
    64
    Par défaut
    Salut,
    Voila ce que j'aurais fait:

    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
    <?php
     
    if (isset($_GET['id'];))
    {
     $id = $_GET['id'];
    }
     
     $query = "SELECT * from materiel where typ='clavier'"; 
     $result = mysql_query($query);
     while($row = mysql_fetch_row($result))
        {
           ?> 
           <tr>
    	if($id!=1)
    	{
           <td><a href="clavier.php?id=1"> <input type="image" src="del.png" width="30" height="30" alt="supprimer" name="del_img"></a></td>
    	}
     
           </tr>
        <?php
        } 
      ?>
    Explication: Tu recupere le variable "id" passe dans l'URL, Il faut tester son existance (avec isset) car la premiere fois que tu charge la page elle n'existe pas.
    Ensuite tu affiche ton tableau avec des conditions. Si tu as clique sur la premiere image, tu passe la variable id a 1 dans l'URL et tu recharge la page.
    Avec la condition if elle ne sera donc plus affiche.
    Fait de meme avec toutes les lignes du tableaux.

    Si tu veut les suprimer de la table c'est le meme principe une condition if et tu met ta requete de supression.

    Voila, j'espere etre assez claire.
    byby
    JB

  4. #4
    Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Arnaud13 Voir le message
    Bonjour,

    Pour ton code, avant d'essayer de lancer ta requête sql, a tu essayé d'afficher la variable intval($_POST['id']) ?
    Si je ne me trompe pas, pour récupérer une variable par l'url, tu dois utiliser $_GET et non pas $_POST, à tester.
    j'ai modifié ça, mais c'est pas encore résolu

  5. #5
    Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par jean-ba Voir le message
    Salut,
    Voila ce que j'aurais fait:

    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
    <?php
     
    if (isset($_GET['id'];))
    {
     $id = $_GET['id'];
    }
     
     $query = "SELECT * from materiel where typ='clavier'"; 
     $result = mysql_query($query);
     while($row = mysql_fetch_row($result))
        {
           ?> 
           <tr>
    	if($id!=1)
    	{
           <td><a href="clavier.php?id=1"> <input type="image" src="del.png" width="30" height="30" alt="supprimer" name="del_img"></a></td>
    	}
     
           </tr>
        <?php
        } 
      ?>
    Explication: Tu recupere le variable "id" passe dans l'URL, Il faut tester son existance (avec isset) car la premiere fois que tu charge la page elle n'existe pas.
    Ensuite tu affiche ton tableau avec des conditions. Si tu as clique sur la premiere image, tu passe la variable id a 1 dans l'URL et tu recharge la page.
    Avec la condition if elle ne sera donc plus affiche.
    Fait de meme avec toutes les lignes du tableaux.

    Si tu veut les suprimer de la table c'est le meme principe une condition if et tu met ta requete de supression.

    Voila, j'espere etre assez claire.
    byby
    JB

    voilà ce que j'ai fait
    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
     
    <?php
    if (isset($_GET['id'];))
    {
     $id = $_GET['id'];
    }
     $query = "SELECT * from materiel where typ='clavier'"; 
     $result = mysql_query($query);
     while($row = mysql_fetch_row($result))
        {
            $idm = $row[0]; $typ = $row[1]; $marque = $row[2]; $etat = $row[3];$date_acq = $row[4]; $date_meo = $row[5]; $duree_grt = $row[6]; $id_frs = $row[7];
           echo "<tr>\n
           if($id!=1)
    	{
           <td><a href="clavier.php?id=1"> <input type="image" src="del.png" width="30" height="30" alt="supprimer" name="del_img"></a></td>
    	}
    \n
           <td>$idm</td>\n
           <td>$typ</td>\n
           <td>$marque</td>\n
           <td>$etat</td>\n
           <td>$date_acq</td>\n
           <td>$date_meo</td>\n
           <td>$duree_grt</td>\n
            <td>$id_frs</td>\n
                  </tr>\n";
        } 
      ?>
    c'est toujours le même problème

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2009
    Messages : 53
    Points : 64
    Points
    64
    Par défaut
    ok,

    Bon essaye sa alors:
    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
    <?php
    if (isset($_GET['id'];))
    {
     $id = $_GET['id'];
    }
     
    if ($id==1)
    {
     mysql_query("DELETE FROM materiel WHERE id_m = '$id' ");
    }
     
     $query = "SELECT * from materiel where typ='clavier'"; 
     $result = mysql_query($query);
     while($row = mysql_fetch_row($result))
        {
            $idm = $row[0]; $typ = $row[1]; $marque = $row[2]; $etat = $row[3];$date_acq = $row[4]; $date_meo = $row[5]; $duree_grt = $row[6]; $id_frs = $row[7];
           echo "<tr>\n
           <td><a href="clavier.php?id=1"> <input type="image" src="del.png" width="30" height="30" alt="supprimer" name="del_img"></a></td>\n
           <td>$idm</td>\n
           <td>$typ</td>\n
           <td>$marque</td>\n
           <td>$etat</td>\n
           <td>$date_acq</td>\n
           <td>$date_meo</td>\n
           <td>$duree_grt</td>\n
            <td>$id_frs</td>\n
                  </tr>\n";
        } 
      ?>
    Il faut bien entendus que dans ta table la valeur de "id_m" soit egale a 1.

  7. #7
    Invité
    Invité(e)
    Par défaut
    ATTENTION : DANGER !!

    Il est TRES dangereux de passer un id dans l'URL,
    surtout pour SUPPRIMER une ligne dans une BD !!!


    Rien n'empêche de changer le numéro directement dans la barre d'adresse, et de supprimer n'importe quoi !!

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2009
    Messages : 53
    Points : 64
    Points
    64
    Par défaut
    C'est vrai jreau62 a raison.
    Mieux vaut utiliser les SESSION non?

  9. #9
    Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    j'ai essayé votre solution mais c'est pas encore résolu

  10. #10
    Invité
    Invité(e)
    Par défaut
    Dans tes fichiers de départ :
    Tu vas remplacer (d'autant qu'il y a des fautes de \" !) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
           <td><a href=\"supress.php?id=\".$row[0].\"\"> <input type=\"image\" src=\"del.png\" width=\"30\" height=\"30\" alt=\"supprimer\" name=\"del_img\"></a></td>\n
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
           <td>
           <form method=\"post\" action=\"supress.php\">
           <input type=\"hidden\" name=\"id\" id=\"id\" value=\"".$row[0]."\">
           <input type=\"image\" src=\"del.png\" width=\"30\" height=\"30\" alt=\"supprimer\" name=\"del_img\">
           </form>
           </td>\n
    Et dans supress.php, par protection contre les injection SQL, ajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $id = intval(mysql_real_escape_string(($_POST['id']));
    Note : il faut se connecter a la BD avant (au début de la page supress.php)

    Tu ne peux pas mettre :
    header("Location:clavier.php");
    car tu as déjà envoyé du code html avant ...

    Remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <html>
    <?php
    $id = intval($_POST['id']);      
    mysql_query("DELETE FROM materiel WHERE id_m = '$id' ");
    header("Location:clavier.php");
    mysql_close();
    ?>
    <body>
    </body>
    </html>
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    // connection a la BD
    include('_connexion.php');
    // si id a ete poste :
    if(isset($_POST['id']) && $_POST['id']!='')
    {
       $id = intval(mysql_real_escape_string($_POST['id'])); 
       mysql_query("DELETE FROM materiel WHERE id_m = ".$id);
     
    }
    header('location:clavier.php');
    // deconnection
    mysql_close();
    ?>
    (pas besoin de code html)

    NB : Perso, je serais passé par une page de CONFIRMATION DE SUPPRESSION
    (pour éviter d'effacer une ligne en appuyant PAR INADVERTANCE sur le bouton !)
    Dernière modification par Invité ; 14/05/2009 à 16h19.

  11. #11
    Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Dans tes fichiers de départ :
    Tu vas remplacer (d'autant qu'il y a des fautes de \" !) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
           <td><a href=\"supress.php?id=\".$row[0].\"\"> <input type=\"image\" src=\"del.png\" width=\"30\" height=\"30\" alt=\"supprimer\" name=\"del_img\"></a></td>\n
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
           <td>
           <form method=\"post\" action=\"supress.php\">
           <input type=\"hidden\" name=\"id\" id=\"id\" value=\"".$row[0]."\">
           <input type=\"image\" src=\"del.png\" width=\"30\" height=\"30\" alt=\"supprimer\" name=\"del_img\">
           </form>
           </td>\n
    Et dans supress.php, par protection contre les injection SQL, ajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $id = intval(mysql_real_escape_string(($_POST['id']));
    Note : il faut se connecter a la BD avant (au début de la page supress.php)

    Tu ne peux pas mettre :
    header("Location:clavier.php");
    car tu as déjà envoyé du code html avant ...

    Remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <html>
    <?php
    $id = intval($_POST['id']);      
    mysql_query("DELETE FROM materiel WHERE id_m = '$id' ");
    header("Location:clavier.php");
    mysql_close();
    ?>
    <body>
    </body>
    </html>
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    // connection a la BD
    include('_connexion.php');
    // si id a ete poste :
    if(isset($_POST['id']) && $_POST['id']!='')
    {
       $id = intval(mysql_real_escape_string(($_POST['id']))); 
       mysql_query("DELETE FROM materiel WHERE id_m = ".$id);
    
    }
    header('location:clavier.php');
    // deconnection
    mysql_close();
    ?>
    (pas besoin de code html)

    NB : Perso, je serais passé par une page de CONFIRMATION DE SUPPRESSION
    (pour éviter d'effacer une ligne en appuyant PAR INADVERTANCE sur le bouton !)
    vraiment bravo
    presque aucune erreur, uniquement une parenthèse qui manquait
    tu as excéllé, c'est résolu,
    je vous remerci enomrément vous et tout les membres de l'équipe qui ont participé à ce sujet

  12. #12
    Invité
    Invité(e)
    Par défaut
    Il y avait plutot une parenthese en trop !
    $id = intval( mysql_real_escape_string($_POST['id']) );

    Si tu veux intercaler une page de CONFIRMATION DE SUPPRESSION :
    supress.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
    <html>
    <head>
    </head>
    <body>
    <?php
    // si id a ete poste :
    if(isset($_POST['id']) && $_POST['id']!='')
    {
    	echo '
    	Voulez-vous vraiment SUPPRIMER cet enregistrement ?<br />
    	<form method="post" action="supressOK.php">
    	<input type="hidden" name="id" id="id" value="'.$_POST['id'].'">
    	<input type="submit" name="Supprimer" id="Supprimer" value="Supprimer">
    	</form>
    	';
    }
    // (eventuellement : reafficher la ligne concernee)
    ?>
    </body>
    </html>
    et
    supressOK.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
    <?php
    // connection a la BD
    include('_connexion.php');
    // si id a ete poste :
    if(isset($_POST['id']) && $_POST['id']!='')
    {
       $id = intval(mysql_real_escape_string($_POST['id'])); 
       mysql_query("DELETE FROM materiel WHERE id_m = ".$id);
     
    }
    header('location:clavier.php');
    // deconnection
    mysql_close();
    ?>
    Dernière modification par Invité ; 12/05/2009 à 14h02.

  13. #13
    Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Il y avait plutot une parenthese en trop !
    $id = intval( mysql_real_escape_string($_POST['id']) );
    wé, juste j'ai compté le nombre de parenthèses ouvrantes
    Citation Envoyé par jreaux62 Voir le message
    Si tu veux intercaler une page de CONFIRMATION DE SUPPRESSION :
    supress.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
    <html>
    <head>
    </head>
    <body>
    <?php
    // si id a ete poste :
    if(isset($_POST['id']) && $_POST['id']!='')
    {
    	echo '
    	Voulez-vous vraiment SUPPRIMER cet enregistrement ?<br />
    	<form method="post" action="supressOK.php">
    	<input type="hidden" name="id" id="id" value="'.$_POST['id'].'">
    	<input type="submit" name="Supprimer" id="Supprimer" value="Supprimer">
    	</form>
    	';
    }
    // (eventuellement : reafficher la ligne concernee)
    ?>
    </body>
    </html>
    et
    supressOK.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
    <?php
    // connection a la BD
    include('_connexion.php');
    // si id a ete poste :
    if(isset($_POST['id']) && $_POST['id']!='')
    {
       $id = intval(mysql_real_escape_string($_POST['id'])); 
       mysql_query("DELETE FROM materiel WHERE id_m = ".$id);
     
    }
    header('location:clavier.php');
    // deconnection
    mysql_close();
    ?>
    c'est fait merci encore

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/01/2015, 18h30
  2. [SQLite] Cacher une ligne de la base de données
    Par TZoaldiek dans le forum Android
    Réponses: 4
    Dernier message: 25/02/2014, 16h12
  3. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  4. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  5. [phpMyAdmin] question sur une ligne à ajouter à ma base de données
    Par jsdar dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 14/04/2007, 11h13

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