récupérer un Login

caco
Invité n'ayant pas de compte PHPfrance

19 avr. 2007, 02:14

Bonjour,

Je fais appel à votre grande connaissance pour m'aider à résoudre un problème. :-D

Je cherche désespérément comment faire pour récupérer un Login d'un utilisateur. Voilà le cheminement:
1) L'utilisateur se connecte à un forum (Login et mot de passe)
2) Il va sur le forum désiré et décide de poster un message
3) c'est à ce niveau que je voudrais récupérer son Login et l'insérer dans la base de données.

J'ai fais des recherches et d'inombrables essais, mais rien ne fonctionne. Il me semble qu'il faut utiliser les sessions. J'ai alors essayer d'enregistrer la variable Login (grâce aux sessions)au moment de l'authentification et de la récupérer au moment de l'envoi du message (en même temps que tous les autres champs du formulaire), mais je bloque à un endroit et je vais finir par me taper la tête contre les murs!
Je ne vous propose même pas le code que j'ai essayé car je suis certaine que ça embrouillerait plus qu'autre chose. Je préfère partir à neuf avec vos bons conseils et exemples...


Merci!

Mammouth du PHP | 19672 Messages

19 avr. 2007, 08:01

Même si tu sais que ton code est faux, ce serait toujours un point de départ. On verrait par exemple comment tu gères ta session et comment tu tentes de manipuler tes données.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

caco
Invité n'ayant pas de compte PHPfrance

19 avr. 2007, 11:30

je dois m'embrouiller quelque part dans mon code...
J'en profite pour vous demander comment faire pour diriger automatiquement l'utilisateur connecté vers une page précise?
faut-il faire:
header("Location: http://message.php");


Avec ça je devrais pouvoir vous dire plus clairement où j'en suis et si ça fonctionne...

en fait voici le script de ma page pour l'authentification (je vous mets tout même le html comme ça vous pourrez me dire si session_start() est bien placé..)

Code : Tout sélectionner

<? session_start(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <title>Document sans titre</title> </head> <STYLE> body{ background-color: #6699FF; } </STYLE> <body> <?php include("connexion.php"); //Connection à mysql et sélection de la base de données $select = mysql_select_db($utilisateur); //Préparation de la requête et cryptage du mot de passe $query = "SELECT * FROM utilisateur WHERE Login='".mysql_real_escape_string($_POST['Login'])."' AND MotPasse='".md5($_POST['MotPasse'])."'"; //exécution de la requête et récupération du nombre de résultats $result = mysql_query($query) or die('erreur '.mysql_error()); $num_rows = mysql_num_rows($result); //S'il y a exactement un résultat, l'utilisateur est authentifié, sinon, on l'empêche d'entrer if($num_rows == 1) { header("Location:message.php"); } else { echo 'identifiant ou mot de passe invalide.'; } { $_SESSION['Login'] = $Login; } ?> </body> </html>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

19 avr. 2007, 12:38

Hum.. je pense que ton soucis provient du $Login que tu mets en session au lieu de $_POST['Login'] (ou du login retourné par la requête). Tu ne devrais d'ailleurs le faire qu'à condition que l'authentification soit réussie :
<?php
...

//S'il y a exactement un résultat, l'utilisateur est authentifié, sinon, on l'empêche d'entrer 
if($num_rows == 1) { 
  $_SESSION['Login'] = $_POST['Login'];
  header("Location:message.php"); 
} 
else { 
  echo 'identifiant ou mot de passe invalide.'; 
} 
?> 

Je te recommande par ailleurs, pour éviter des surprises plus tard, de mettre un exit() juste après le header() afin qu'il arrête l'exécution du code à la redirection
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

caco
Invité n'ayant pas de compte PHPfrance

19 avr. 2007, 18:55

Et oui vous aviez bien raison! :pouce:
1. Même si mon code est faux, les choses avancent plus vite si je le poste.
2. Avec
 <?php 
... 

//S'il y a exactement un résultat, l'utilisateur est authentifié, sinon, on l'empêche d'entrer 
if($num_rows == 1) {  
  $_SESSION['Login'] = $_POST['Login']; 
  header("Location:message.php");  
}  
else {  
  echo 'identifiant ou mot de passe invalide.';  
}  
?>
ça fonctionne!

Merci beaucoup pour votre aide! Cela faisait un long moment que je testais les tutoriels et que je fouillais les documentations dans tous les sens, et il me manquaient ces bons conseils! :D