prob requete avec variable $_SERVER['REMOTE_USER']

Eléphanteau du PHP | 25 Messages

11 sept. 2005, 15:34

salut à tous :wink:

donc voila je parviens a récupérer le log d'un htaccess grace a cette variable: $_SERVER['REMOTE_USER']

mais si je fais cette requette:

$requete = "SELECT id FROM droits WHERE log = \"".$_SERVER['REMOTE_USER']."\"";
$id_user = MYSQL_QUERY($requete);
echo "id:$id_user:fin";

(j'ai essayé aussi sans les \" en en ne mettant que ' )

en l'occurence l'echo affiche: Resource id #10

alors que l'id doit etre 19

si vous avez une ptite idée elle est super bienvenue 8)
thx

Mammouth du PHP | 19672 Messages

11 sept. 2005, 15:47

Parce que tu n'as fait qu'exécuter la requête, mais tu ne récupères pas le résultat, or mysql_query retourne une ressource, pas un résultat. Correction:
$requete = "SELECT id FROM droits WHERE log = '".$_SERVER['REMOTE_USER']."'";
$id_user = mysql_query($requete);
while($id = mysql_result, 0)
{
    echo "id:". $id .":fin";
}
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 25 Messages

11 sept. 2005, 16:19

merci cyrano.
je comprend à peu pres...
il reste une erreur apres avoir changé le code:
Parse error: parse error, unexpected ',' in /var/www/free.fr/7/5/blablaa/toto/index.php on line 45

line 45 c'est celle ou il y a le while.

j'ai tenté d'enlever le ,0 (ne sachant pas à quoi il sert) et le resultat a bouclé a l'infini dans la page.

Mammouth du PHP | 19672 Messages

11 sept. 2005, 16:29

Autant pour moi, il y a une erreur dans mon code : corrigé
$requete = "SELECT id FROM droits WHERE log = '".$_SERVER['REMOTE_USER']."'";
$id_user = mysql_query($requete);
while($id = mysql_result($id_user, 0))
{
    echo "id:". $id .":fin";
}
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 25 Messages

11 sept. 2005, 16:41

pas mal, ça m'affiche bien le résultat attendu, mais ça boucle à l'infini :wink:

peux tu m'expliquer a quoi correspondent les 2 parametres passés dans le mysql_result stp?

HD
Mammouth du PHP | 1181 Messages

11 sept. 2005, 16:45

le premier est le resultat
le deuxieme est le numero de la ligne (on commence a partir de 0)
plus d'ifos : http://www.php.net/manual/fr/function.mysql-result.php
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

Mammouth du PHP | 983 Messages

11 sept. 2005, 16:46

Le premier argument: resultat d'une requete exécutée avec mysql_query
Deuxième : ligne à récupérer (ordre des champs du select, de 0 à n-1, si tu sélectionnes n champs)

Va voir ici

edit:
La boucle infinie est logique car on boucle sur la ligne 0 indéfiniment.
Modifié en dernier par rami le 11 sept. 2005, 16:54, modifié 1 fois.

Mammouth du PHP | 19672 Messages

11 sept. 2005, 16:47

...ça m'affiche bien le résultat attendu, mais ça boucle à l'infini ...
:shock: pas normal du tout... sauf si tout ça est à l'intérieur d'une autre boucle ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 25 Messages

11 sept. 2005, 16:52

...ça m'affiche bien le résultat attendu, mais ça boucle à l'infini ...
:shock: pas normal du tout... sauf si tout ça est à l'intérieur d'une autre boucle ?
non regarde:

Code : Tout sélectionner

$requete = "SELECT id FROM droits WHERE log = '".$_SERVER['REMOTE_USER']."'"; $id_user = MYSQL_QUERY($requete); while($id = mysql_result($id_user, 0)) { echo "id:". $id .":fin"; } $date = date("Y-d-m"); echo "test_fin";
ça m'affiche id:45:finid:45:finid:45:finid:45:finid:45:fin etc....

Mammouth du PHP | 19672 Messages

11 sept. 2005, 17:01

Ben c'est pas normal pour autant... essaye un truc en ajoutant juste un détail dans la requête SQL:
$requete = "SELECT DISTINCT id FROM droits WHERE log = '".$_SERVER['REMOTE_USER']."'";
$id_user = MYSQL_QUERY($requete);
while($id = mysql_result($id_user, 0))
{
    echo "id:". $id .":fin";
}
$date = date("Y-d-m");
echo "test_fin";
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 983 Messages

11 sept. 2005, 17:03

Si c'est normal, tu boucles sur la première ligne indéfiniment:
$requete = "SELECT id FROM droits WHERE log = '".$_SERVER['REMOTE_USER']."'";
$id_user = MYSQL_QUERY($requete);
$i=0;
while($id = mysql_result($id_user, $i))
{
    echo "id:". $id .":fin";
    $i++;
}
$date = date("Y-d-m");
echo "test_fin"; 

Mammouth du PHP | 19672 Messages

11 sept. 2005, 17:07

Sauf que là, on attend un seul résultat, il n'est pas normal d'obtenir le même résultat un nombre indéfini de fois. Peut-être un bug dans MySQL ou dans PHP, je l'ignore, mais je n'ai jamais vu ça.

C'est pour ça que je suggère d'essayer en ajoutant une clause DISTINCT dans la requête.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 983 Messages

11 sept. 2005, 17:11

Nan c'est pas un bug, le 2ème argument de mysql_result() est le numéro de ligne et non pas de la colonne du résultat.

Tu fais une boucle indéfinie car tu affecte à $id la valeur de la ligne 0 tant que mysql_result($res,0) est vrai ( ce qui est toujours le cas).

Eléphanteau du PHP | 25 Messages

11 sept. 2005, 17:11

alors, le distinct, ça ne change rien.

la méthode de rami fonctionne sauf que apres m'afficher le resultat, ça affiche:
Warning: mysql_result(): Unable to jump to row 1 on MySQL result index 10 in /var/www/free.fr/7/5/blabla/tota/index.php on line 46

Mammouth du PHP | 983 Messages

11 sept. 2005, 17:12

Si tu es sur de n'avoir qu'un seul resultat, ne fais pas de boucle while. ;)