Page 1 sur 1

erreur passage de variables

Posté : 11 oct. 2007, 09:54
par Z3lg4dis
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

Posté : 11 oct. 2007, 09:58
par d0m
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:

Posté : 11 oct. 2007, 10:08
par Ryle
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 :)

Posté : 11 oct. 2007, 10:24
par d0m
@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 :?:

Posté : 11 oct. 2007, 10:30
par Z3lg4dis
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.

Posté : 11 oct. 2007, 10:40
par d0m
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.

Posté : 11 oct. 2007, 10:50
par Tracker
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.

Posté : 11 oct. 2007, 11:18
par Z3lg4dis
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