Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/10/2006, 22h44   #1
Membre extrêmement actif
 
Avatar de lodan
 
Inscription : juin 2006
Messages : 1 804
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 1 804
Points : 587
Points : 587
Par défaut [SQL] Erreur de requête incompréhensible

Je ne comprend pas bien ce qui se passe

Voici mon code
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$req = ("SELECT * FROM t_users_dossiers WHERE id_user='".$_POST["id_user1"]."' AND id_trt BETWEEN 1 AND 4"); 
			echo $req;
			if($result = mysql_query($req))
			{
				while($ligne = mysql_fetch_array($result)) 
				{
 
					$req = ("INSERT INTO ".$prefixe_table."`t_users_dossiers` (`id_gest_dossier` , `id_user` , `id_maj` , `gest_date_debut` , `gest_date_fin` , 
																			   `gest_points` , `gest_commentaire` , `id_trt`)  
							 VALUES ( \"\",'".$_POST["id_user2"]."' , '".$ligne["id_maj"]."' , '".$today."' ,\"\" , 
									 '".$ligne["gest_points"]."' , '".$ligne["gest_commentaire"]."' , 
									 '".$ligne["id_trt"]."')");
					$result = mysql_query("$req") or die ("2 - mise à jour impossible de cette Table accès incorrect");
				}
			}
Mon echo sur $req donne :

Code :
SELECT * FROM t_users_dossiers WHERE id_user='98' AND id_trt BETWEEN 1 AND 4
Et j'ai l'erreur suivante

Code :
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in
Je ne comprends pas mon erreur, la fatigue peut-être.

Merci d'avance
__________________
Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.
lodan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2006, 22h48   #2
Expert Confirmé
 
Avatar de Eusebius
 
Inscription : avril 2003
Messages : 3 286
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 3 286
Points : 3 155
Points : 3 155
Passe tes requêtes comme dans ma signature.
Comme ça tu pourras nous donner des messages d'erreurs efficaces quand tu auras des soucis, ou mieux, résoudre tes problèmes seul.
Eusebius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2006, 23h23   #3
Membre extrêmement actif
 
Avatar de lodan
 
Inscription : juin 2006
Messages : 1 804
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 1 804
Points : 587
Points : 587
Oui pardon.

Bon voici mon code maintenant :

Code :
1
2
3
4
5
6
7
8
9
10
$req = ("SELECT * 
					 FROM t_users_dossiers
					 WHERE id_user=$id_user 
					 AND id_trt 
					 BETWEEN 1 AND 4"); 
			echo $req;
			if($result = mysql_query($req) or die($requete ." - ". mysql_error()))
			{
				while ($ligne = mysql_fetch_array($result)) 
				{...
J'ai l'erreur suivante qui reste la même que tout à l'heure :

Code :
1
2
 
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\program files\easyphp1-8\www\gestelle\admin\onglet_users_22_transfert_dossiers.php on line 40
Mon echo est :

Code :
SELECT * FROM t_users_dossiers WHERE id_user=98 AND id_trt BETWEEN 1 AND 4
Et la ligne 40 est celle-ci :

Code :
while ($ligne = mysql_fetch_array($result))
Je ne comprends toujours pas.
__________________
Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.
lodan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2006, 23h33   #4
Expert Confirmé
 
Avatar de Eusebius
 
Inscription : avril 2003
Messages : 3 286
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 3 286
Points : 3 155
Points : 3 155
pourquoi tu mets des parenthèses en définissant $req ?
De plus je serais toi j'enlèverais le if, ou alors je ferais plutôt un à la ligne d'après.
Eusebius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2006, 23h46   #5
Membre extrêmement actif
 
Avatar de lodan
 
Inscription : juin 2006
Messages : 1 804
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 1 804
Points : 587
Points : 587
J'ai mis comme ceci :

Code :
1
2
3
4
5
6
7
8
$req = "SELECT * 
					 FROM t_users_dossiers
					 WHERE id_user=$id_user 
					 AND id_trt 
					 BETWEEN 1 AND 4"; 
			echo $req;
			$result = mysql_query($req) or die($requete ." - ". mysql_error());
				while ($ligne = mysql_fetch_array($result))
Et j'ai toujours :

Code :
1
2
SELECT * FROM t_users_dossiers WHERE id_user=98 AND id_trt BETWEEN 1 AND 4
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in
Cela ne change rien.
__________________
Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.
lodan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2006, 23h50   #6
Expert Confirmé
 
Avatar de Eusebius
 
Inscription : avril 2003
Messages : 3 286
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 3 286
Points : 3 155
Points : 3 155
C'est pas la bonne variable dans le "or die", mais bon ça change rien.
Que donne un
Code :
echo mysql_num_rows($result);
après le mysql_query ? La même erreur "supplied argument is not blah blah blah" j'imagine ?
Eusebius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2006, 23h52   #7
Membre extrêmement actif
 
Avatar de lodan
 
Inscription : juin 2006
Messages : 1 804
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 1 804
Points : 587
Points : 587
ça me donne le chiffre 7, exactement le nombre d'enregistrements du résutat que je dois avoir
__________________
Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.
lodan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2006, 07h31   #8
Membre extrêmement actif
 
Avatar de lodan
 
Inscription : juin 2006
Messages : 1 804
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 1 804
Points : 587
Points : 587
J'ai beau touner dans tous les sens, relire la doc mysql, c'est un casse tête ce truc, j'avoue ne rien voir d'anormal

La requête récupéré dans l'echo me donne 7 enregistrements, le print_r du résultat ne m'en donne que 1

Mon traitement est :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$req = "SELECT * 
 FROM t_users_dossiers
WHERE id_user=$id_user 
AND id_trt 
BETWEEN 1 AND 4";
echo $req; 
$result = mysql_query($req) or die($req ." - ". mysql_error());
$requete = mysql_fetch_assoc($result);
echo "<p>";
print_r($requete);
foreach($requete as $ligne)
	{
		echo "<p>";
		print_r($ligne);
	}
echo et print_r affiche ceci :

echo :
Code :
SELECT * FROM t_users_dossiers WHERE id_user=98 AND id_trt BETWEEN 1 AND 4
1er print_r :
Code :
Array ( [id_gest_dossier] => 8 [id_user] => 98 [id_maj] => 1 [gest_date_debut] => 2006-10-02 [gest_date_fin] => 0000-00-00 [gest_points] => 0 [gest_commentaire] => [id_trt] => 1 )
2ème print_r dans la boucle :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
8
 
98
 
1
 
2006-10-02
 
0000-00-00
 
0
 
1
ce qui est normal dans ce cas de figure.

Lorsque je prends la requête et que je la met dans phpmyadmin, j'ai 7 enregistrements.

Je deviens dingue avec ce truc.
__________________
Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.
lodan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2006, 09h07   #9
Expert Confirmé
 
Avatar de Eusebius
 
Inscription : avril 2003
Messages : 3 286
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 3 286
Points : 3 155
Points : 3 155
Citation:
Envoyé par lodan
La requête récupéré dans l'echo me donne 7 enregistrements, le print_r du résultat ne m'en donne que 1
C'est normal, mysql_fetch_xxx ne retourne que le premier enregistrement, c'est son job, et c'est pour ça qu'on le met dans une boucle while.
Eusebius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2006, 09h18   #10
Modérateur
 
Avatar de Bisûnûrs
 
Josselin
Développeur Web
Inscription : janvier 2004
Messages : 9 050
Détails du profil
Informations personnelles :
Nom : Josselin
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : janvier 2004
Messages : 9 050
Points : 12 181
Points : 12 181
Quel est le type de id_user et id_trt ?

Ce sont bien des int et non des varchar ?
Bisûnûrs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2006, 09h26   #11
Membre extrêmement actif
 
Avatar de lodan
 
Inscription : juin 2006
Messages : 1 804
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 1 804
Points : 587
Points : 587
Bonjour,

id_user = int
id_trt = tinyint

Donc pas des VARCHAR
__________________
Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.
lodan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2006, 09h46   #12
Modérateur
 
Avatar de Bisûnûrs
 
Josselin
Développeur Web
Inscription : janvier 2004
Messages : 9 050
Détails du profil
Informations personnelles :
Nom : Josselin
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : janvier 2004
Messages : 9 050
Points : 12 181
Points : 12 181
Ben écoute je viens de faire un test de mon côté et je n'ai aucun problème.

Ton erreur ne doit pas venir de cette requête. :')
Bisûnûrs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2006, 09h53   #13
Membre extrêmement actif
 
Avatar de lodan
 
Inscription : juin 2006
Messages : 1 804
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 1 804
Points : 587
Points : 587
Je m'en réjouis, mais ne suis pas rassuré pour autant.

Voici le code :

Code :
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
if($echec=="") 
   	{
   		$today=date("Y-m-d");
 
		if($bouton=='Global')
		{
			$id_user=$_POST["id_user1"];
			$req = "SELECT * 
					 FROM t_users_dossiers
					 WHERE id_user=$id_user 
					 AND id_trt 
					 BETWEEN 1 AND 4";
					 echo $req; 
			$result = mysql_query($req) or die($req ." - ". mysql_error());
			$requete = mysql_fetch_assoc($result);
				foreach($requete as $ligne)
				{
				$req = ("INSERT INTO ".$prefixe_table."`t_users_dossiers` (`id_gest_dossier` , `id_user` , `id_maj` , `gest_date_debut` , `gest_date_fin` , 
																			   `gest_points` , `gest_commentaire` , `id_trt`)  
						 VALUES ( \"\",'".$_POST["id_user2"]."' , '".$ligne["id_maj"]."' , '".$today."' ,\"\" , '".$ligne["gest_points"]."' , '".$ligne["gest_commentaire"]."' , 
									 '".$ligne["id_trt"]."')");
					$result = mysql_query("$req") or die ("2 - mise à jour impossible de cette Table accès incorrect");
				}
		}
		else
		{	
			foreach($_POST["id_gest_dossier2"] as $dossier)
			{
				$req=("SELECT * FROM t_users_dossiers WHERE id_maj='".$dossier."' AND id_user='".$_POST["id_user1"]."'");
				$result = mysql_query("$req") or die ("3 - mise à jour impossible de cette Table accès incorrect");
				$requete = mysql_fetch_assoc($result);
 
				$req = ("INSERT INTO ".$prefixe_table."`t_users_dossiers` (`id_gest_dossier` , `id_user` , `id_maj` , `gest_date_debut` , `gest_date_fin` , 
																		   `gest_points` , `gest_commentaire` , `id_trt`)  
						 VALUES ( \"\",'".$_POST["id_user2"]."' , '".$requete["id_maj"]."' , '".$today."' ,\"\" , 
								 '".$requete["gest_points"]."' , '".$requete["gest_commentaire"]."' , 
								 '".$requete["id_trt"]."')");
				$result = mysql_query("$req") or die ("4 - mise à jour impossible de cette Table accès incorrect");
			}
		}					
 
		$db->disconnect();
 
		header("location: $retour");
		exit();
 
        }
        else 
		{ 
        	$messages="Echec - Corrigez votre saisie :\\n".$echec;
		}
Le piège est où, lorsque je ne suis pas "global" cela fonctionne très bien.
__________________
Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.
lodan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2006, 09h57   #14
Modérateur
 
Avatar de Bisûnûrs
 
Josselin
Développeur Web
Inscription : janvier 2004
Messages : 9 050
Détails du profil
Informations personnelles :
Nom : Josselin
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : janvier 2004
Messages : 9 050
Points : 12 181
Points : 12 181
Citation:
Envoyé par lodan
Code :
1
2
3
4
5
foreach($requete as $ligne){
   $req = ("INSERT INTO ".$prefixe_table."`t_users_dossiers` (`id_gest_dossier` , `id_user` , `id_maj` , `gest_date_debut` , `gest_date_fin` , `gest_points` , `gest_commentaire` , `id_trt`)  
       VALUES ( \"\",'".$_POST["id_user2"]."' , '".$ligne["id_maj"]."' , '".$today."' ,\"\" , '".$ligne["gest_points"]."' , '".$ligne["gest_commentaire"]."' , '".$ligne["id_trt"]."')");
   $result = mysql_query("$req") or die ("2 - mise à jour impossible de cette Table accès incorrect");
}
Rien ne te choque ?
Bisûnûrs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2006, 10h05   #15
Membre extrêmement actif
 
Avatar de lodan
 
Inscription : juin 2006
Messages : 1 804
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 1 804
Points : 587
Points : 587
Oui, j'ai retiré les ", mais le problème est ailleur, puisque cela ne change rien à l'anomalie.

C'est à la lecture précédente que j'ai un problème non ?

Où allors je n'ai rien compris à ce que tu m'as dit (ce qui entre nous est tout a fait possible).
__________________
Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.
lodan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2006, 10h12   #16
Modérateur
 
Avatar de Bisûnûrs
 
Josselin
Développeur Web
Inscription : janvier 2004
Messages : 9 050
Détails du profil
Informations personnelles :
Nom : Josselin
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : janvier 2004
Messages : 9 050
Points : 12 181
Points : 12 181
Tu utilises dans ta boucle les mêmes variables $req et $result que celles de ta requête qui ont servi à faire la boucle.

Renomme-les.

Par exemple tu dis que :
Code :
1
2
3
4
variable1 = tableau[1,2,3]
 
pour chaque variable1 je fais :
   variable1 = variable2
Donc du coup ta variable1 est erronée.
Bisûnûrs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2006, 11h02   #17
Membre extrêmement actif
 
Avatar de lodan
 
Inscription : juin 2006
Messages : 1 804
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 1 804
Points : 587
Points : 587
Bon d'accord, je fais comme tu le dis

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
$id_user=$_POST["id_user1"];
$req = "SELECT * 
FROM t_users_dossiers
WHERE id_user=$id_user 
AND id_trt 
BETWEEN 1 AND 4"; 
$result = mysql_query($req) or die($req ." - ". mysql_error());
$requete = mysql_fetch_assoc($result);
foreach($requete as $ligne)
{
$sql = ("INSERT INTO ".$prefixe_table."`t_users_dossiers` (`id_gest_dossier` , `id_user` , `id_maj` , `gest_date_debut` , `gest_date_fin` ,`gest_points` , `gest_commentaire` , `id_trt`)  
VALUES ( \"\",'".$_POST["id_user2"]."' , '".$ligne["id_maj"]."' , '".$today."' ,\"\" , '".$ligne["gest_points"]."' , '".$ligne["gest_commentaire"]."' , '".$ligne["id_trt"]."')");
mysql_query($sql) or die ("2 - mise à jour impossible de cette Table accès incorrect");
}
Je reste avec le problème que ma 1ère requete qui donne comme résultat" $requete" ne me donne q'un enregistrement alors qu'il y en a 7 dans la base.
Avec un "echo $req;" j'obtient :

Code :
SELECT * FROM t_users_dossiers WHERE id_user=98 AND id_trt BETWEEN 1 AND 4
Je prends cette requete que je met dans phpmyadmin et j'ai 7 enregistrements.

Effectivement comme je n'ai qu'un seul enregistrement et que je fais

Code :
foreach($requete as $ligne)
$ligne["xxx"] correspond à chaque champ de ma ligne ce qui me génère ensuite des problèmes de mise à jour de ma base.

Enplaçant un
Code :
echo mysql_num_rows($result);
juste après le
Code :
$result = mysql_query($req) or die($req ." - ". mysql_error());
J'obtient le chiffre 7

Donc serait-ce la ligne

Code :
$requete = mysql_fetch_assoc($result);
Qui ferait des siennes ?
__________________
Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.
lodan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2006, 11h09   #18
Membre chevronné
 
Avatar de Dia_FR
 
Homme Aurélien
Développeur Web
Inscription : avril 2006
Messages : 510
Détails du profil
Informations personnelles :
Nom : Homme Aurélien
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2006
Messages : 510
Points : 643
Points : 643
Citation:
Envoyé par Eusebius
C'est normal, mysql_fetch_xxx ne retourne que le premier enregistrement, c'est son job, et c'est pour ça qu'on le met dans une boucle while.
+1

le mysql_query te retourne 7 résultats
le mysql_fetch_assoc te retourne le premier
le foreach ne traite donc que un seul résultat
__________________
Dia [ Page DVP ] [ Blog ] [ Site pro ]
Dia_FR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2006, 11h17   #19
Membre extrêmement actif
 
Avatar de lodan
 
Inscription : juin 2006
Messages : 1 804
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 1 804
Points : 587
Points : 587
aussi ?
__________________
Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.
lodan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2006, 11h20   #20
Expert Confirmé
 
Avatar de Eusebius
 
Inscription : avril 2003
Messages : 3 286
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 3 286
Points : 3 155
Points : 3 155
Bon... Il est temps d'aller lire le tuto dans ma signature.
Eusebius est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h56.


 
 
 
 
Partenaires

Hébergement Web