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 de données à partir des paramètres passés en lien


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 78
    Points : 37
    Points
    37
    Par défaut Suppression de données à partir des paramètres passés en lien
    bonjour a tous

    je voudrais effacer de ma table tous les devis d'un client

    or dans un devis il y a des articles(il y a donc 2 tables: 1 table pour les devis appelé "commandes" et une table pour les articles commandés appelée "article_commande")

    je reussi a effacer mes devis mais pas mes articles! alors voici le lien permettant normalement de detruire tous mes devis + articles:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="infos_commande.php?allsupprim=<?php echo $_GET['devis'];?>&amp;allsupprim2=<? echo $_GET['id_commande'];?>"onClick="return confirm('Etes vous sûr de vouloir effectuer cette action?');">supprimer tous les devis</a>
    $_GET['devis'] et $_GET['id_commande'] viennent de la page precedente:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $va=mysql_query("SELECT * FROM article_commande");
    	$vam=mysql_fetch_array($va);
    	$id_commande=$vam['id_commandes'];
    $recherche = mysql_query ("SELECT * FROM membre ORDER BY id");
    while ($var = mysql_fetch_array ($recherche))	 
    {
    	$id = $var['id'];
    }
     
    <a href="infos_commande.php?devis=<?php echo $id; ?>&amp;id_commande=<?php echo $id_commande;?>">Voir ses devis</a>


    maintenant voila mon script:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if(isset($_GET['allsupprim']))
    {
    $allsuppr2=$_GET['allsupprim2'];
    mysql_query("DELETE FROM article_commande WHERE id_commandes=".$allsuppr2)or die(mysql_error());
    mysql_query("DELETE FROM commandes WHERE id_membre='". $_GET['allsupprim']."'")or die(mysql_error());
    echo'<a href="memberlist.php">retour</a>';	
    }
    et ca m'affiche comme erreur

    Erreur de syntaxe près de 'FROM article_commande WHERE id_commandes=16' à la ligne 1
    j'ai regardé et 16 correspond bien a l'id de la commande dans la bse de donnee...


    ou est mon probleme?


    merci

  2. #2
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Effectivement, ta synthaxe n'est pas bonne...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query("DELETE FROM article_commande WHERE id_commandes=".$allsuppr2)
    devient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mysql_query("DELETE FROM article_commande WHERE id_commandes='".$allsuppr2."'")

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 78
    Points : 37
    Points
    37
    Par défaut
    je suis bete!


    merci

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 78
    Points : 37
    Points
    37
    Par défaut
    mais non!

    ca change rien!

    curieusement mon code marche vu qu'il ne s'arrete pas a mon or die...

    mais il n'efface que les devis pas le contenu des champs de aticle_commande...


    une solution?

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    logiquement si tu as une clé etrangere reliant commande et article tu la met en ON DELETE CASCADE ce qui te permet de supprimer juste dans la table commande et tu n'as pas besoin de faire les autres delete
    Stay in Bed .. Save Energy

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 78
    Points : 37
    Points
    37
    Par défaut
    heuuuuuuuuuuu...


    tu peux parler moins vite s'il te plais j'ai du mal a te suivre...

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    peux tu me donner la structure de tes 2 tables que je t'explique bien
    Stay in Bed .. Save Energy

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 78
    Points : 37
    Points
    37
    Par défaut
    tiens:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    --
    -- Structure de la table `article_commande`
    -- 
     
    CREATE TABLE `article_commande` (
      `id` int(255) NOT NULL auto_increment,
      `nom` text NOT NULL,
      `qte` tinyint(255) NOT NULL,
      `designation` text NOT NULL,
      `id_commandes` int(255) NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

    et

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    -- 
    -- Structure de la table `commandes`
    -- 
     
    CREATE TABLE `commandes` (
      `id` int(255) NOT NULL auto_increment,
      `id_membre` tinyint(10) default '0',
      `date` date NOT NULL default '0000-00-00',
      `heure` time NOT NULL default '00:00:00',
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=31 ;

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    pour assurer la cohérence de ta base et faire ce que je te dit il te manque une clé etrangére
    Stay in Bed .. Save Energy

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 78
    Points : 37
    Points
    37
    Par défaut
    ha...et comment j'en rajoute?

  11. #11
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    tes tables doivent être de type innodb


    http://dev.mysql.com/doc/refman/5.0/...nstraints.html

    lii ceci et en l'appliquant sur tes tables

    Code SQL : 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
    CREATE TABLE `commandes` (
    `id` int(255) NOT NULL auto_increment,
    `id_membre` tinyint(10) default '0',
    `date` date NOT NULL default '0000-00-00',
    `heure` time NOT NULL default '00:00:00',
    PRIMARY KEY (`id`)
    ) TYPE=INNODB DEFAULT CHARSET=latin1 AUTO_INCREMENT=31 ;
     
     
    CREATE TABLE `article_commande` (
    `id` int(255) NOT NULL auto_increment,
    `nom` text NOT NULL,
    `qte` tinyint(255) NOT NULL,
    `designation` text NOT NULL,
    `id_commandes` int(255) NOT NULL,
    PRIMARY KEY (`id`),
    INDEX (id_commandes),
    FOREIGN KEY (id_commandes) REFERENCES commandes(id) ON DELETE CASCADE
    ) TYPE=INNODB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
    Stay in Bed .. Save Energy

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 78
    Points : 37
    Points
    37
    Par défaut
    et une fois que j'ai recréé mes tables quel code je dois mettre et ou pour effacer a la fois mes devis ET le contenu de ceux ci?

  13. #13
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    vu que tu as maintenant ON DELETE CASCADE la suppression de la commande va entrainer automatiquement la suppression de l'article
    . Si ON DELETE CASCADE est spécifiée, et qu'une ligne de la table parente est effacée, alors InnoDB va automatiquement effacer toute les lignes qui sont dans la table fille et dont les valeurs de clé étrangère sont celles référencées dans la ligne parente
    et comme apparamment tu arrives avec ceci à supprimer les commandes:

    DELETE FROM commandes WHERE id_membre='". $_GET['allsupprim']."'"

    ps:si ça marche pas je regarderai un peu plus tard la boulot fini
    Stay in Bed .. Save Energy

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 78
    Points : 37
    Points
    37
    Par défaut
    MERCI

    je suis bloqué dessus depuis ce matin


    et la : ca marche!(c'est pas la premiere fois que tu me debloques)

    bon travail

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 78
    Points : 37
    Points
    37
    Par défaut
    haaaaaaaaaaa


    je peux pas utiliser cette methode!

    parceque l'utilisateur doit avoir le choix entre tout effacer ou effacer un devis par un devis (cette partie du code marche a merveille)

    par contre si j'utilise ce code, je suis obligé d'effacer tous les articles du meme utilisateur : il ne peux plus les effacer un par un!



    dommage,la solution me plaisait pourtant...

  16. #16
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    remontre moi ton code stp

    pasque je vois pas le probleme si la commande est effacé on efface tous les enregistrement lié a cette commande...
    Stay in Bed .. Save Energy

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/08/2008, 23h13
  2. Générer la base de données à partir des classes
    Par giannichedda dans le forum Hibernate
    Réponses: 1
    Dernier message: 25/04/2008, 10h26
  3. Récupérer les données à partir des zones de textes
    Par TSniper dans le forum NetBeans
    Réponses: 12
    Dernier message: 09/04/2008, 12h46
  4. Récupération de données à partir des fichiers bruts
    Par grinder59 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 23/07/2007, 14h44
  5. Réponses: 1
    Dernier message: 29/03/2006, 11h05

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