erreur passage de variables

Eléphant du PHP | 66 Messages

11 oct. 2007, 09:54

Bonjour,

J'ai un problème avec mon passage de variable de session dans ma requête que voila :
<?php
$sql = "SELECT 
I.num_interv, I.date_demande, I.heure_demande, I.description, I.num_user,US.login_user, US.pass_user,
I.num_service, I.num_urg, U.num_urg, U.nom_urg, US.num_user, US.nom_user, US.prenom_user, I.num_tech, T.num_tech, T.nom_tech, T.prenom_tech

FROM intervention I, urgence U, users US, technicien T
WHERE U.num_urg = I.num_urg
AND I.num_user = US.num_user
AND I.num_tech = T.num_tech
AND US.login_user = $_SESSION['login']
AND US.pass_user = $_SESSION['pass']";

$sql_exe = mysql_query($sql) or die('Erreur : ' . mysql_error());
while ($Tab = mysql_fetch_array($sql_exe)) 
    {
?>
Et j'ai cette erreur la :
Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in c:\interventions\accueil.php on line 72
Merci

d0m
Mammouth du PHP | 1141 Messages

11 oct. 2007, 09:58

premièrement pense à sortir les variables PHP des chaines, c'est toujours mieux :
$sql = "SELECT [...]
        AND US.login_user = ".$_SESSION['login']."
        AND US.pass_user = ".$_SESSION['pass'].";";
ensuite pense que nous on a pas tes numéros de lignes :wink:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

11 oct. 2007, 10:08

En complément de ce qu'a dit d0m, je rappel qu'en SQL les chaines doivent être délimitées par des apostrophes et je doute que $_SESSION['login'] ou $_SESSION['pass'] ne soient des nombres :)

@d0m: il vaut mieux ne pas mettre de ";" à la fin de la requête et laisser le parseur sql s'en charger si nécessaire :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

d0m
Mammouth du PHP | 1141 Messages

11 oct. 2007, 10:24

@d0m: il vaut mieux ne pas mettre de ";" à la fin de la requête et laisser le parseur sql s'en charger si nécessaire :)
Je veux bien une petite explication si ça ne te dérange pas :?:

Eléphant du PHP | 66 Messages

11 oct. 2007, 10:30

Avec les corrections il me met ça :
Erreur : Table inconnue 'vincent' dans where clause
Je pige pas de où il tire ça car mon login dans lexemple c'est vincent.prevost et là il ne me sort que vincent ce qui pourrai être le nom_user.

d0m
Mammouth du PHP | 1141 Messages

11 oct. 2007, 10:40

tu n'as pas mis de quotes autour de tes variables chaiones de caractères dans la requête SQL. Elles sont nécessaire quand tu fais quelque chose du style :
"SELECT [...] where US.login_user='".$login_en_chaine."' ";
sinon en remplacant dans ta requete par ta variable la requete donnera :
"SELECT [...] where US.login_user=vincent.prevost ";
et l'executeur de requete SQL pensera donc que vincent est une table et prevost un champ.
avec les quotes, il remplacera par :
"SELECT [...] where US.login_user='vincent.prevost' ";
et considerera ce qu'il y a après le = comme une variable de type chaine de caractère.

Eléphant du PHP | 443 Messages

11 oct. 2007, 10:50

Avec les corrections il me met ça :
Erreur : Table inconnue 'vincent' dans where clause
Je pige pas de où il tire ça car mon login dans lexemple c'est vincent.prevost et là il ne me sort que vincent ce qui pourrai être le nom_user.
PHP remplace dans une chaine délimitée dans des doubles quotes, les variables ou les propriétés d'objet mais pas les tableaux.
donc "blabla $a blabla $o->prop1 blabla" est valide
alors que "blabla $o['key1'] blabla" ne l'est pas.

Pour plus de lisibilité dans ton code tu peux utiliser la syntax HereDoc:
$sql = <<<TAG
select * 
from   T1
          inner join T2
             on ....
TAG; 
Sinon pour corriger ton dernier bug, mets des quotes autour de tes paramètres.

Eléphant du PHP | 66 Messages

11 oct. 2007, 11:18

oki merci c'est bon ça marche par contre un dernier petit souci

Voila ce que j'ai dans une nouvelle page en haut de ma page je mets ceci :
<?
include "connexion.inc";
session_start();

if(!isset($_SESSION['login']) && !isset($_SESSION['pass'])) {
  echo 'Vous n\'êtes pas autoris´ à acceder à cette zone';
  exit;
}

?>
Et ensuite je veux appeler mes variable de sessions donc je mets ceci
<?php
		    <td align="center">echo $_SESSION['login'];</td>
?>
Mais ça ne marche pas il me met une parse error à cette ligne

Pourtant ça doit fonctionner