suppression dans plusieurs tables

Mammouth du PHP | 536 Messages

08 juin 2006, 15:42

Bonjour tout le monde, j'aimerais faire une page php qui supprime une entreprise de la BDD mais qui supprime égalemnt les offres d'emploi que cette entreprise a déposé.
Voici mes requètes :

Code : Tout sélectionner

$query2 = "SELECT * FROM entreprise, offre_stage, offre_emploi"; $resulta = mysql_query($query2); $nom_entreprise = ($row['entreprise.nom_entreprise']); $id = $_POST['id']; $query = "DELETE FROM entreprise WHERE id='$id'"; $result = mysql_query($query); $query3 = "DELETE FROM offre_emploi WHERE '$nom_entreprise'=offre_emploi.nom_entreprise"; $result3 = mysql_query(query3); $query4 = "DELETE FROM offre_stage WHERE '$nom_entreprise'=offre_stage.nom_entreprise"; $result4 = mysql_query(query4);
Dans chaque table, il y la champ nom_entreprise. Seulement voila, il n'y a que dans la table entreprise que la suppression a lieu et pas dans les autre. Pourquoi? je ne vois pas mon erreur..[/quote]
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Avatar du membre
ViPHP
ViPHP | 3008 Messages

08 juin 2006, 16:12

$query3 = "DELETE FROM offre_emploi WHERE '$nom_entreprise'=offre_emploi.nom_entreprise"; 
$result3 = mysql_query(query3); 
$query4 = "DELETE FROM offre_stage WHERE '$nom_entreprise'=offre_stage.nom_entreprise"; 
$result4 = mysql_query(query4);
Après le WHERE, il s'agit du champ de ta table. Alors pourquoi tu mets un WHERE '$nom_entreprise....etc ?

Mammouth du PHP | 536 Messages

08 juin 2006, 16:16

ici
$nom_entreprise= (row['entreprise.nom_entreprise']);
donc c'est bien un champ
non?
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Avatar du membre
ViPHP
ViPHP | 3008 Messages

08 juin 2006, 16:20

Heu...non pas vraiment.

Le champ correspond au nom que tu as donné quand tu as créée ta table.

Par exemple "ID" est un champ. Regardes la structure que tu as fait.

Par exemple, pour le nom je pense que c'est nom_entreprise. Donc ça sera WHERE nom_entreprise='blabla'

Mammouth du PHP | 536 Messages

08 juin 2006, 16:22

donc je devrais mettre

Code : Tout sélectionner

entreprise.nom_entreprise
au lieu de
$nom_entreprise
?
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Avatar du membre
ViPHP
ViPHP | 3008 Messages

08 juin 2006, 16:26

Montres nous la structure de ta table.

Mammouth du PHP | 536 Messages

08 juin 2006, 16:27

c'est mieux comme ca?

Code : Tout sélectionner

$query2 = "SELECT * FROM entreprise, offre_stage, offre_emploi"; $resulta = mysql_query($query2); $nom_entreprise = ($row['entreprise.nom_entreprise']); $id = $_POST['id']; $query = "DELETE FROM entreprise WHERE id='$id'"; $result = mysql_query($query); $query3 = "DELETE FROM offre_emploi WHERE entreprise.nom_entreprise=offre_emploi.nom_entreprise AND entreprise.id='$id'"; $result3 = mysql_query(query3); $query4 = "DELETE FROM offre_stage WHERE entreprise_nom_entreprise=offre_stage.nom_entreprise AND entreprise.id='$id'"; $result4 = mysql_query(query4); mysql_close($db);
j'ai plusieurs tables : entreprise, offre_stage et offre_emploi
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

08 juin 2006, 16:27

$query3 = "DELETE FROM offre_emploi WHERE '$nom_entreprise'=offre_emploi.nom_entreprise"; 
$result3 = mysql_query(query3); 
$query4 = "DELETE FROM offre_stage WHERE '$nom_entreprise'=offre_stage.nom_entreprise"; 
$result4 = mysql_query(query4);
Après le WHERE, il s'agit du champ de ta table. Alors pourquoi tu mets un WHERE '$nom_entreprise....etc ?
C'est correct, il compare une valeur de type texte avec un champ : l'égalité est dijective.

Par contre l'erreur existe bel et bien avant : au moment de la récupèration du nom d'une entreprise après l'exécution de la requête SELECT.

Ton algo à ce niveau n'est pas dans l'ordre
Proposition :
//1. récupèrer l'id pour retrouver le nom de l'entreprise
$id = $_POST['id'];

//2. lancer le select pour trouver le nom par l'id
$query2 = "SELECT * FROM entreprise WHERE id='$id'"; 
$resultat = mysql_query($query2); 

//3. si l'entreprise est touvée, lancer les delete
if ($resultat && $row = mysql_fetch_array($resultat) ) {
     //une entreprise trouvé, récupèrer son nom
    $nom_entreprise = $row['nom_entreprise']; 
    
    //effectuer les delete en utilisant $id et $nom_entreprise comme index
    $query = "DELETE FROM entreprise WHERE id='$id'"; 
    $result = mysql_query($query); 
    
     $query3 = "DELETE FROM offre_emploi WHERE    '$nom_entreprise'=offre_emploi.nom_entreprise"; 
    $result3 = mysql_query(query3); 
    
    $query4 = "DELETE FROM offre_stage WHERE '$nom_entreprise'=offre_stage.nom_entreprise"; 
   $result4 = mysql_query(query4);
}//fin if
Ou bien, exécuter une seule requête delete sur toutes les tables en respectant leurs liaisons :

Code : Tout sélectionner

DELETE FROM entreprise, offre_emploi, offre_stage WHERE entreprise.nom_entreprise=offre_emploi.nom_entreprise AND entreprise.nom_entreprise=offre_stage.nom_entreprise AND entreprise.id='$id'
Le programme sera simplifié :
//1. récupèrer l'id pour retrouver le nom de l'entreprise
$id = $_POST['id'];

//2. lancer le delete pour supprimer tout : entreprise et offres par l'id
$query2 = "DELETE FROM entreprise, offre_emploi, offre_stage 
WHERE entreprise.nom_entreprise=offre_emploi.nom_entreprise 
AND  entreprise.nom_entreprise=offre_stage.nom_entreprise
AND entreprise.id='$id'"; 

$resultat = mysql_query($query2); 
[/php]
Modifié en dernier par sadeq le 08 juin 2006, 16:39, modifié 3 fois.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Avatar du membre
ViPHP
ViPHP | 3008 Messages

08 juin 2006, 16:30

:arrow: oki je sors lol désolé béka :roll:

Invité
Invité n'ayant pas de compte PHPfrance

08 juin 2006, 16:59

j'ai essayé ta premiere solution sadeq et cela supprime que dans la table entreprise et pas dans les table offre_stage et offre_emploi

Mammouth du PHP | 536 Messages

08 juin 2006, 17:01

c'est moi qui vient de post le comment précédent, j'ai changé de navigateur et oublié de me reconnect dsl
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Mammouth du PHP | 536 Messages

09 juin 2006, 09:54

Voila comment j'ai fait, mais là ça ne supprime rien.
Pourquoi, je ne vois pas où est l'erreur. Depuis hier je potasse dessus, et je comprends pas où peut être mon erreur.
//1. récupèrer l'id pour retrouver le nom de l'entreprise 
$id = $_POST['id']; 

//2. lancer le select pour trouver le nom par l'id 
$query = "SELECT * FROM entreprise, offre_emploi, offre_stage WHERE entreprise.id='$id' AND entreprise.nom_entreprise=offre_emploi.nom_entreprise 
AND  entreprise.nom_entreprise=offre_stage.nom_entreprise"; 
$resultat = mysql_query($query); 

//3. si l'entreprise est touvée, lancer les delete 
if ($resultat && $row = mysql_fetch_array($resultat) ) { 
     //une entreprise trouvé, récupèrer son nom 
    $nom_entreprise = $row['nom_entreprise']; 
     
    //effectuer les delete en utilisant $id et $nom_entreprise comme index 
$query2 = "DELETE FROM entreprise WHERE entreprise.id='$id'"; 
$resultat2 = mysql_query($query2);

$query3 = "DELETE FROM offre_stage WHERE entreprise.nom_entreprise=offre_stage.nom_entreprise 
AND entreprise.id='$id'";
$resultat3 = mysql_query($query3);

$query4 = "DELETE FROM offre_emploi WHERE entreprise.nom_entreprise=offre_emploi.nom_entreprise 
AND entreprise.id='$id'";
$resultat4 = mysql_query($query4);

}//fin if 
	
	
	
mysql_close($db);
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

09 juin 2006, 11:37

modération : suite à la demande de békà, le sujet est déplacé ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 1353 Messages

09 juin 2006, 11:41

Est ce que dans ta table id est une chaine de caractère ?
Car sinon il faudrai enlever les ''
$query2 = "DELETE FROM entreprise WHERE entreprise.id=".$id; 
par exemple.

Aussi as tu vérifié la valeur de $id à part ? Est elle correcte ?

Mammouth du PHP | 536 Messages

09 juin 2006, 11:56

la valeur de id est correct, car si on ne souhaite que supprimer dans la table entreprise et donc qu'on met le reste en commentaire, ca marche.
Sinon, id est un entier qui s'incrémente automatiquement
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!