PDO Select... mais Parse error: syntax error

Résolu/Fermé
rjl Messages postés 543 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 25 mai 2019 - 14 juil. 2012 à 11:43
rjl Messages postés 543 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 25 mai 2019 - 22 juil. 2012 à 21:09
Bonjour,

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.
<?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.

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



11 réponses

Autumn`Tears Messages postés 1054 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 144
14 juil. 2012 à 16:54
Salut,

Si la ligne 37 est bien celle-ci : $select = $connexion->query(SELECT FROM Respw WHERE (nomresp = $_SESSION['Login'] AND cdpw = $_SESSION['MotPasse']));

Tu n'as aucune guillemet pour encadrer ta requête :

$select = $connexion->query("SELECT * FROM Respw WHERE nomresp = $_SESSION['Login'] AND cdpw = $_SESSION['MotPasse']");


Sinon tu peux essayer de la sorte :

/* Création de la requête préparée */
$query = 'SELECT * FROM Respw WHERE nomresp = :login AND cdpw = :password';
/* Création du tableau des paramètres utiles à la requête */
$param = array(':login' => $_SESSION['Login'], ':password' => $_SESSION['MotPasse']);

/* Exécution de la requête */
$res = $connexion->prepare($query);
$res->execute($param);

/* Tableau de résultats */
$a_arr = $res->fetchAll();

C'est une solution comme une autre
0
rjl Messages postés 543 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 25 mai 2019 49
17 juil. 2012 à 22:30
Bonjour Autumn'Tears,
Je m'aperçois avec horreur que je n'ai pas répondu à ton message dont je te remercie avant même d'en avoir étudié en détail le contenu !
Je me suis replongé pendant 3 jours dans les tutos et docs d'où mon inattention coupable !
Je vais revenir sur ce sujet demain et te tiendrai au courant.
Dans l'immédiat, j'étais sur des soucis pour une autre page ne INSERT INTO et suis en train de publier un message suite à mes recherches et essais.
Encore merci et @bientôt RJL1717
0
Autumn`Tears Messages postés 1054 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 144
18 juil. 2012 à 18:13
Salut,

Aucun souci !

Cordialement,

Adrien.
0
rjl Messages postés 543 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 25 mai 2019 49
19 juil. 2012 à 22:34
Bonsoir,

Compte tenu de mon niveau, je ne pouvais m'éloigner bien longtemps du Forum !
Ayant "bouclé", avec la générosité des habitués, la page qui me souciait ces derniers jours, je reviens sur celle-ci pour laquelle j'ai repris les instructions... que j'ai elles-mêmes limitées à ce qui me paraît plus important en premier lieu.

Dégagé des erreurs de syntaxe, j'ai lancé l'exécution ; celle-ci commence (dans 2 pages précédentes) par recueillir le Login (nomresp) et le MotDePasse (cdpw) de l'utilisateur et les intègre en paramètres de session me permettant de les récupérer au début de cette page.
La base s'ouvre bien (dans les instructions apportées en Include) mais, c'est ensuite que ça se corse.
Le prépare en ligne 15 passe aussi mais en ligne 16 j'obtiens un message d'erreur :

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]:
Invalid parameter number: parameter was not defined' in /web/utlsudgoelo/www/pgUTL/AccueilCA.php:16
Stack trace: #0 /web/utlsudgoelo/www/pgUTL/AccueilCA.php(16): PDOStatement->execute(Array) #1 {main} thrown
in /web/utlsudgoelo/www/pgUTL/AccueilCA.php on line 16


Alors, certes, lors de mes premiers essais, j'avais déclaré SELECTer 3 champs alors que je n'en employais que 2 (nomresp et cdpw) dans ma recherche et les paramètres passés !
Bien sûr, j'ai tenté de supprimer cet intrus (champ : initiales)... ce qui bien sûr n'a rien modifié au message d'erreur.
Le CODE :
<?php 
// Démarrage de la session 
	session_start(); 
	if ($_SESSION['Login']=='')   				// On vérifie si le champ Login n'est pas vide. 
		{ Header('Location:identifA.php'); } 	// Si c'est le cas, le visiteur ne s'est pas logué et subit une redirection        
/*	else    	{ 	echo " <a href src='Disconnect.php'> Se déconnecter </a> || Utilisateur: ". $_SESSION['Login'] .""; 	}                RJL2715  */

	include("ConnectBDutl.php"); 			// Connexion à la base de données MySQL 

// Cette table contient la liste des users enregistrés.
/* Création de la requête préparée */
	$nomresp = $_SESSION['Login'];
	$cdpw = $_SESSION['MotPasse'];
	$reqPrepRespw = $connexion->prepare('SELECT nomresp, cdpw, initiales FROM Respw WHERE nomresp=:nomresp and cdpw=:cdpw');
	$reqPrepRespw -> execute(array(':nomresp' => $nomresp, ':cdpw' => $cdpw));
	$succes=$reqPrepRespw->execute(array($nomresp,$cdpw)); 
	if($succes) echo "Identiification réussie"; 
	else		echo "Couple Login, Mot de pase inconnu ; réessayer", $succes->getMessage();
	
?>

Sans doute verrez-vous ce qui cloche, voire même que je n'ai pas encore su tirer profit des corrections que vous m'aviez précisé dans les fils précédents !
Alors merci, une fois encore si vous mettez le doigt sur cette (ces) erreur(s) !
Bonne soirée et @bientôt RJL2719
0
Autumn`Tears Messages postés 1054 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 144
19 juil. 2012 à 22:47
Salut,

$reqPrepRespw = $connexion->prepare('SELECT nomresp, cdpw, initiales FROM Respw WHERE nomresp=:nomresp and cdpw=:cdpw');
/* on tente d'exécuter la requête */
try
{
$reqPrepRespw->execute(array($nomresp,$cdpw));
}
catch (PDOException $e)
{
/ *Affiche le message d'erreur */
echo 'Erreur lors de la requête : '.$e->getMessage();

}

/* retourne le nombre de résultats trouvés */
if(!$reqPrepRespw->rowCount())
{
echo 'Erreur d\'identification !';
}
else
{
echo 'Identification réussie !';
}


Ça devrait fonctionner en principe. Le problème de ton erreur venait de :
$succes=$reqPrepRespw->execute(array($nomresp,$cdpw));

Car ici tu donnais la valeur des paramètres, et pas l'association clé/valeur comme dans cette ligne qui pour sa part est exacte :
$reqPrepRespw -> execute(array(':nomresp' => $nomresp, ':cdpw' => $cdpw));
0
rjl Messages postés 543 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 25 mai 2019 49
19 juil. 2012 à 23:28
Merci à Autumn'Tears de cette réponse rapide et de toute manière fondée ... d'autant plus que j'avais déjà un modèle mais sur lequel je ne suis pas revenu.

Pour autant, il y a toujours ce problème de nombre de paramètres :
Erreur lors de la requête : SQLSTATE[HY093]: Invalid parameter number: parameter was not definedErreur d'identification !
J'ai bien sûr tenté de supprimer mon 3ème paramètre (sans plus de changement)
Si je veux être complet, je dois dire que cette table comporte 5 champs :
id nomresp cdpw initiales accestb
id étant la clé primaire et accestb, la dernière date d'accès à un champs donné initiales pour des intervenanat autorisés dans une autre table

Simple détail, à ce stade, je suis surpris que précisant systématiquement utf8, je puisse avoir des caractères non pris en compte par utf8 !
Merci de cette avancée quant au codage du traitement même si ça n'a pss encore solutionné le nombre de paramètres
@demain RJL2719

Nouveau code :
 <?php 
// Démarrage de la session 
	session_start(); 
	if ($_SESSION['Login']=='')   				// On vérifie si le champ Login n'est pas vide. 
		{ Header('Location:identifA.php'); } 	// Si c'est le cas, le visiteur ne s'est pas logué et subit une redirection        
/*	else    	{ 	echo " <a href src='Disconnect.php'> Se déconnecter </a> || Utilisateur: ". $_SESSION['Login'] .""; 	}                RJL2715  */

	include("ConnectBDutl.php"); 			// Connexion à la base de données MySQL 

// Cette table contient la liste des users enregistrés.
/* Création de la requête préparée */
	$nomresp = $_SESSION['Login'];
	$cdpw = $_SESSION['MotPasse'];
/*	$reqPrepRespw = $connexion->prepare('SELECT nomresp, cdpw, initiales FROM Respw WHERE nomresp=:nomresp and cdpw=:cdpw');   
	$reqPrepRespw -> execute(array(':nomresp' => $nomresp, ':cdpw' => $cdpw));
	$succes=$reqPrepRespw->execute(array($nomresp,$cdpw)); 
	if($succes) echo "Identiification réussie"; 
	else		echo 'Couple Login, Mot de pase inconnu ; réessayer', $succes->getMessage(); */
	
	$reqPrepRespw = $connexion->prepare('SELECT nomresp, cdpw, initiales FROM Respw WHERE nomresp=:nomresp and cdpw=:cdpw');
/* on tente d'exécuter la requête */
	try
		{
		$reqPrepRespw->execute(array($nomresp,$cdpw));
		}
	catch (PDOException $e)
		{
/* Affiche le message d'erreur */
		echo 'Erreur lors de la requête : '.$e->getMessage();
		}

/* retourne le nombre de résultats trouvés */
	if(!$reqPrepRespw->rowCount())
		{
		echo 'Erreur d\'identification !';
		}
	else
		{
		echo 'Identification réussie !';
		} 
//		echo nomresp, initiales
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rjl Messages postés 543 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 25 mai 2019 49
19 juil. 2012 à 23:43
Merci à Autumn Tears de cette réponse rapide et de toute manière fondée ... d'autant plus que j'avais déjà un modèle mais sur lequel je ne suis pas revenu.

Pour autant, il y a toujours ce problème de nombre de paramètres :
Erreur lors de la requête : SQLSTATE[HY093]: Invalid parameter number: parameter was not definedErreur d'identification !
J'ai bien sûr tenté de supprimer mon 3ème paramètre (sans plus de changement)
Si je veux être complet, je dois dire que cette table comporte 5 champs :
id nomresp cdpw initiales accestb
id étant la clé primaire et accestb, la dernière date d'accès à un champs donné initiales pour des intervenant autorisés dans une autre table

Simple détail, à ce stade, je suis surpris que précisant systématiquement utf8, je puisse avoir des caractères non pris en compte par utf8 ! Je l'ai ôté car le mot requête en question provenant du message erreur faisait une "syntax error" pour ce forum !
Merci de cette avancée quant au codage du traitement même si ça n'a pas encore solutionné le nombre de paramètres
@demain RJL2719

Nouveau code :
<?php 
// Démarrage de la session 
	session_start(); 
	if ($_SESSION['Login']=='')   				// On vérifie si le champ Login n'est pas vide. 
		{ Header('Location:identifA.php'); } 	// Si c'est le cas, le visiteur ne s'est pas logué et subit une redirection        
/*	else    	{ 	echo " <a href src='Disconnect.php'> Se déconnecter </a> || Utilisateur: ". $_SESSION['Login'] .""; 	}                RJL2715  */

	include("ConnectBDutl.php"); 			// Connexion à la base de données MySQL 

// Cette table contient la liste des users enregistrés.
/* Création de la requête préparée */
	$nomresp = $_SESSION['Login'];
	$cdpw = $_SESSION['MotPasse'];
/*	$reqPrepRespw = $connexion->prepare('SELECT nomresp, cdpw, initiales FROM Respw WHERE nomresp=:nomresp and cdpw=:cdpw');   
	$reqPrepRespw -> execute(array(':nomresp' => $nomresp, ':cdpw' => $cdpw));
	$succes=$reqPrepRespw->execute(array($nomresp,$cdpw)); 
	if($succes) echo "Identiification réussie"; 
	else		echo 'Couple Login, Mot de pase inconnu ; réessayer', $succes->getMessage(); */
	
	$reqPrepRespw = $connexion->prepare('SELECT nomresp, cdpw, initiales FROM Respw WHERE nomresp=:nomresp and cdpw=:cdpw');
/* on tente d'exécuter la requête */
	try
		{
		$reqPrepRespw->execute(array($nomresp,$cdpw));
		}
	catch (PDOException $e)
		{
/* Affiche le message d'erreur */
		echo 'Erreur lors de la requête : '.$e->getMessage();
		}

/* retourne le nombre de résultats trouvés */
	if(!$reqPrepRespw->rowCount())
		{
		echo 'Erreur d\'identification !';
		}
	else
		{
		echo 'Identification réussie !';
		} 
//		echo nomresp, initiales
0
Autumn`Tears Messages postés 1054 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 144
20 juil. 2012 à 13:31
Salut,

L'erreur est ici : $reqPrepRespw->execute(array($nomresp,$cdpw));

Il faut que ce soit ':clé' => 'valeur', ici c'est 0 => 'valeur' ce qui finit par créer des petites erreurs...
$reqPrepRespw->execute(array(':nomresp' => $nomresp,':cdpw' => $cdpw));

Désolé pour cette faute d'inattention !
0
rjl Messages postés 543 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 25 mai 2019 49
20 juil. 2012 à 14:32
Merci et bravo, car, correction faite, j'ai maintenant "Identification rA©ussie !"
Pour montrer de plus que je n'ai pas encore corrigé mes histoires de codification !

"Désolé pour cette faute d'inattention !" n'est pas recevable... Que devrai-je dire en ce qui me concerne ?
Dans d'autres domaines où je me trouve plus dans mon élément, je fais aussi des erreurs et explique en boutade que c'est pour montrer que je travaille car sans erreurs, personne ne s'en rendrait compte !

Plus sérieusement, il est possible de récupérer les champs par la méthode fetch...
Dans mon cas où il ne 'devrait' y avoir qu'un couple Login / Mot de passe par utilisateur dans le fichier, si je l'ai trouvé (Identification réussie), je n'ai pas de raison de vérifier ces éléments, par contre (pour ma culture) je peux avoir besoin de récupérer les initiales ? J'ai tenté de les sortir par echo mais sans succès ?
En fouillant bien, je devrai trouver mais d'abord un grand merci pour tes informations, que là aussi je vais devoir travailler pour comprendre ce qui ne tournait pas rond dans ma démarche (et, il y a a faire...).
Bonne journée @+ RJL2720
0
Autumn`Tears Messages postés 1054 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 144
20 juil. 2012 à 15:01
Si tu veux les initiales, il faudra effectivement retourner les résultats avec fetch()

Ensuite tu peux faire un echo $var['nom'][0].$var['prenom'][0]
0
rjl Messages postés 543 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 25 mai 2019 49
Modifié par rjl le 20/07/2012 à 16:11
Re,
Je tente en vain de récupérer mes champs : je me suis basé sur un tuto de studio.jacksay.com :

Si vous faites une requête qui ne doit retourner qu'un seul enregistrement, vous n'avez pas besoin d'utiliser une boucle pour traiter les résultats, mais utilisez quand même une condition pour éviter un message d'erreur disgracieux au moment de l'affichage :
// Traitement d'un seul résultat
$enregistrement = $select->fetch(); // On teste si la variable $enregistrement, au cas ou elle serait vide.
if( $enregistrement ) 
{  echo '<h1>', $enregistrement->nom, ' ', $enregistrement->prenom, '</h1>';} 		
else {  echo "Aucun résultat";}   // La requête n'a pas retourné de résultat


En conséquence, j'ai essayé de "copier" mais une copie ne vaut jamais un original :
<?php   
// Démarrage de la session   
 session_start();   
 if ($_SESSION['Login']=='')       // On vérifie si le champ Login n'est pas vide.   
  { Header('Location:identifA.php'); }  // Si c'est le cas, le visiteur ne s'est pas logué et subit une redirection    
 include("ConnectBDutl.php");    // Connexion à la base de données MySQL   
// Cette table contient la liste des users enregistrés.  
/* Création de la requête préparée */  
 $nomresp = $_SESSION['Login'];  
 $cdpw = $_SESSION['MotPasse'];  
 $reqPrepRespw = $connexion->prepare('SELECT nomresp, cdpw, initiales FROM Respw WHERE nomresp=:nomresp and cdpw=:cdpw');  
/* on tente d'exécuter la requête */  
 try  
  {  
  $reqPrepRespw->execute(array(':nomresp' => $nomresp,':cdpw' => $cdpw));   
  }  
 catch (PDOException $e)  
  {  
/* Affiche le message d'erreur */  
  echo 'Erreur lors de la requête : '.$e->getMessage();  
  }  
/* retourne le nombre de résultats trouvés */  
 if(!$reqPrepRespw->rowCount())  
  {  
  echo 'Erreur d\'identification !';  
  }  
 else  
  {  
  echo 'Identification réussie !';  
  $enreg=$reqPrepRespw->fetch();  
   echo $enreg;  
   echo '<h4>',$enreg->$nomresp,' ',$enreg->$cdpw,' ',$enreg->$initiales,'</h4>';  
   echo $initiales;  
  }  
?>

J'obtiens bien Identification réussie mais derrière simplement Array sans donnée comme si l'enregistrement n'était pas récupéré :
Identification rA©ussie !Array
Par ailleurs, j'ai bien conscience que $var['nom'][0].$var['prenom'][0] représentent l' premier (et seul) enregistrement d'un tableau mais, je pense que demandant le tableau complet, je devrai, déjà, y trouver cet enregistrement ?
Merci de ton avis. RJL2720
0
Autumn`Tears Messages postés 1054 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 144
20 juil. 2012 à 17:54
Essaie echo $enreg->nomresp et $enreg->cdpw (sans $ devant)
Et $var['nom'][0] doit renvoyer le premier caractère d'un nom, par exemple, si $var['nom'] contient Toto, $var['nom'][0] devrait renvoyer T.
0
rjl Messages postés 543 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 25 mai 2019 49
20 juil. 2012 à 19:43
J'ai fait ces essais et les ai même élargis ; tout est figé c'est à dire que l'enregistrement récupéré est invariablement à blanc ou null ?
J'ai testé aussi le nombre d'enregistrements et j'obtiens bien 1.
j'ai aussi fait les tests suivants :
$enreg=$reqPrepRespw->fetch();
		if ($enreg =" ") echo 2;
		if (is_null($enreg)) echo 1;
		if  (empty($enreg)) echo 0;

Le résultat à 2 confirme que le résultat présent dans $enreg est bien à blanc !
Reste à savoir, maintenant pourquoi $reqPrepRespw->execute(array(':nomresp' => $nomresp,':cdpw' => $cdpw)); fournit des blancs !
Concernant l'enregistrement recherché, ses clés sont correctes (je les ai vérifiées dans les données fournies (réputées être égales à l'enregistrement trouvé).
Un problème pas simple.
@bientôt RJL2720
0
Autumn`Tears Messages postés 1054 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 144
20 juil. 2012 à 21:13
Essaie ta requête directement en base, dans un premier temps.
Ensuite, essaie de faire un var_dump($reqPrepRespw->fetch());
0
rjl Messages postés 543 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 25 mai 2019 49
21 juil. 2012 à 22:13
Bonsoir Autumn'Tears,

Je ne me suis pas précipité et j'ai pris le temps de chercher sans pour autant aboutir !
En fait, je peux lire l'ensemble de ma base mais le problème qui se pose est donc bien une histoire d'affichage.
J'ai aussi tenté de lire en SELECT FROM WHERE mais, bute sur des erreurs de syntaxe au moment de l'affichage (en exécution). J'ai trituré (et cherché) la bonne combinaison sans trouver ; je joins ces éléments au dossier !
Sauf à ce que tu trouves quelque chose, il faudra que je cherche un palliatif (pour récupérer dans une variable les initiales qui ont aussi valeur de code autorisation).
Merci si tu vois quelque chose.
RJL2721
Accès avec fetchALL
<?php 
// Démarrage de la session 
	session_start(); 
	if ($_SESSION['Login']=='')   			// On vérifie si le champ Login n'est pas vide. 
		{ Header('Location:identifA.php'); } 	// Si c'est le cas, le visiteur ne s'est pas logué et subit une redirection  
	include_once("ConnectBDutl.php"); 		// Connexion à la base de données MySQL 
// Cette table contient la liste des users enregistrés.
/* Création de la requête préparée */
	$nomresp = $_SESSION['Login'];
	$cdpw = $_SESSION['MotPasse'];
	$sql = 'SELECT nomresp, cdpw, initiales FROM Respw';
	
// Exécution de la requête $sql
	$sth = $connexion->query($sql);
	$result = $sth->fetchAll();
// Boucle sur les enregistrements
	foreach ($result as $row)
	{
	print ($row['nomresp']);	print ($row['cdpw']);	print ($row['initiales']);
	}
?>

Ici, une partie des résultats (correspondant partielement aux 3 print affichés)
mtRAUX mtr | mOLIVER | mfGUILLERM | mfBRESSON mfb | jpVIDAMAN jpv | dCOLIN | bMORICE | aVIDEMENT av | aTREMEL at | mMORO | gDREVET | nBATTAS | rBOSCHER | rjLEP
=====================
Avec le programme modifié (fetch normal et boucle), pas moyen de sortir les résultats (syntaxe erronée) : qui ont été sélectés ! Je n'ai pas repris le début du code...
<?php 
// Exécution de la requête $sql
	$result="";
	$sth = $connexion->query($sql);       // ligne 15
	$result = $sth->fetch();
// Boucle sur les enregistrements
	{
	print (	$row['nomresp']);	print ("  |  ");	print ($row['initiales']);	print ("  |  ");
	}
?>

message erreur :
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column '$nomresp' in 'where clause'' in /web/utlsudgoelo/www/pgUTL/AccueilCA.php:15 Stack trace: #0 /web/utlsudgoelo/www/pgUTL/AccueilCA.php(15): PDO->query('SELECT nomresp,...') #1 {main} thrown in /web/utlsudgoelo/www/pgUTL/AccueilCA.php on line 15

Avec ligne 11 modifiée :
$sql = 'SELECT nomresp, cdpw, initiales FROM Respw WHERE $nomresp=:nomresp AND $cdpw=:cdpw';

Erreur proche :
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':nomresp AND $cdpw=:cdpw' at line 1' in /web/utlsudgoelo/www/pgUTL/AccueilCA.php:15 Stack trace: #0 /web/utlsudgoelo/www/pgUTL/AccueilCA.php(15): PDO->query('SELECT nomresp,...') #1 {main} thrown in /web/utlsudgoelo/www/pgUTL/AccueilCA.php on line 15

Sur l'usage du var(dump), je ne suis pas assez doué pour le faire fonctionner et de plus, ma version PHP PHP Version 5.2.17 ne le permet pas :
Ces informations peuvent parfois être retournées depuis les drivers de base de la base de données mais pas avec PDO. Ces patchs sont créés et testés pour PHP 5.3 uniquement.
0
Autumn`Tears Messages postés 1054 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 144
Modifié par Autumn`Tears le 21/07/2012 à 22:28
En effet, tu mélanges les noms de champ en ce qui concerne les tables MySQL, avec les variables PHP :
$sql = 'SELECT nomresp, cdpw, initiales FROM Respw WHERE $nomresp=:nomresp AND $cdpw=:cdpw';

Ta requête devrait se présenter de la sorte :
$query = SELECT nomresp, cdpw, initiales FROM Respw WHERE nomresp = :nomresp AND cdpw = :cdpw';
$param = array('nomresp' => $nomresp, ':cdpw' => $cdpw);

$sth = $connexion->prepare($query);
$sth->execute($param);

$a_results = $sth->fetch();

D'ici, essaie de faire var_dump($a_results); afin de voir si les résultats sont conforme (en mettant ta version de PHP à jour, sinon tu ne pourras pas réellement exploiter le tout correctement)
0
rjl Messages postés 543 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 25 mai 2019 49
22 juil. 2012 à 14:51
Bravo Autumn'Tears,
Le sujet est réglé !
Les variables que tu as signalées étaient la conséquence de mes essais multiples... Je pense être passé par la version que tu m'as indiquée mais au moment, j'imprimais à partir de variables row() array dans lequel je n'avais pas porté le résultat !
Enfin, j'ai essayé le var_dump($a_results); lequel m'a édité 6 variables en plus des 2 ou 3 que je cherchais :
array(6) { ["nomresp"]=> string(5) "rjLEP" [0]=> string(5) "rjLEP" ["cdpw"]=> string(8) "********" [1]=> string(8) "********" ["initiales"]=> string(3) "rjl" [2]=> string(3) "rjl" } rjLEP | rjl |
car en reprenant le code comme tu indiquais, le tout fonctionnait !
J'ai donc pu reporter mes "initiales" en variable session pour les pages suivantes.

Bête question : sans lien direct avec le problème réglé, dans ma table pour ces identifications, n'ai-je pas intérêt à supprimer la clé en auto-incrémentation au profit d'une clé primaire composée de la concaténation du Login avec le Mot de Passe ?
Ca supprimerait le risque d'une double intégration de ce tandem ?
Solution alternative : puis-je déclarer ce tandem comme "unique " ?

Encore merci... et sans doute @bientôt RJL2722
0
Autumn`Tears Messages postés 1054 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 144
22 juil. 2012 à 16:21
Tu peux le déclarer comme unique, mais tu risques d'avoir un problème (peut-être une chance sur 100 millions), d'avoir un login : Jean0 Mot de passe : 123456 et un Jean Mot de passe 0123456. Très peu de chances, donc, tu dois pouvoir le faire.
Pour ce qui est de l'auto-incrémentation, tu peux l'enlever mais sur certains systèmes, c'est mieux d'avoir un identifiant comme ça plutôt qu'une grosse clé loginmdp.
0
rjl Messages postés 543 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 25 mai 2019 49
Modifié par rjl le 22/07/2012 à 21:10
Bon, c'est bien d'apprendre mais, j'ai, à coup sûr, mieux à faire que du fignolage !
En fait, seuls les membres du CA et du Bureau (20 à 22) ont accès à certaines pages (planning & infos spécifiques) dont parmi eux quelques uns (4 ou 5) qui ont des initiales et peuvent alors accéder pour modifier las adhérents dans la base (les initiales permettent au passage de savoir qui est intervenu sur un enregistrement donné... (sauf en suppression, encore que...). Je n'envisage pas même de donner l'accès à ces collègues pour modifier les mdp !
Je suis passé à la page qui en fonction de ces résultats (identification et initiales) donne accès aux pages formulaires de MàJ !
Même si j'ai toujours l'impression de faire des progrès, ça veut simplement dire que ce sont des gouffres d'incompétence que j'ai à combler !
Bonne soirée. Amicalement RJL2722
0