Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
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 29/03/2011, 13h49   #1
Membre à l'essai
 
Développeur informatique
Inscription : décembre 2007
Messages : 155
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : décembre 2007
Messages : 155
Points : 20
Points : 20
Par défaut Porblème avec les guillemets et la fin du fichier php

Bonjour,

Je rencontre un problème avec les guillemets en utilisant PHP. IE m'affiche l'erreur suivante:

Parse error: syntax error, unexpected '"', expecting T_STRING or T_VARIABLE or T_NUM_STRING

Voici le code de ma deuxième fonction:

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
function identifier($login,$mot_de_passe)
	{
		global $conn;
		global $reorient;
		global $operation;
		global $message_piedepage;
 
		$sql = "SELECT id FROM user WHERE login=" .  $conn->qstr($login) .  "AND mot_de_passe=" .  $conn->qstr($mot_de_passe);
		$issue = $conn->Execute($sql);
 
		if ($conn->ErrorNo() != 0)
		{
			return ($conn->ErrorMsg());
		}
 
		$nbr = $issue->RowCount("user");
 
		if (($nbr) <> null)
		{
			$reorient = true;
			$operation = "saisir";
			$_SESSION["id_user"] = $issue->fields[0];
		}
		else
		{
			$reorient = true;
			$operation = "identifier";
			$message_piedepage = "Votre Nom d'utilisateur et/ou votre mot de passe est incorrect !";
		}
		return (null);
	}
L'erreur se trouve sur cette ligne:
$_SESSION["id_user"] = $issue->fields[0];

IE m'affiche également deux erreurs équivalentes à la première (meme type d'erreur) sur cette fonction suivante:

Le code de la dernière fonction:

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
function identifier_switch($operation)
	{
		global $_REQUEST;
 
		switch ($operation)
		{
 
			//**********************************************************************
			case "identifier":
 
			// On visualise le formulaire d'iendtification
			$issue = identification_formulaire (isset($_REQUEST["ogin"]), isset($_REQUEST["mot_de_passe"]));
 
			if ($issue[1] != null)
			{
				print error($issue[1]);
			}
			else
			{
				print ($issue[0]);
			}
			break;
 
			//***********************************************************************
			case "identifier.contrl":
				// On contrôle le couple login/mot de passe
				$issue = identifier($_REQUEST["login"],$_REQUEST["mot_de_passe"]);
 
				if ($issue != null)
				{
					print error($issue);
				}
				break;
 
			//***********************************************************************
			default:
				print error("OPERATION".$operation." pas definie");
		}
	}
 
	?>
Les deux erreurs se suituent sur ces deux lignes suivantes:

$issue = identification_formulaire (isset($_REQUEST["login"]), isset($_REQUEST["mot_de_passe"]));

$issue = identifier($_REQUEST["login"],$_REQUEST["mot_de_passe"]);

J'ai essayé de supprimer les guillemets, les trois erreurs disparaissent, cependant, je rencontre une autre erreur:

Parse error: syntax error, unexpected $end (cette erreur est indiquée à la dernière ligne de mon fichier)

Mon fichier contient 3 fonctions dont voici le code de ma première fonction:

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
<?php
function identification_formulaire ($login, $mot_de_passe)
	{
		$html = <<<END
 
		<BR><BR><BR>
 
		<H1>Veuillez compl&eacute;ter les champs suivants pour vous connecter :<H1>
 
		<FORM METHOD="POST">
		<TABLE class="RESULTAT">
			<TR>
				<TD><INPUT TYPE="hidden" NAME="operation" VALUE="identifier.contrl"></TD>
			<TR>
			<TR>
				<TD>Nom d'utilisateur</TD>
				<TD><INPUT TYPE="text" SIZE="20" NAME="login"></TD>
			</TR>
			<TR>
				<TD>Mot de passe</TD>
				<TD><INPUT TYPE="password" SIZE="20" NAME="mot_de_passe"></TD>
			</TR>
 
		</TABLE>
		<BR><BR>
		<INPUT TYPE="submit" VALUE="Se connecter">
		</FORM>
 
	END;
 
		return (array($html, null ) ) ;
	}
Si quelqu'un pourrait m'aider à résoudre mon problème. Je serais reconnaissant. Merci infiniment d'avance.
Gobelins est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 14h01   #2
Invité de passage
 
Inscription : août 2006
Messages : 7
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 7
Points : 1
Points : 1
<TD>Nom d'utilisateur</TD>


l'apostrophe de nom d'utilisateur est considérée comme un guillement
essaie avec Nom d\utilisateur
launas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 14h16   #3
Membre à l'essai
 
Développeur informatique
Inscription : décembre 2007
Messages : 155
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : décembre 2007
Messages : 155
Points : 20
Points : 20
J'ai suivi ce que tu m'as dis, mais j'ai toujours le meme problème.
Gobelins est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 14h27   #4
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Je ne vois pas d'erreur du type donné dans le code que tu nous fournis.
PHP ne donne pas obligatoirement la ligne où se situe l'erreur quand c'est une faute de frappe, un oublie de parenthèse, de guillemet ou de point-virgule.
Regarde plus haut dans ton code ou indique nous la totalité du code donnant l'erreur.

Sinon, à part ça dans le 1er code, je ne vois juste :
Code :
$sql = "SELECT id FROM user WHERE login=" .  $conn->qstr($login) .  "AND mot_de_passe=" .  $conn->qstr($mot_de_passe);
devrait être
Code :
$sql = "SELECT id FROM user WHERE login='" .  $conn->qstr($login) .  "' AND mot_de_passe='" .  $conn->qstr($mot_de_passe)."'";
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 14h35   #5
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Ok, je n'étais pas très familier avec la syntaxe HEREDOC avec PHP

Apparemment, il ne faut pas que la "balise" fermante soit indentée. Or, il semble que ce soit le cas dans votre 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
function identification_formulaire ($login, $mot_de_passe)
	{
		$html = <<<END
 
		<BR><BR><BR>
 
		<H1>Veuillez compl&eacute;ter les champs suivants pour vous connecter :<H1>
 
		<FORM METHOD="POST">
		<TABLE class="RESULTAT">
			<TR>
				<TD><INPUT TYPE="hidden" NAME="operation" VALUE="identifier.contrl"></TD>
			<TR>
			<TR>
				<TD>Nom d'utilisateur</TD>
				<TD><INPUT TYPE="text" SIZE="20" NAME="login"></TD>
			</TR>
			<TR>
				<TD>Mot de passe</TD>
				<TD><INPUT TYPE="password" SIZE="20" NAME="mot_de_passe"></TD>
			</TR>
 
		</TABLE>
		<BR><BR>
		<INPUT TYPE="submit" VALUE="Se connecter">
		</FORM>
 
END; // fin du HEREDOC dans la colonne 1 !
 
		return (array($html, null ) ) ;
	}
Pouvez-vous essayer et nous donner votre retour ?
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 14h45   #6
Membre à l'essai
 
Développeur informatique
Inscription : décembre 2007
Messages : 155
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : décembre 2007
Messages : 155
Points : 20
Points : 20
J'ai changé comme tu m'as indiqué, j'ai toujours le meme problème.

Je vous ai fourni la totalité du code (3 fonctions) et je vous ai indiqué les 3 lignes qui produisent les erreurs. Il fallait bien lire les indications que j'ai écries. Maintenant, je vais afficher la totalité du code qui est composé de 3 fonctions avec les lignes qui génèrent les erreurs:

Première fonction: dans cette fonction, j'ai pas d'erreur

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
<?php
function identification_formulaire ($login, $mot_de_passe)
	{
		$html = <<<END
 
		<BR><BR><BR>
 
		<H1>Veuillez compl&eacute;ter les champs suivants pour vous connecter :<H1>
 
		<FORM METHOD="POST">
		<TABLE class="RESULTAT">
			<TR>
				<TD><INPUT TYPE="hidden" NAME="operation" VALUE="identifier.contrl"></TD>
			<TR>
			<TR>
				<TD>Nom d'utilisateur</TD>
				<TD><INPUT TYPE="text" SIZE="20" NAME="login"></TD>
			</TR>
			<TR>
				<TD>Mot de passe</TD>
				<TD><INPUT TYPE="password" SIZE="20" NAME="mot_de_passe"></TD>
			</TR>
 
		</TABLE>
		<BR><BR>
		<INPUT TYPE="submit" VALUE="Se connecter">
		</FORM>
 
	END;
 
		return (array($html, null ) ) ;
	}
Deuxième fonction: une erreur

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
function identifier($login,$mot_de_passe)
	{
		global $conn;
		global $reorient;
		global $operation;
		global $message_piedepage;
 
		$sql = "SELECT id FROM user WHERE login='" .  $conn->qstr($login) .  "'AND mot_de_passe='" .  $conn->qstr($mot_de_passe)."'";
		$issue = $conn->Execute($sql);
 
		if ($conn->ErrorNo() != 0)
		{
			return ($conn->ErrorMsg());
		}
 
		$nbr = $issue->RowCount("user");
 
		if (($nbr) <> null)
		{
			$reorient = true;
			$operation = "saisir";
			$_SESSION["id_user"] = $issue->fields[0];
		}
		else
		{
			$reorient = true;
			$operation = "identifier";
			$message_piedepage = "Votre Nom d'utilisateur et/ou votre mot de passe est incorrect !";
		}
		return (null);
	}
L'erreur se produit sur cette ligne de la deuxième fonction:
Code :
$_SESSION["id_user"] = $issue->fields[0];

Troisième fonction: deux erreurs

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
function identifier_switch($operation)
	{
		global $_REQUEST;
 
		switch ($operation)
		{
 
			//**********************************************************************
			case "identifier":
 
			// On visualise le formulaire d'iendtification
			$issue = identification_formulaire (isset($_REQUEST["login"]), isset($_REQUEST["mot_de_passe"]));
 
			if ($issue[1] != null)
			{
				print error($issue[1]);
			}
			else
			{
				print ($issue[0]);
			}
			break;
 
			//***********************************************************************
			case "identifier.contrl":
				// On contrôle le couple login/mot de passe
				$issue = identifier($_REQUEST["login"],$_REQUEST["mot_de_passe"]);
 
				if ($issue != null)
				{
					print error($issue);
				}
				break;
 
			//***********************************************************************
			default:
				print error("OPERATION".$operation." pas definie");
		}
	}
 
	?>

Une erreur se produit sur cette ligne sur cette ligne:

Code :
$issue = identification_formulaire (isset($_REQUEST["login"]), isset($_REQUEST["mot_de_passe"]));
Une erreur se produit sur cette ligne:

Code :
$issue = identifier($_REQUEST["login"],$_REQUEST["mot_de_passe"]);
Gobelins est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 14h54   #7
Membre à l'essai
 
Développeur informatique
Inscription : décembre 2007
Messages : 155
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : décembre 2007
Messages : 155
Points : 20
Points : 20
C'est bon, je n'ai pas indenté END; et maintenant, il n' y a pas d'erreurs dans ce fichier. Merci bcp pour votre aide. Mais maintenant, je suis entrain de compiler car j'ai bcp de fichiers, il y a d'autres erreurs dans d'autres fichiers.

Pourquoi l'interpréteur PHP n'affiche pas l'erreur sur END; ? Il affiche sur une autre ligne
Gobelins est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 15h19   #8
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
PHP n'est pas compilé mais interprété.
La différence est que le/s script/s sont lus et interprété à la volée.
S'il manque un guillemet, un ";" ou une parenthèse, il lui arrive de s'en rendre compte à la fin quand il s'avère manquer de quelque chose pour achever l'interprétation.

Il se réfère donc souvent, soit à la fin du document, soit aux lignes précédentes à l'erreur.

Pour le reste, la syntaxe HEREDOC est bien particulière (comme n'importe quelle syntaxe en informatique, elle a des règles.)
Vous pouvez voir dans le lien que j'ai donné dans mon précédent post les différentes règles.
Elle permet de garder les tabulations, les sauts de ligne, permet d'intégrer des variables et de les parser. Elle permet aussi de prendre en compte les guillemets simples et doubles sans échappement.

Code :
1
2
3
4
$var = <<<END // toujours commencer par <<< et un autre mot collé. 
blablabla
	hahaa
END; // toujours finir par le même mot à la colonne 1 du fichier puis point-virgule
Le XML a ses règles, HEREDOC aussi c'est tout
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h42.


 
 
 
 
Partenaires

Hébergement Web