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

Langage PHP Discussion :

PDO Select… mais Parse error: syntax error, unexpected T_STRING [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    rjl
    rjl est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 82
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 301
    Points : 129
    Points
    129
    Par défaut PDO Select… mais Parse error: syntax error, unexpected T_STRING
    Bonjour à tous,

    Je galère toujours…
    Je suis passé à PDO avec des résultats mitigés.
    J'ai, en fait 2 problèmes que je sens (en + de ceux que j'ignore encore… ) :

    Premier point : Un Parse error: syntax error, unexpected T_STRING en ligne 37 m'échappe malgré bien des tentatives de correction ?

    Seconde difficulté, je contrôle l'existence dans une table du couple Login / motDePasse par un Select Where qui ne peut que trouver ou non donc aucun autre contrôle ni lecture nécessaire donc pas de Fetch ?
    Dois-je tester une erreur potentielle dans la requête SELECT ?
    Comment contrôler l'exactitude ou non de mon couple Login / motDePasse ?

    Je joins mon code mais pour faciliter la compréhension, j'y ai intégré un Include.
    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
    <?php 
    // Démarrage de la session 
    	session_start(); 
     
    // On vérifie si le champ Login n'est pas vide.              
    	if ($_SESSION['Login']=='')   
    // 		Si c'est le cas, le visiteur ne s'est pas logué et subit une redirection        
    		{ Header('Location:index.php'); } 
    	else    
    	{ 
    	echo " <a href src='Disconnect.php'> Se déconnecter </a> || Utilisateur: ". $_SESSION['Login'] .""; 
    	} 
     
    // Connexion à la base de données MySQL 
    //	require once ('ConnectBDutl.php'); 
     
    // Parametres MySQL       MaJ ConnectBDutl  RJL2713
    	$serveur=''; 				 // serveur mysql
    	$bdname=''; 		     // nom de la base
    	$dsn = 'mysql:host=$serveur;dbname=$bdname';
    	$utilisateur='';      // nom d'utilisateur 
    	$motDePasse=''; 	     // mot de passe
     
    // Connexion à MySQL
    	try
    		{
    		$arrExtraParam= array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"); 
    		$connexion = new PDO( $dsn, $utilisateur, $motDePasse );
    		$connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    		}
    	catch (Exception $er )
    		{
    		echo "Connexion à la Base de données MySQL impossible : ", $er->getMessage();
    //		die();
    		}	
    // Cette table contient la liste des users enregistrés.       
    	$select = $connexion->query(SELECT FROM Respw 
    		WHERE (nomresp = $_SESSION['Login'] AND cdpw = $_SESSION['MotPasse'])); 
    // Récup nom et mot de passe
    	$arr = $pdo->query($query)->fetch(); 
     
      exit              // exit provisoire
    Merci de votre appui car même en multipliant les lectures de Tuto, Doc et Discussions diverses, je me sens bien désarmé face à ces premiers cas pratiques.

    @u plaisir de vous lire RJL2714

  2. #2
    Membre confirmé Avatar de Inazo
    Profil pro
    Gérant - société de développement web
    Inscrit en
    Avril 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Gérant - société de développement web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 417
    Points : 632
    Points
    632
    Par défaut
    Bonjour,

    Pour le parse Error c'est normal vous avez oubliez de mettres des ' ou des " pour donner votre requete à PDO.

    Au lieu de ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $select = $connexion->query(SELECT FROM Respw 
    		WHERE (nomresp = $_SESSION['Login'] AND cdpw = $_SESSION['MotPasse']));
    Il vous faut mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $select = $connexion->query('SELECT FROM Respw 
    		WHERE (nomresp = "'.$_SESSION['Login'].'" AND cdpw = "'.$_SESSION['MotPasse'].'")');
    Cordialement,

  3. #3
    rjl
    rjl est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 82
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 301
    Points : 129
    Points
    129
    Par défaut
    Bonjour
    et d'abord, merci de cette réponse particulièrement rapide.
    Elle m'amène à reconsidérer la syntaxe laquelle est un peu délicate pour un débutant, même possédant le tuto pour grands débutants pressés .
    Bon week end et encore merci. RJL2714

  4. #4
    rjl
    rjl est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 82
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 301
    Points : 129
    Points
    129
    Par défaut
    Bonsoir à tous,

    Pendant quelques jours, je suis resté silencieux pour réétudier les tutos et autres éditions sur le PHP et plus encore le PDO ; j'ai remis en forme, imprimé, lu et relu ; certes, j'ai recadré un certain nombre de renseignements, mais, au vu de mes résultats, ce soir, je mords la poussière avec déception !
    Heureusement que je connais la puissance de votre appui pour me remettre sur le bon chemin et ne pas jeter l'éponge.

    J'ai une page qui fonctionne et fait la même chose que celle sur laquelle je bute mais qui elle… est d'avant donc d'une bonne semaine, avant que je ne décide de basculer en PDO !

    Depuis, j'ai tenté d'ingurgiter PDO, les contrôles de diverses natures mais je n'ai pas voulu (encore) aller jusqu'à une fonction prepare ! Je me suis donc limité à un $PDO->exec ('INSERT INTO
    Pour autant, j'ai intégré quelques $pdo->quote( pour des zones dont j'avais vérifié la présence voire supprimé les blancs devant et derrière mais sans plus.
    J'ai vu et revu l'instruction 96 sur laquelle je bute mais contrôlant les parités (dans l'ordre des parenthèses) ,…

    J'ai même limité mes chaines au minimum soit un champ mais rien n'y fait :
    Parse error: syntax error, unexpected T_VARIABLE in /web/utlsudgoelo/www/pgUTL/traitformul.php on line 96

    Malgré toutes ces recherches, je bute sur un parse error
    Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING
    in /web/utlsudgoelo/www/pgUTL/traitformul.php on line 95

    Peut-être est-ce quelque chose d'évident et choquant pour un spécialiste de ne pas être découvert vu toute la doc qui s'accumule sur ces thèmes ! Je mets le code de la page ci-dessous :
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    <?php
    // Parametres mysql PDO     RJL2716        
    	echo "entrée dans traitformul.php";?><br /><?php  
    	echo $serveur='sql1';?><br /><?php			 // serveur mysql
    	echo $bdname='utlsudgoelo';?><br /><?php		     // nom de la base
    	/* $dsn = 'mysql:host=sql1;dbname=$bdname'; */
    	$dsn = 'mysql:host=sql1;dbname=utlsudgoelo';
    	$utilisateur='utlsudgoelo';      // nom d'utilisateur 
    	$motDePasse='********'; 	     // mot de passe
    	echo $dsn;?><br /><?php
     
    // Connexion à MySQL
    	try
    		{
    		$arrExtraParam= array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
    							  PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
    		$connexion = new PDO( $dsn, $utilisateur, $motDePasse, $arrExtraParam );
    //		$connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); RJL2716
    		}
    	catch (Exception $er )
    		{
    		echo "Connexion à la Base de données MySQL impossible : ", $er->getMessage();
    		die();
    		}
     
    // controle valeurs transmises
    // sélection de la base de données
    //	mysql_select_db(DB_DATABASE, $connect) or die (mysql_error());
    //	mysql_query("SET NAMES utf8"); 
    // à ajouter au début du script au cas où magic_quotes soit à ON 
    	if (get_magic_quotes_gpc()) 
    		{ 
    		$_POST = array_map('stripslashes', $_POST); 
    		} 
     
    //  echo "($_POST)"; echo ($_POST);
    	$msg_erreur = "Erreur. Les champs suivants doivent être correctement remplis:
    <br/><br/>";
    	$msg_ok = "Votre demande a bien été prise en compte.";
    	$message = $msg_erreur;
    // vérification des champs
    // print_r($_POST);  echo "\n";  // contrôle données traitées
    	$anais =($_POST['anais']);
    	if (empty($anais)) 
    		$message .= "Votre année de naissance<br/>";
    	$ancour = date("Y");
    	if (!is_int($anais))
    		$message  .= "Année naissance non conforme<br/>";
    	else if  (($anais <$ancour - 100) or
    				($anais > $ancour -25)) 
    				$message .= "Année naissance incorrecte<br/>";
    	if (empty($_POST['civil'])) 
    		$message .= "Votre civilité<br/>"; 
    	if (empty($_POST['nomadh'])) 
    		$message .= "Votre nom<br/>";
    	if (empty($_POST['prenom'])) 
    		$message .= "Votre prénom<br/>";
    	if (empty($_POST['ad1'])) 
    		$message .= "Votre adresse<br/>"; 
    	$cpost =($_POST['cpost']);
    	if (!is_int($cpost))
    		$message  .= "Code postal non conforme<br/>";
    	else if  (($cpost <1000) or
    			  ($cpost > 95999))
    				$message .= "Code postal erroné<br/>";
    	if (empty($_POST['ville'])) 
    		$message .= "Votre ville<br/>";
    // On va vérifier l'email ...
    	$admail=mysql_real_escape_string(trim($_POST['admail']));
    	If ((empty ($admail))
    	or (!preg_match("#^[a-z0-9._-]{1,}@[a-z0-9._-]{2,}\.[a-z]{2,4}$#",$admail)))
    			$message .= "Code e-mail invalide<br/>";		//    /*  adresse mail incorrecte */
    	$tfixe=mysql_real_escape_string(trim($_POST['tfixe'])); 
    	$tmob=mysql_real_escape_string(trim($_POST['tmob'])); 
    	If  ((empty ($tfixe))
    	or  (!preg_match("#^0[1-68][0-9]{8}$#",$tfixe)))
    			$message .= "N° Téléphone fixe invalide<br/>";
    	If ((empty ($tmob))	
    	or (!preg_match("#^0[1-68][0-9]{8}$#",$tmob)))  
    			$message .= "N° Téléphone mobile invalide<br/>";
    	$nomadh=mysql_real_escape_string(trim($_POST['nomadh']));
    	$prenom=mysql_real_escape_string(trim($_POST['prenom']));
    	$ad1=mysql_real_escape_string(trim($_POST['ad1'])); 
    	$ad2=mysql_real_escape_string(trim($_POST['ad2'])); 
    	$civil=mysql_real_escape_string(trim($_POST['civil'])); 
    	$ville=mysql_real_escape_string(trim($_POST['ville']));
    // si un champ est vide, afficher le message d erreur
    	if (strlen($message) > strlen($msg_erreur)) {
    		$message .= "<br />Revenir par la flèche à la page précédente et corriger";
    		echo $message; exit;} 
    // sinon c est ok 
    	$msg_ok .= "<br /> <br />Revenir par la flèche à la page précédente et cliquer sur le menu désiré";
     
    	$pdo->exec('INSERT INTO adh (anais, civil, nomadh, prenom, ad1, ad2, cpost, ville, tfixe, tmob, admail, MaJ)   
    			VALUES ('.$anais'.'$civil'.$pdo->quote($nomadh).$pdo->quote($prenom).$pdo->quote($ad1).$pdo->quote($ad2).'$cpost'.$pdo->quote($ville).$pdo->quote($tfixe).$pdo->quote($tmob).$pdo->quote($admail).'CURDATE()')'); */
    	$res = mysql_query($sql);
     
    	if ($res) 
    		{
    		echo $msg_ok;
    		}
    	else 
    		{
    		echo mysql_error();
    		}
     
    ?>
    Alors toutes mes excuses mais plus encore mes remerciements pour ceux qui auront la gentillesse et la générosité de se pencher sur ce problème.
    @bientôt RJL1717

  5. #5
    rjl
    rjl est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 82
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 301
    Points : 129
    Points
    129
    Par défaut FATAL ERROR en PDO (INSERT INTO)
    Bonsoir à tous,

    Maintenant avec un peu d'appui (problème des points et virgules) j'ai progressé et bute maintenant sur le cœur du problème PDO :
    Fatal error: Call to a member function exec() on a non-object in /web/utlsudgoelo/www/pgUTL/traitformul.php on line 97
    laquelle contient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $pdo->exec('INSERT INTO adh (anais, civil, nomadh, prenom, ad1, ad2, cpost, ville, tfixe, tmob, admail, MaJ)   
    			VALUES ('.$anais.','.$civil.','.$pdo->quote($nomadh).','.$pdo->quote($prenom).','.$pdo->quote($ad1).','.$pdo->quote($ad2).','.$cpost.','.$pdo->quote($ville).','.$pdo->quote($tfixe).','.$pdo->quote($tmob).','.$pdo->quote($admail).','.CURDATE().')');
    Pour moi, je crois être conforme au tuto de Guillaume "pdo-comprendre-et-corriger-les-erreurs-les-plus-frequentes" où je trouve :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pdo->exec('INSERT INTO livre_or(pseudo, message, date_post) VALUES('. $pdo->quote($_POST['pseudo']) .', '. $pdo->quote($_POST['message']) .', NOW())');
    Merci de vos indications pour corriger cette instruction

    @bientôt RJL2717

  6. #6
    Membre confirmé Avatar de Inazo
    Profil pro
    Gérant - société de développement web
    Inscrit en
    Avril 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Gérant - société de développement web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 417
    Points : 632
    Points
    632
    Par défaut
    Bonjour,

    Si je ne dit pas d'ânerie, ce qui peut arriver, CURDATE() est une fonction MYSQL et donc vous ne devez pas écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    VALUES ('.$anais.','.$civil.','.$pdo->quote($nomadh).','.$pdo->quote($prenom).','.$pdo->quote($ad1).','.$pdo->quote($ad2).','.$cpost.','.$pdo->quote($ville).','.$pdo->quote($tfixe).','.$pdo->quote($tmob).','.$pdo->quote($admail).','.CURDATE().')');
    Mais écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    VALUES ('.$anais.','.$civil.','.$pdo->quote($nomadh).','.$pdo->quote($prenom).','.$pdo->quote($ad1).','.$pdo->quote($ad2).','.$cpost.','.$pdo->quote($ville).','.$pdo->quote($tfixe).','.$pdo->quote($tmob).','.$pdo->quote($admail).',CURDATE())');

    Cordialement,

  7. #7
    rjl
    rjl est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 82
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 301
    Points : 129
    Points
    129
    Par défaut
    Bonjour Inazo,

    Merci de ces indications où semble t'il CURDATE() n'a pas à être précisé comme concaténé (ni points, ni apostrophes) puisque c'est une fonction MySQL.
    J'ai aussi probablement une erreur sur le nom de mon instance PDO (domaine qu'aussi je maîtrise mal !).
    Absent ce jour, je vais me repencher sur le problème ce soir et essayer, non seulement de corriger mais aussi comprendre les éléments qui m'échappent pour peu à peu mettre un peu d'ordre et de cohérence dans tout cela.
    @bientôt. Cordialement RJL2718

  8. #8
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    A priori, ton objet PDO est enregistré dans la variable $connexion ici $connexion = new PDO( $dsn, $utilisateur, $motDePasse, $arrExtraParam ); mais tu essayes de l'utiliser via la variable $pdo ici $pdo->exec(....IL faut donc que tu harmonises tes variables

  9. #9
    rjl
    rjl est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 82
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 301
    Points : 129
    Points
    129
    Par défaut
    Bonsoir à tous , spécialement à Celira & Inazo,

    Un grand coup de chapeau à chacun pour les conseils et propositions que vous m'avez prodigués car, malgré des erreurs multiples, les enregistrements sont contrôlés et s'enregistrent correctement, sachant qu'à chaque stade, j'essaie aussi d'améliorer en respectant les conseils communiqués.
    Un dernier détail me gêne un peu car dans le contrôle des n° de téléphone que je fais par l'instruction de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If (!(empty ($tfixe))and (! (preg_match("#^0[1-68][0-9]{8}$#",$tfixe))) ) 
    			$message .= "N° Téléphone fixe invalide<br/>";
    les numéros en 09 ne sont pas acceptés.
    Je n'ai pas l'intention d'étudier le Regex à ce stade et me passerai (avec regret et dans un premier temps) du contrôle de n° de téléphone si je n'ai pas de solution.

    Inversement, le contrôle d'e-mail que j'ai trouvé fonctionne lui parfaitement.
    Donc, un vrai merci … et sans doute @ bientôt pour d'autres pages que peu à peu (très très doucement) je trouve moins angoissantes à aborder !
    RJL1718

  10. #10
    rjl
    rjl est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 82
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 301
    Points : 129
    Points
    129
    Par défaut
    Bon, j'ai malgré tout cherché et pas bien loin car le contrôle n° téléphone fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      	If (!(empty ($tmob))and (! (preg_match("#^0[1-79][0-9]{8}$#",$tmob))) ) 
    			$message .= "N° Téléphone mobile invalide<br/>";
    Du bonheur car je peux déclarer ce sujet clos
    Encore merci RJL2719

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Parse error: syntax error, unexpected T_VARIABLE ?
    Par blanchonvincent dans le forum Langage
    Réponses: 3
    Dernier message: 14/09/2007, 09h17
  2. Réponses: 2
    Dernier message: 27/06/2007, 00h49
  3. Réponses: 4
    Dernier message: 16/10/2006, 16h16
  4. [PHP-JS] Parse error: syntax error, unexpected T_STRIN
    Par maldini dans le forum Langage
    Réponses: 4
    Dernier message: 25/07/2006, 19h49
  5. Parse error: syntax error, unexpected '}' help
    Par beur dans le forum Langage
    Réponses: 5
    Dernier message: 23/03/2006, 22h33

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