Problème de script pour suppression de données

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 : Problème de script pour suppression de données

par BFH » 03 juin 2005, 14:26

merci beaucoup sadeq j'avais vraiment pas les yeux en face des trous ! :shock:

par sadeq » 03 juin 2005, 12:46

Dans ce cas tu fais une boucle pour supprimer tous les ID_R trouvés dans report :

Correction à partir de la requête $temp :
....
//Extraire tous les ID_R dans report de même RHost
$temp="SELECT DISTINCT ID_R FROM report WHERE RHost LIKE '".addslashes($RHost)."%'"; 
$result2= mysql_query($temp)or die(mysql_error()); 
while ($row2= mysql_fetch_assoc($result2)) {
     
    $ID_R=$row2['ID_R']; 
     
    $query3="DELETE FROM item WHERE ReportID ='".$ID_R."' ";
    mysql_query($query3)or die(mysql_error()); 
}
//Supprimer finalement les reports
$query="DELETE FROM report WHERE RHost LIKE '".addslashes($RHost)."%'"; 
mysql_query($query)or die(mysql_error()); 

//Et le lieux d'interventions
$query4="DELETE FROM lieu_intervention WHERE ID_LI='".$Li."' "; 
mysql_query($query4)or die(mysql_error()); 
   
La requête $temp utilise DISTINCT et te permet de générer tous les ID_R distincts qui ont le même RHost dans report. Pour économiser les raffale de delete dans la boucle while.

par BFH » 03 juin 2005, 11:54

J'ai encore un petit problème mais là je doit etre trop fatigué pour voir comment le resoudre. voila mon code :
$Lieu="SELECT lieu FROM lieu_intervention WHERE ID_LI='".$Li."' "; 
$result1= mysql_query($Lieu)or die(mysql_error());
$row1= mysql_fetch_assoc($result1);
		
$RHost=$row1['lieu'];
	
$temp="SELECT ID_R FROM report WHERE RHost LIKE '".addslashes($row1['lieu'])."%'"; 
$result2= mysql_query($temp)or die(mysql_error());
$row2= mysql_fetch_assoc($result2);
	
$ID_R=$row2['ID_R'];
	
$query="DELETE FROM report WHERE RHost LIKE '".addslashes($RHost)."%'"; 
mysql_query($query)or die(mysql_error());
	
$query3="DELETE FROM item WHERE ReportID ='".$ID_R."' "; // ici est mon problème
mysql_query($query3)or die(mysql_error());

$query4="DELETE FROM lieu_intervention WHERE ID_LI='".$Li."' "; 
mysql_query($query4)or die(mysql_error());
Avec $query3 je supprime qu'une catégorie d'item car je retourne qu'une seule valeur de $ID_R même si j'ai plusieurs valeurs a retourner! (tout le monde comprend ce que je veux dire?)

Et je vois pas comment faire! :oops:

par sadeq » 03 juin 2005, 11:17

à la ligne 20, t'as oublié un ;
Ajoute aussi un addslashes pour neutraliser les caractères spéciaix dans ta chaine $RHost ou autres.
Correction:
$RHost=$row['lieu'];
     
$query="DELETE FROM report WHERE RHost LIKE '%".addslashes($RHost)."%'";

par Cyrano » 03 juin 2005, 11:15

manque un ";" juste avant :
$RHost=$row['lieu'];

par BFH » 03 juin 2005, 11:09

Merci beaucoup sadeq, j'ai repris ton code presque trait pour trait :
 $Lieu="SELECT lieu FROM lieu_intervention WHERE ID_LI='".$Li."' ";//choisit le nom du lieu a supprimer
$result1= mysql_query($Lieu)or die(mysql_error());
$row1= mysql_fetch_assoc($res);
	
$RHost=$row['lieu']
	
$query="DELETE FROM report WHERE RHost LIKE '".$RHost."'";//ici ça bug
mysql_query($query)or die(mysql_error());

$temp="SELECT ID_R FROM report WHERE RHost LIKE '".$RHost."'"; //choisit tous les rapports dont le nom est similaire
$result2= mysql_query($temp)or die(mysql_error());
$row2= mysql_fetch_array($result2);
	
$ID_R=$row['ID_R'];
	
$query3="DELETE FROM item WHERE ReportID ='".$ID_R."' ";//supprime toutes les infos liées aux rapports
mysql_query($query3)or die(mysql_error());

$query4="DELETE FROM lieu_intervention WHERE ID_LI='".$Li."' ";//supprime le lieu
mysql_query($query4)or die(mysql_error());
maintenant j'ai l'erreur:

Code : Tout sélectionner

Parse error: parse error in c:\program files\easyphp1-8\www\php\administration3.php on line 20
si je mets
$query="DELETE FROM report WHERE RHost LIKE '".$RHost."%'";
cela ne fonctionne pas non plus!
note: Si mon lieu s'appelle TEST les rapports qui correspondent s'appellent TEST, TEST_accueil, TEST_exemple

par sadeq » 03 juin 2005, 10:55

Mes seigneurs c'est le matin que je suis bien réveillé. En fait BFH a l'habitude de laisser l'exécution de ses requête à la fin. Et c'est cette habitude qui a trahi maintenant.

par zeus » 03 juin 2005, 10:44

Carrément !!!!

J'ai zappé les conditions quand j'ai vu les apostrophes et j'ai pas cherché à voir plus loin :agenouille: bien joué sadeq

par Cyrano » 03 juin 2005, 10:14

Arf, je suis pas réveillé moi, effectivement sadeq a complètement raison :oops:

par sadeq » 03 juin 2005, 10:06

L'erreur est logique dans la troisième requête qui est supposée récupérer le lieu à partir de la première.

Quand tu écris :
$Lieu="SELECT lieu FROM lieu_intervention WHERE ID_LI='".$Li."' ";//choisit le nom du lieu a supprimer 
 
tu veux récupérer le lieu que tu utilise dans la 3° requête :
$temp="SELECT ID_R FROM report WHERE RHost LIKE '".$Lieu."'";//devrait choisir tous les rapports dont ....
Mais puisque tu n'as pas exécuter la 1° avant de lancer la 3° requête, la clause WHERE de cette dernière se trouve concaténée avec le contenu de $Lieu qui est la 1° requête (ce qui donne en réalité une 3° requête écrite comme suit :
$temp="SELECT ID_R FROM report WHERE RHost LIKE 'SELECT lieu FROM lieu_intervention WHERE ID_LI='206'' et c'est ton erreur.

Même remarque pour la requête basée sur le paramètre $temp.

La Correction: Il faut exécuter les requêtes chainées.
$Lieu="SELECT lieu FROM lieu_intervention WHERE ID_LI='".$Li."' ";//choisit le nom du lieu a supprimer 
$res = mysql_query($Lieu)or die(mysql_error()); 
$Lieu = mysql_fetch_array($res);

$query2="DELETE FROM report WHERE RHost LIKE '".$Lieu[0]."'";//devrait supprimer tout les rapports choisit 
mysql_query($query2)or die(mysql_error()); 

$temp="SELECT ID_R FROM report WHERE RHost LIKE '".$Lieu[0]."'"; //devrait choisir tous les rapports dont le nom est similaire 
$res = mysql_query($temp)or die(mysql_error()); 
$temp= mysql_fetch_array($res);

$query3="DELETE FROM item WHERE ReportID ='".$temp[0]."' ";//devrait supprimer toutes les infos liées aux rapports 
mysql_query($query3)or die(mysql_error());

$query="DELETE FROM lieu_intervention WHERE ID_LI='".$Li."' ";//supprime le lieu 
mysql_query($query)or die(mysql_error()); 
 

par Cyrano » 03 juin 2005, 09:46

C'est parce que tu envoies un identifiant sous forme de chaine de caractère alors que le champ correspondant est de type numérique: enlève les apostrophes ou guillemets:
$Lieu="SELECT lieu FROM lieu_intervention WHERE ID_LI=".$Li;
En principe ça devrait marcher... :-k

par zeus » 03 juin 2005, 09:43

1) si tu met un =, il ne faut pas mettre de '

Code : Tout sélectionner

$Lieu="SELECT lieu FROM lieu_intervention WHERE ID_LI=".$Li." ";//choisit le nom du lieu a supprimer
2) Ca ne sert à rien de faire un SELECT avant de faire un DELETE, la sélection dont tu parle se fait par la clause WHERE de ton DELETE. Tu peut donc remplacer ton code par :
if(isset($_GET["ID_LI"]))
{
  $Li=$_GET["ID_LI"];
}

$query="DELETE FROM lieu_intervention WHERE ID_LI=".$Li." ";//supprime le lieu
$query2="DELETE FROM report WHERE RHost LIKE '".$Lieu."'";//devrait supprimer tout les rapports choisit
$query3="DELETE FROM item WHERE ReportID =".$temp." ";//devrait supprimer toutes les infos liées aux rapports
    
mysql_query($query)or die(mysql_error());
mysql_query($query2)or die(mysql_error());
mysql_query($query3)or die(mysql_error());  

Problème de script pour suppression de données

par BFH » 03 juin 2005, 09:38

voici mon code de suppression de données
if(isset($_GET["ID_LI"]))
{
$Li=$_GET["ID_LI"];
}
	
$Lieu="SELECT lieu FROM lieu_intervention WHERE ID_LI='".$Li."' ";//choisit le nom du lieu a supprimer
$query="DELETE FROM lieu_intervention WHERE ID_LI='".$Li."' ";//supprime le lieu
$temp="SELECT ID_R FROM report WHERE RHost LIKE '".$Lieu."'";//devrait choisir tous les rapports dont le nom est similaire
$query2="DELETE FROM report WHERE RHost LIKE '".$Lieu."'";//devrait supprimer tout les rapports choisit
$query3="DELETE FROM item WHERE ReportID ='".$temp."' ";//devrait supprimer toutes les infos liées aux rapports
	
mysql_query($Lieu)or die(mysql_error());
mysql_query($query)or die(mysql_error());
mysql_query($temp)or die(mysql_error());
mysql_query($query2)or die(mysql_error());
mysql_query($query3)or die(mysql_error());
Bien sûr ça ne fonctionne pas ! l'erreur retournée est :

Code : Tout sélectionner

Erreur de syntaxe près de 'SELECT lieu FROM lieu_intervention WHERE ID_LI="206" ''' à la ligne 1