recuperation login dans formulaire

Eléphanteau du PHP | 22 Messages

29 janv. 2011, 11:42

Bonjour tout le monde,


j'ai une page login.php servant d'authentification pour accéder à ma page index.php

Or je voudrais utiliser soit le login soit le password dans la page index.php pour insérer dans mon formulaire son Nom et prénom ainsi que son adresse email grâce à la requête suivante :

$req = mysql_query("SELECT nom_prenom,email_recept FROM CONTACTS where login like '".$login."%'");

(la requête fonctionne bien sous mysql si je remplace ".$login." par une valeur existante dans ma table CONTACTS.)


voici mon problème:

j'ai beau insérer le code suivant avant ma requête mais rien n'est posté, ni même affiché :

$login = htmlentities($_POST['login']);
echo $login;

voici le code source de ma page login.php
<?php
include("_connexion.php");

// on teste si le receptionniste a soumis le formulaire de connexion
if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
	if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['password']) && !empty($_POST['password']))) {

		

		// on teste si une entrée de la base contient ce couple login / password
		
		$sql = 'SELECT count(*) FROM CONTACTS WHERE login="'.mysql_escape_string($_POST['login']).'" AND password="'.mysql_escape_string($_POST['password']).'"';
		$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 enregistré
		if ($data[0] == 1) {
			session_start();
			$_SESSION['login'] = $_POST['login'];
			header('Location: index.php');
			exit();
		}
		// si on ne trouve aucune réponse, le receptionniste s'est trompé soit dans son login, soit dans son mot de passe
		elseif ($data[0] == 0) {
			$erreur = 'Compte non reconnu.';
		}
		// sinon, probème de connexion : plusieurs receptionnistes ont les mêmes identifiants de connexion.
		else {
			$erreur = 'Problème de connexion : merci de vous rapprocher de l\'administrateur.';
		}
	}
	else {
		$erreur = 'Un des champs est vide.';
	}
}
?>

<!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=utf-8" />
<title>Connexion au formulaire de réception</title>
<link href="css/style.css" rel="stylesheet" type="text/css" />
<style type="text/css">

</style>
</head>
<body>
<div id="logo"><img src="img/logo.png" width="199" height="86" alt="DOW KOKAM France" />

</div><br />
<div id="accueil">Bonjour, vous vous trouvez à la page d'accueil du formulaire de réception.<br /><br />
Merci de bien vouloir vous identifier :
</div>
<div id="form_login"><br />
<form id="form_login" name="form1" method="post" action="login.php">
      <p>
  <label for="login">Login :</label>
  <br />
        <input type="text" name="login" value="<?php if (isset($_POST['login'])) echo htmlentities(trim($_POST['login'])); ?>">
        <br /><br />
        
        <label for="pass">Mot de passe :</label>
        <br />
        <input type="password" name="password" value="<?php if (isset($_POST['password'])) echo htmlentities(trim($_POST['password'])); ?>">
        <br />
        <br />
        <input name="connexion" type="submit" value="Connexion" />
        <input type="hidden" name="num_recept" id="num_recept" />
      </p>
</form>
<?php
if (isset($erreur)) echo '<br /><br />',$erreur;
?>

</div>
</body>
</html>
merci pour votre aide et à très vite.

P.S.: (rien à voir mais très troublant!!) lorsque je mets echo $pass; à la place de echo $login; => mon mot de passe de connexion MySql s'affiche. Une idée?

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

29 janv. 2011, 12:23

salut,


j'avoue ne pas comprend ta demande par rapport à ton code !

ton exit() dans la validation du formulaire fait que le script s’arrête a cette ligne, donc validation du formulaire et ça va pas plus loin.

en général exit n'est utilisé que dans le cas d'une "erreur fataal" qui va foutre en l'air tous le reste (par exemple pas de connection au sgbd et la le site est en vrac, même si y préférer une page html bien formée avec un mot d'excuse est préférable ;) ).

je pense que si tu enlève le exit tu va arriver à tes fin (si tu rentre des couple mdp / pxd qui ne sont pas dans la table ta page s'affiche avec les bon couple dans le formulaire ?


@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 22 Messages

29 janv. 2011, 15:48

Re bonjour,
tout d'abord merci pour ta réponse.

j'apporte quelques précisions afin que l'on se comprenne un peu mieux :

j'ai supprimé le exit(); dans le code de la page login.php comme tu me l'as suggéré. Mais rien n'y fait.
Alors dans ma page cible (nommé index.php) j'ai mis un echo qui m'affiche bien le login tapé :
echo $_SESSION['login'];
mais je n'arrive pas à faire en sorte que ce login soit considéré comme étant une variable
$_SESSION['login'] = $_POST['login'];
dans ma requête :
$req = mysql_query("SELECT nom_prenom,email_recept FROM CONTACTS where login like '".$login."%'");
while ($r = mysql_fetch_array($req)) {

$nom_prenom = $r['nom_prenom'];
$email_recept = $r['email_recept'];

}

bref je voudrais que $nom_prenom et $email_recept soit personnalisé en fonction du login tapé dans login.php
en l'état actuel des choses mon code ne m'affiche que la dernière ligne de ma table CONTACTS.

merci encore pour votre aide.

Nicolas

ViPHP
AB
ViPHP | 5818 Messages

29 janv. 2011, 18:44

Je comprend pas trop le "like" dans ta requête.

Il y a tuto (avec code complet et fonctionnel) sur ce que tu veux faire ici

Eléphanteau du PHP | 22 Messages

29 janv. 2011, 23:14

Re bonjour,

alors j'ai bien suivi pas à pas le tuto qui m'a été conseillé.
Je l'ai appliqué et mis en ligne en remplacement de ma page login.php que j'ai posté plus haut.

Malheureusement le problème suivant persiste sur ma page de destination (index.php):
J'ai toujours le nom et l'adresse de la dernière ligne de ma table qui s'affiche dans mon formulaire et ce quelque soit le login et mot de passe que je rentre.

(j'ai revu la syntaxe de ma requête => en remplaçant le "LIKE" par un "=")

voici le code de ma page index.php :
echo htmlspecialchars($_SESSION['login']); // le pseudo s'affiche correctement

$req = mysql_query("SELECT nom_prenom,email_recept FROM CONTACTS where pseudo = '".$login."'");
while ($r = mysql_fetch_array($req)) {
	
	$nom_prenom = $r['nom_prenom'];
	$email_recept = $r['email_recept'];
	
}
en revanche si j'écris en 'dure' :
$req = mysql_query("SELECT nom_prenom,email_recept FROM CONTACTS where pseudo = 'nicolas'");

et bien là, tout s'affiche comme je le souhaite...

je ne comprends vraiment pas ou se trouve ma bourde. (si si...)

merci encore une fois pour votre aide .

ViPHP
AB
ViPHP | 5818 Messages

29 janv. 2011, 23:47

Re bonjour,

alors j'ai bien suivi pas à pas le tuto qui m'a été conseillé.
Je l'ai appliqué et mis en ligne en remplacement de ma page login.php que j'ai posté plus haut.

Malheureusement le problème suivant persiste sur ma page de destination (index.php):
J'ai toujours le nom et l'adresse de la dernière ligne de ma table qui s'affiche dans mon formulaire et ce quelque soit le login et mot de passe que je rentre.
Faire comme dans le tuto :
On écrit la requête puis on l'exécute, ça permet de mieux séparer l'ensemble en faisant par exemple afficher la requête.
$req = "SELECT nom_prenom,email_recept FROM CONTACTS where pseudo = '".$_SESSION['login']."'";

// pour débugage 
 echo $req;

$ressource = mysql_query($req) or die(mysql_error());

Eléphanteau du PHP | 22 Messages

30 janv. 2011, 00:02

grosse faute d'inattention... :oops:

merci infiniment à toi AB...

ViPHP
AB
ViPHP | 5818 Messages

30 janv. 2011, 05:33

:wink:
Au passage je n'ai pas été assez strict dans l'exemple que je t'ai donné, puisqu'il faut toujours (comme l'indique mon tuto :mrgreen: ) utiliser la fonction "mysql_real_escape_string" dans les requêtes avec mysql ou mysqli, soit :
$req = "SELECT nom_prenom,email_recept FROM CONTACTS where pseudo = '".mysql_real_escape_string($_SESSION['login'])."'";