Récupérer le login d'une session dans une requête.

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Récupérer le login d'une session dans une requête.

par piotrowski-s » 11 mai 2008, 11:13

nickel, tout fonctionne merci, j'avais fait une erreur de synthaxe, ce qui changait tout. maitenant c'est bon. merci à vous...

par orgerix » 11 mai 2008, 11:12

Ca j'en sais rien, c'est toi qui a fait le script. Mais il y a grande chance que oui.

par piotrowski-s » 11 mai 2008, 10:59

c'est la variable loginclient, quand on rempli le formulaire.?

par orgerix » 11 mai 2008, 10:54

Ecoute, je veux bien t'aider, mais la, il faut que tu fasse un peu les choses par toi même, sinon quand tu aura fini ton projet, tu n'aura pas progresser. Je vais te donner un peu d'aide.

Réfléchis comme tu récupère le login de ton client puis regarde quand tu l'affecte à une variable de session.

par piotrowski-s » 11 mai 2008, 10:39

ma page de connexion est la suivante:
<?
//insertion de fichier de configuration
require("infos/config.inc.php");
// connection et selection de la base ce donnée
$connect=mysql_connect($host,$login,$pass) or die ("Connection impossible");
mysql_select_db($base,$connect) or die ("selection impossible");
?>
<?php

// on teste si le visiteur a soumis le formulaire de connexion  
if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') { 
   if ((isset($_POST['loginclient']) && !empty($_POST['loginclient'])) && (isset($_POST['pass_md5']) && !empty($_POST['pass_md5']))) { 
      
      
      // on teste si une entrée de la base contient ce couple login / pass 
      $sql = 'SELECT count(*) FROM clients WHERE loginclient="'.mysql_escape_string($_POST['loginclient']).'" AND pass_md5="'.md5(mysql_escape_string($_POST['pass_md5'])).'"'; 
      $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); 
      $data = mysql_fetch_array($req); 
      
      mysql_free_result($req); 
      mysql_close(); 
      
      // si on obtient une réponse, alors l'utilisateur est un membre 
      if ($data[0] == 1) { 
         session_start(); 
         $_SESSION['loginclient'] = $_POST['loginclient']; 
         header('Location: membre.php'); 
         exit(); 
      } 
      // si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe 
      elseif ($data[0] == 0) { 
         $erreur = 'Compte non reconnu.'; 
      } 
      // sinon, alors la, il y a un gros problème :) 
      else { 
         $erreur = 'Probème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.'; 
      } 
   } 
   else { 
      $erreur = 'Au moins un des champs est vide.'; 
   }  
}  
?>



<html>
<head>
<title>CONNEXION A VOTRE ESPACE CLIENTS</title>
<meta name="generator" content="Namo WebEditor v5.0">
</head>
 
<body>
Connexion à votre espace client :<br />
<form action="index.php" method="post">
Login : <input type="text" name="loginclient" value="<?php if (isset($_POST['loginclient'])) echo htmlentities(trim($_POST['loginclient'])); ?>"><br />
Mot de passe : <input type="password" name="pass_md5" value="<?php if (isset($_POST['pass_md5'])) echo htmlentities(trim($_POST['pass_md5'])); ?>"><br />
<input type="submit" name="connexion" value="Connexion">
</form>

<?php

if (isset($erreur)) echo '<br /><br />',$erreur;  
?>

</body>
</html> 

par orgerix » 11 mai 2008, 10:37

Dans ce cas, réfère toi au message de Zeus.

Fais un print_r($_SESSION) pour voir ce qu'il y a dans ton tableau et prendre ce que tu veux, ou regarde dans ta page de connexion quel nom tu as donné pour le login.

par piotrowski-s » 11 mai 2008, 10:33

côté session, tout est ok, je souhaite juste rcupérer le login de la session.

par orgerix » 11 mai 2008, 10:31

Il faut maintenant savoir comme tu récupè le login du client. Est ce une varaible de session ? est ce une donnée d'un formulaire ?

Suivant les cas, il faudra utiliser les superglobale $_POST ou $_SESSION (attention à bien initialiser la session avec session_start() )

Mais FredoMkb t'as déjà résumé la méthode générale pour gérer les sessions

par piotrowski-s » 11 mai 2008, 10:25

en utilisant ceci,
PHP: 
$sql = "SELECT civilite FROM clients WHERE loginclient =('$loginclient')";  
je n'ai n i message erreur, ni affichage

par FredoMkb » 11 mai 2008, 10:22

Bonjour :)

Alors, voici les étapes "normales", c'est à dire les plus usuelles, qu'on effectue lors d'une identification :

1. Affichage d'un formulaire d'identification, par méthode "post" en général, avec demande d'un identifiant et d'un mot de passe associé ;

2. Dès la validation du formulaire, on récupère les informations entrées par l'utilisateur, variable globale "$_POST" le plus souvent ;

3. Dès les infos récupérées, on vérifie l'existence et la validité du couple "login/pass", autrement dit, on s'assure que l'identifiant entré est connu et que son mot de passe est correct ;

4. Dès l'authentification faite, on conserve des informations sur cette identification dans une session, en passant par la variable globale "$_SESSION", par exemple pour sauvegarder l'identifiant en faisant un simple "$_SESSION['login'] = $_POST['login'];", enfin, on vide les infos présentes dans la variable globale "$_POST" ;

5. On peut évidemment utiliser une base de données, comme dans ton projet, pour faire des vérifications et pour récupérer les infos personnelles de l'utilisateur, juste en fournissant son identifiant comme critère de recherche, qui doit normalement être unique, et comme celui-ci est normalement en mémoire dans la variable "$_SESSION", il suffit de faire un truc du genre "$login = $_SESSION['login'];" ;

Dans tous les cas d'utilisation des sessions, n'oublie pas de démarrer une session avec la fonction "session_start()". [Edit] petit erreur sur le nom de la fonction... désolé :) [/Edit]

Comme tu vois, pour chaque étape on utilise un espace mémoire différent et adapté aux informations qu'on désire manipuler, c'est le passage d'un espace ver l'autre qu'il faut bien assurer pour que tes données importantes restent accessibles, mais prend toujours soin de vider les variables globales dont tu n'as plus l'utilité...

Voilà... j'espère que ceci peut t'éclairer un peu sur la marche à suivre...

à+ :)

par orgerix » 11 mai 2008, 10:14

Avec la coloration syntaxique, tu devrait déjà avoir une idée.

En fait, ta chaine s'arret à la première apostrophe recontré, en l'occurence celle devant $loginclient. Ensuite, PHP rencontre une variable, sans aucun opérateur. Il ne sais pas quoi faire.

IL faut donc "échapper" les apostrophes pour que ta requete forme une unique chaine. il suffit d'ajouter un antislash avant, cequi donnerai quelque chose comme ca
$sql = 'SELECT civilite FROM clients WHERE loginclient =(\'$loginclient\')';
Note : Observe bien la différence de couleur de $loginclient. Maintenant il est en rouge, ce qui indique qu'il est dans la chaine.

Cependant, ce n'est toujours pas ce que tu veux faire. Cette requete te retourner la civilité de tous tes clients dont le login sera '$loginclient' tel quel et non sa valeur car les simple quote n'interprete pas les variables.

Il faut utiliser les doublequote, comme ceci :
$sql = "SELECT civilite FROM clients WHERE loginclient =('$loginclient')";
Note : Cette fois, les simple quote ne sont plus des caractères spéciaux, donc il ne faut pas les échapper.

par piotrowski-s » 11 mai 2008, 10:08

je vais voir merci de la rapidité

par zeus » 11 mai 2008, 10:04

salut,

il doit se trouver dans la superglobale $_SESSION, qui est un tableau.
Fait un print_r($_SESSION) pour voir comment les données sont agencées en session.

Sinon, il aurait suffit de regarder la page de connexion. :roll:

Récupérer le login d'une session dans une requête.

par piotrowski-s » 11 mai 2008, 10:00

Bonjour, je voulais savoir quel était la synthaxe qui permettait de récupérer le login d'une session dans une requête?
Je m'explique, un client A se connecte à son espace, une session est donc créée et lorsqu'il valide ses identifiants, il est redirigé vers la page A en question.
Ensuite, pour affichier ses info, nous utilisons une requête:
$sql = 'SELECT civilite FROM clients WHERE loginclient =('$loginclient')';
Or, la synthaxe est incorrecte, quelqu'un aurait-il l'amabilité de me donner la bonne synthaxe pour récupérer le login d'une session dans une requête.
D'avance merci.