8721 sujets

Développement web côté serveur, CMS

Bonjour,

j'essaie de réaliser pour la première foi un site avec une partie admin et une partie users.
j'ai fait un formulaire d'inscription qui enregistre bien les utilisateurs.
pour la partie connexion, j'ai un vrais problème que je n'arrive pas a identifier, lorsque je met mon id et le mdp, je suis obligé de valider 2x pour arriver à me connecter, c'est très gênant sous chrome qui efface l'id et mot de passe.

Pour info, j'ai essayé de faire un genre de module de connexion et non une page dédié !

donc je récapitule le problème sous chrome (idem sous ff mais l'id et mdp ne s'efface pas)

-je suis sur ma page index avec une "sidebar" qui contient mon formulaire de connexion
-j'entre mon id et mot de passe
-je valide
-chrome charge et efface l'id et mdp (je ne suis pas loggé)
-je retape l'id et mdp
-Enfin loggé

Merci d'avance pour votre aide
Modérateur
Salut,

Dans ma boule de cristal, je vois pas grand chose. Smiley ohwell Sinon tu le vois comment le souci ?
Bonjour,
il est vrai que j'ai oublié un petit détail, "LE CODE" !!!!
Désolé


<?php
$loginOK = false;
?>
<div class="sidebar1">
	<div class="block">
    	<h2>Espace client</h2>
		<?php
		if(isset($_SESSION['login']))
		{
			echo '<p class="libele">Société : </p><br/>
				<p class="info">',$_SESSION['societe'],'</p><br/>
				<p class="libele"> Adresse : </p><br/>
				<p class="info">',$_SESSION['adresse'],'</p><br/>
				<p class="info">',$_SESSION['cp'],'</p><br/>
				<p class="info">',$_SESSION['ville'],'</p><br/>';
			?><p class="libele2"><a href="rapport.php">Vos rapports</a></p>
            <p class="libele2"><a href="composants/logout.php">Déconnexion</a></p><?php
		}else {
			//connexion bdd
			$db = mysql_connect('localhost', 'root', '');
			mysql_select_db('metrosite',$db);
			
			//les champs sont remplis?
			if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['pass']))
			{
				extract($_POST);
				$sql ="select mdp, societe, adresse, cp, ville  from clients where identifiant='".addslashes($login)."'";
				$req = mysql_query($sql) or die('Erreur SQL!<br>'.$sql.'<br>'.mysql_error());
				// je vérifie que l'utilisateur existe bien
				if (mysql_num_rows($req) > 0) 
				{
					$data = mysql_fetch_assoc($req);
					$password = md5($_POST['pass']);
					if ($password == $data['mdp']) 
					{
						$loginOK = true;
					}
				}
				if ($loginOK)
				{
					$_SESSION['login'] = $_POST['login'];
					$_SESSION['societe'] = $data['societe'];
					$_SESSION['adresse'] = $data['adresse'];
					$_SESSION['cp'] = $data['cp'];
					$_SESSION['ville'] = $data['ville'];
				}else {
					echo 'Une erreur est survenue, veuillez réessayer !';
				}
			}else {
				
			}
			//affichage du formulaire
			?><form action="" method="post">
			<fieldset>
			<legend class="info">Identifiez-vous</legend>
			<p>
			<label for="login" class="libele2">Identifiant :</label><br />
			<input type="text" name="login" id="login" value="" />
			</p>
			<p>
			<label for="password" class="libele2">Mot de passe :</label><br />
			<input type="password" name="pass" id="password" value="" /><br />
			<input type="submit" class="bouton" name="submit" value="Se connecter" />
			</p>
			</fieldset>
			</form><?php
		}?>
	</div>
</div>



J'espère qu'avec le code vous pourrez m'apporter de l'aide. Smiley biggrin
Salut, juste quelques choses en regardant rapidement ton code, ne te connecte pas en root, utilise un utilisateur particulier pour ton site mais pas un utilisateur ayant tous les droits, c'est essentiel ! Autre chose sur le même sujet, il serait plus intelligent de faire la connexion à la base de données seulement une fois que tu as vu que les données $_POST sont bien là (i.e ton if sur le login), ça ne mange pas de pain d'éviter d'attaquer la base de données un peu moins Smiley cligne

Tu n'as pas de session_start(), à moins que tu ne nous ai pas montré tout le code entier? Le soucis pourrait provenir de là.
Bonjour,

Repense tes conditions. Cela ne peut pas fonctionner comme cela.

Par exemple, il faudrait placer ta condition ci-dessous après ton test de l'utilisateur.
if(isset($_SESSION['login']))
merci pour vos remarques,

floreo -> pour session_start(), je voulais le mettre dans ma condition
if ($loginOK){}

mais j'ai une erreur qui me dit le session_start(); est ignoré car je le déclare déjà sur mes pages.

C'est la première foi que je dois faire un module de connexion, je dois afficher le formulaire lorsque l'utilisateur n'est pas connecté ou les infos utilisateur si il est loguer d'où le
if(isset($_SESSION['login'])){}

ce qui me dit si j'ai un $_SESSION j'affiche les infos sinon le formulaire.
je dois afficher le formulaire ou les info au même endroit.
C'est là pour moi la difficulté, étant sur php depuis peu !
Voici un exemple de se qui peut être fait :
// Traitement du formulaire
if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['pass'])) {
// connexion
...
// test identifiants
...
if ($loginOK){
// Enregistrement session
...
}
}

// Affichage
if(isset($_SESSION['login'])){
// Infos
...
} else {
// Formulaire
...
}
cid5420 a écrit :
floreo -&gt; pour session_start(), je voulais le mettre dans ma condition
if ($loginOK){}

mais j'ai une erreur qui me dit le session_start(); est ignoré car je le déclare déjà sur mes pages.

Donc pas besoin de le remettre comme indiqué par floreo
Merci bien pour cette piste,

je test demain, la nuit porte conseil !
je vous tiens au courant de l'avancement de mon projet

Merci !
@benj: un soucis avec ce que tu proposes, si on est déjà connecté mais que l'on renvoit le formulaire de connexion, toute la procédure de connexion se refera, je pipote mais ça peut être pris en compte Smiley cligne

Pour le session_start, ne le voyant pas dans ton code, j'ai supposé que c'était soit un oubli, soit juste parce que tu n'as montré qu'une partie de ton code (ce qui semble être le cas). Je me permets de citer la doc concernant le session_start si tu rentres dans ce cas spécifique:
"Pour utiliser des sessions basées sur les cookies, session_start() doit être appelée avant d'afficher quoi que ce soit dans le navigateur."
En gros, il faut placer la fonction en haut de ton fichier avant tout envoi de données, donc dans ta condition, pas sûr que ça aurait bien marché, tout dépend de ton code complet.
Bon courage, prends le temps de faire des boulettes, on s'en rappelle mieux Smiley smile
oui c'est sûr qu'on apprend mieux de ses erreurs, mon travail m'en apprend chaque jour, et je me met de plus en plus dans le bain.

pour le session_start(), j'ai lue les info sur le guide php, lorsque je regarde des tuto sur les formulaires de connexion, je retrouve du code pour une page dédié à la connexion et non un module ce qui à mon avis fonctionne différemment.

je vais essayer avec la solution de benj tout en tenant compte de ta remarque.
Bonjour, je viens de tester le code de benj
cependant, j'ai une erreur de syntaxe que je n'arrive pas à trouver, dreamweaver m'indique une erreur sur l'avant dernier </div>


<?php
$loginOK = false;
?>
<div class="sidebar1">
	<div class="block">
    	<h2>Espace client</h2>
		<?php
        // Traitement du formulaire
        if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['pass']))
        {
            //connexion bdd
			$db = mysql_connect('localhost', 'root', '');
			mysql_select_db('metrosite',$db);
            // test identifiants
            if (mysql_num_rows($req) > 0) 
				{
					$data = mysql_fetch_assoc($req);
					$password = md5($_POST['pass']);
					if ($password == $data['mdp']) 
					{
						$loginOK = true;
					}
            if ($loginOK)
			{
            // Enregistrement session
           		$_SESSION['login'] = $_POST['login'];
				$_SESSION['societe'] = $data['societe'];
				$_SESSION['adresse'] = $data['adresse'];
				$_SESSION['cp'] = $data['cp'];
				$_SESSION['ville'] = $data['ville'];
			}else {
				echo 'Une erreur est survenue, veuillez réessayer !';
			}
        }
        // Affichage
        if(isset($_SESSION['login']))
        {
        	// Infos
        	echo '<p class="libele">Société : </p><br/>
				<p class="info">',$_SESSION['societe'],'</p><br/>
				<p class="libele"> Adresse : </p><br/>
				<p class="info">',$_SESSION['adresse'],'</p><br/>
				<p class="info">',$_SESSION['cp'],'</p><br/>
				<p class="info">',$_SESSION['ville'],'</p><br/>';
			?><p class="libele2"><a href="rapport.php">Vos rapports</a></p>
            <p class="libele2"><a href="composants/logout.php">Déconnexion</a></p><?php 
        }else {
        	// Formulaire ?>
            <form action="" method="post">
				<fieldset>
					<legend class="info">Identifiez-vous</legend>
                    <p>
                    <label for="login" class="libele2">Identifiant :</label><br />
                    <input type="text" name="login" id="login" value="" />
                    </p>
                    <p>
                    <label for="password" class="libele2">Mot de passe :</label><br />
                    <input type="password" name="pass" id="password" value="" /><br />
                    <input type="submit" class="bouton" name="submit" value="Se connecter" />
                    </p>
				</fieldset>
			</form><?php } ?>
	</div>
</div>
Finalement un bête oubli sur un "}"
En tous cas un grand merci a benj qui m'a sortie d'affaire puisque le code fonctionne parfaitement.

j'ai un autre problème mais je vais chercher avant de faire un nouveau post.

Je voulais aussi saluer toutes les personnes qui font vivre le forum car je n'est toujours pas eu de réponse sur les mêmes sujets sur d'autre forum notamment php france, don Merci !!! Smiley biggrin
Que dit le message d'erreur ? Et dans ton navigateur ?

Concernant la logique du code, cela me parait déjà mieux.
Une fois que cela marchera, il restera à prendre en compte les différentes remarques non bloquante mentionné plus haut.