IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[SQL] Erreur de requête incompréhensible


Sujet :

PHP & Base de données

  1. #1
    Membre éprouvé Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Par défaut [SQL] Erreur de requête incompréhensible
    Je ne comprend pas bien ce qui se passe

    Voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM t_users_dossiers WHERE id_user='98' AND id_trt BETWEEN 1 AND 4
    Et j'ai l'erreur suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    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.

  3. #3
    Membre éprouvé Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Par défaut
    Oui pardon.

    Bon voici mon code maintenant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM t_users_dossiers WHERE id_user=98 AND id_trt BETWEEN 1 AND 4
    Et la ligne 40 est celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ($ligne = mysql_fetch_array($result))
    Je ne comprends toujours pas.

  4. #4
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    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.

  5. #5
    Membre éprouvé Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Par défaut
    J'ai mis comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  6. #6
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    C'est pas la bonne variable dans le "or die", mais bon ça change rien.
    Que donne un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo mysql_num_rows($result);
    après le mysql_query ? La même erreur "supplied argument is not blah blah blah" j'imagine ?

  7. #7
    Membre éprouvé Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Par défaut
    ça me donne le chiffre 7, exactement le nombre d'enregistrements du résutat que je dois avoir

  8. #8
    Membre éprouvé Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM t_users_dossiers WHERE id_user=98 AND id_trt BETWEEN 1 AND 4
    1er print_r :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  9. #9
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    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.

  10. #10
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    Quel est le type de id_user et id_trt ?

    Ce sont bien des int et non des varchar ?

  11. #11
    Membre éprouvé Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Par défaut
    Bonjour,

    id_user = int
    id_trt = tinyint

    Donc pas des VARCHAR

  12. #12
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    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. :')

  13. #13
    Membre éprouvé Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Par défaut
    Je m'en réjouis, mais ne suis pas rassuré pour autant.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  14. #14
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    Citation Envoyé par lodan
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?

  15. #15
    Membre éprouvé Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Par défaut
    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).

  16. #16
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    variable1 = tableau[1,2,3]
     
    pour chaque variable1 je fais :
       variable1 = variable2
    Donc du coup ta variable1 est erronée.

  17. #17
    Membre éprouvé Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Par défaut
    Bon d'accord, je fais comme tu le dis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    echo mysql_num_rows($result);
    juste après le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = mysql_query($req) or die($req ." - ". mysql_error());
    J'obtient le chiffre 7

    Donc serait-ce la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete = mysql_fetch_assoc($result);
    Qui ferait des siennes ?

  18. #18
    Membre émérite
    Avatar de Dia_FR
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2006
    Messages : 512
    Par défaut
    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 ] [ Site pro ]

  19. #19
    Membre éprouvé Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Par défaut
    aussi ?

  20. #20
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    Bon... Il est temps d'aller lire le tuto dans ma signature.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [SQL] erreur sur requête insert
    Par temperature dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 09/01/2008, 15h27
  2. [SQL] Erreur de syntaxe incompréhensible
    Par Equinoxe5 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 26/10/2007, 15h30
  3. [SQL] Erreur de requête incompréhensible
    Par lodan dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 19/09/2006, 13h42
  4. [SQL] Erreur de requête mais dans rapport
    Par Anduriel dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 06/09/2006, 20h42
  5. [SQL] Erreur de requête
    Par Anduriel dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 21/06/2006, 11h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo