Page 1 sur 2

suppression dans plusieurs tables

Posté : 08 juin 2006, 15:42
par béka
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]

Posté : 08 juin 2006, 16:12
par charabia
$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 ?

Posté : 08 juin 2006, 16:16
par béka
ici
$nom_entreprise= (row['entreprise.nom_entreprise']);
donc c'est bien un champ
non?

Posté : 08 juin 2006, 16:20
par charabia
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'

Posté : 08 juin 2006, 16:22
par béka
donc je devrais mettre

Code : Tout sélectionner

entreprise.nom_entreprise
au lieu de
$nom_entreprise
?

Posté : 08 juin 2006, 16:26
par charabia
Montres nous la structure de ta table.

Posté : 08 juin 2006, 16:27
par béka
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

Posté : 08 juin 2006, 16:27
par sadeq
$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]

Posté : 08 juin 2006, 16:30
par charabia
:arrow: oki je sors lol désolé béka :roll:

Posté : 08 juin 2006, 16:59
par Invité
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

Posté : 08 juin 2006, 17:01
par béka
c'est moi qui vient de post le comment précédent, j'ai changé de navigateur et oublié de me reconnect dsl

Posté : 09 juin 2006, 09:54
par béka
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);

Posté : 09 juin 2006, 11:37
par zeus
modération : suite à la demande de békà, le sujet est déplacé ;)

Posté : 09 juin 2006, 11:41
par guilt92
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 ?

Posté : 09 juin 2006, 11:56
par béka
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