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 :

Réalisation d'une suppression en cascade


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de mjs21
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 85
    Par défaut Réalisation d'une suppression en cascade
    Bonjour,

    J'ai un soucis dans un de mes script php qui a pour but de supprimer un Type de matériel de ma base de données Mysql et j'aimerais que celà supprime en même temps les matériels associés j'ai dejà réalisé une requete qui est en commentaire, mais elle ne fonctionne malheuresement pas.

    Voici 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
     
    <?php
    include ('./connect/connexion.php');
     
    $num = $_GET['num']; 
     
    	// Requete de selection
    	$connexion = mysql_connect($serveur,$user,$pass);
    	mysql_select_db($base, $connexion);				
    	$retour = mysql_query("SELECT * FROM TYPE WHERE num_type = '$num'", $connexion);
    	$fetch = mysql_fetch_array($retour);
     
    	// Suppression
    	$requete = "DELETE FROM TYPE WHERE num_type = '".$num."'";
     
     /* $select = mysql_query("SELECT COUNT(num_mat) FROM MATERIEL, TYPE WHERE TYPE.num_type = MATERIEL.num_type AND MATERIEL.num_type = $num",$connexion);
    	
    	
    	if ($select > 0)
    		{
    			mysql_query("DELETE FROM MATERIEL WHERE MATERIEL.num_type = TYPE.num_type AND MATERIEL.num_type = '".$num."'", $connexion);
    		}
      	*/
     
    	if($result = mysql_query($requete, $connexion))
    		{
    			header("Location: modif_type.php");
    		}
     
    ?>
    PS : $num = numero de type choisit sur la page precedente.

    Merci beaucoup par avance,

    Cordialement,

    Emmanuel.

  2. #2
    Membre émérite Avatar de obito
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 773
    Par défaut
    Dans $Retour ta requete n'est peut être pas bonne vu que tu met '$Num' et tu oublie de concatener avec le "." Enfin sinon je pense que la requete considerera que $Num est une chaine pas une variable^^

    Enfin c'est peut être pas ça...

  3. #3
    Membre confirmé Avatar de mjs21
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 85
    Par défaut
    Citation Envoyé par obito Voir le message
    Dans $Retour ta requete n'est peut être pas bonne vu que tu met '$Num' et tu oublie de concatener avec le "." Enfin sinon je pense que la requete considerera que $Num est une chaine pas une variable^^

    Enfin c'est peut être pas ça...
    Non cette requete fonctionne, c'est celle en commentaire qui ne fonctionne pas

  4. #4
    Membre émérite Avatar de obito
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 773
    Par défaut
    Lol^^ Donc voilà ce que je ferais:

    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
     $select = mysql_query("SELECT COUNT(num_mat) as NumM 
    FROM MATERIEL, TYPE 
    WHERE TYPE.num_type = MATERIEL.num_type AND MATERIEL.num_type = $num",$connexion);
     
     
     
    $JeuEnreg= mysql_fetch_assoc($select);
     
     
    	if ($JeuEnreg['NumM'] > 0)
    		{
                            //Besoin de la jointure?...
     
    			mysql_query("DELETE FROM MATERIEL WHERE  MATERIEL.num_type = '".$num."'", $connexion);
    		}

  5. #5
    Membre confirmé Avatar de mjs21
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 85
    Par défaut
    arf, ça ne fonctionne pas

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2008
    Messages : 27
    Par défaut
    Ceci dit, a tu gérer tes relations dans ta base de données ? Si non fait le, et associe ta table type à ta table matériel. Ensuite ajoute la propriété ON DELETE CASCADE.

    La seul suppression d'un type enlévera tout les matériels ayant le numéro du type associé.

  7. #7
    Membre chevronné Avatar de SphynXz
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 439
    Par défaut
    Premièrement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $variable = "salut je m'apelle $prenom";
    =
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $variable = "salut je m'apelle ".$prenom;
    =
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $variable = "salut je m'apelle {$prenom}";
    Enfin, la solution la plus propre est celle proposée par Lest_we_forget. Cela dit, si ton projet est déjà bien avancé, il n'est peut-être pas judicieux de refaire ta base de données en conséquence. Elle n'est peut-être même pas en InnoDB

    lorsque tu dis ca ne fonctionne pas? soit plus précis. y a t-il une erreur? y a t-il une suppression mais pas la bonne?

    peut tu afficher les requêtes exécutés ? (echo "SELECT" ...)

Discussions similaires

  1. Comment appliquer une suppression en cascade ?
    Par beegees dans le forum Requêtes
    Réponses: 1
    Dernier message: 15/08/2011, 23h08
  2. Réponses: 1
    Dernier message: 22/06/2010, 17h01
  3. Réponses: 5
    Dernier message: 03/01/2010, 10h18
  4. Réponses: 5
    Dernier message: 18/01/2009, 12h32
  5. Réponses: 4
    Dernier message: 18/06/2007, 08h30

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