suppression dans plusieurs tables

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : suppression dans plusieurs tables

par béka » 12 juin 2006, 09:21

apparement, personne ne peut m'aider

par béka » 09 juin 2006, 15:53

en fait, pour mon probleme, le requetes ne sont pas exécutées. car les echo() que je mets juste après n'apparaissent pas.

par béka » 09 juin 2006, 13:38

j'ai changé l'ordre de mes requetes, de cette maniere:
//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 
$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);

$query2 = "DELETE FROM entreprise WHERE entreprise.id='$id'"; 
$resultat2 = mysql_query($query2);

}//fin if
Mais cela ne supprime toujours rien. Les noms des entreprises sont bien les mêmes.
Comment faire apparaitre la table entreprise dans le FROM ? si je fais ca :
$query3 = "DELETE FROM offre_stage, offre_emploi, entreprise WHERE entreprise.nom_entreprise=offre_stage.nom_entreprise AND entreprise.nom_entreprise=offre_emploi.nom_entreprise AND entreprise.id='$id'";
$resultat3 = mysql_query($query3);
ca ne marche toujours pas

par sadeq » 09 juin 2006, 12:36

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.
......
$query3 = "DELETE FROM offre_stage WHERE entreprise.nom_entreprise=offre_stage.nom_entreprise 
AND entreprise.id='$id'"; 
......

$query4 = "DELETE FROM offre_emploi WHERE entreprise.nom_entreprise=offre_emploi.nom_entreprise 
AND entreprise.id='$id'";
....
Tes requêtes Delete sont fausses, elles se référent à la table entreprise qui n'est pas citée dans le FROM

A mon avis, il faut prendre en considération ce qui est dit par guilt92 et confirmé par Ryle mais aussi de vérifier si les noms de l'entreprise sont écrits de la même façon dans les différentes tables.

par Ryle » 09 juin 2006, 12:09

En effet, comme le dit guilt92, la logique voudrait que tu supprimes en premier les enregistrements fils, et ensuite les enregisrements peres. L'idéal est de contrôler que la suppression des fils c'est bien passé avant de supprimer leur pôpa chéri. Comme ça s'il y a eu un problème de suppression, tu as toujours le père pour les retrouver et ça t'évite d'avoir des enregistrement sans référence qui se balladent dans ta base :)

A quand l'intégrité sur mysql ?! :(

par guilt92 » 09 juin 2006, 12:01

je crois que je viens de comprendre !!!

Ne faudrait il pas supprimer l entreprise de la base APRES y faire référence dans les autres requetes ????

Tu supprimes l entreprise et tu la cherches apres c est surement la l erreur... Si tu mets la requete $query2 à la fin cela marche mieux non ?

par béka » 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

par guilt92 » 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 ?

par zeus » 09 juin 2006, 11:37

modération : suite à la demande de békà, le sujet est déplacé ;)

par béka » 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);

par béka » 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

par Invité » 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

par charabia » 08 juin 2006, 16:30

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

par sadeq » 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]

par béka » 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