Afficher un message si Login/Mot de passe

Eléphant du PHP | 65 Messages

31 janv. 2011, 12:29

Bonjour,

Je voudrais Valider afficher un message en cas d'erreur de login/mot de passe non renseigné dans la zone du formulaire.

Voici mon code, en tête, dans le page courante compte.php
<?php 
if (isset($_POST['submit1'])) {
	$login = isset($_POST['login'])? $_POST['login']:'';
	$pass = isset($_POST['pass'])? $_POST['pass']:'';
	$message = '';
	if ($login =='') {
		$message .= 'Le login est obligatoire.';
	}
	if ($pass =='') {
		$message .= 'Le mot de passe est obligatoire.';
	}
	if ($message == '') {
		header("Location: client.php");
		exit;
	} else { //erreur
		header("Location: compte.php");
		echo $message;
		exit;
	}
} else {
	$login = '';
	$pass = '';
}
?>
Le formulaire est à la suite
<HTML>...<FORM>...

Est-ce possible de faire cela ?
Le message ne s'affiche pas.
Où est mon erreur ?

Cordialement
jf.

ViPHP
xTG
ViPHP | 7331 Messages

31 janv. 2011, 12:49

Le header() s'exécute instantanément donc pas possible en PHP.
Cependant tu peux faire cela avec une fonction javascript s'exécutant après un certain délai.

Regardes du côté de setTimeout().

ViPHP
ViPHP | 2577 Messages

31 janv. 2011, 12:54

Bonjour,

Après la fonction header(), ton script s'arrête, donc ce qui est derrière ne fonctionne pas.

Remplacer
header("Location: compte.php");
echo $message;
Par
header("Location: compte.php?message=$message");

et dans compte.php traiter $_post['message']

Edit : Après un peut de réflexion, le mieux serai de mettre ton code en début de compte.php (en supprimant la redirection vers compte.php).
Tu pourrais ainsi outre le message remettre facilement le login.
Modifié en dernier par Mazarini le 31 janv. 2011, 12:57, modifié 1 fois.

Mammouth du PHP | 672 Messages

31 janv. 2011, 12:57

Bonjour.

Je te conseille de revoir la fonction header()...
if ($message == '') {
	header("Location: client.php");
	exit;
}
else { //erreur
	header("Location: compte.php");
	echo $message;
	exit;
}
En fait, ce que tu fais là, c'est :

Code : Tout sélectionner

SI $message est vide (pas d'erreur) Rediriger sur la page client.php SINON (erreur) Rediriger sur la page compte.php (et donc quitter le script en cours) afficher $message (ce n'est pas exécuté vu qu'on est parti sur la page compte.php)
Vu que tu es déjà sur la page compte.php, il n'y a pas besoin de faire une redirection.
Le début (où tu crées ton message) est correct.
Tu peux dégager la redirection inutile vers compte.php, et il suffira ensuite de l'afficher dans le formulaire (ou ailleurs) :
<form>
<?php
if ( $message != '' ) { 
echo "<span id='erreur'>$message</span>";
}
?>

Eléphant du PHP | 65 Messages

31 janv. 2011, 13:01

merci xTG de t'intéresser à mon sujet.

Je ne veux pas de JavaScript.

J'ai trouvé: il suffit de mettre un echo $message dans un paragraphe du formulaire.

Mais autre Pb :
après le header en cas d'erreur je voudrais que le login OU mot de passe déjà saisi reste affiché dans les zones correspondantes du formulaire.
Comment faire ceci ?

Mammouth du PHP | 672 Messages

31 janv. 2011, 13:05

après le header en cas d'erreur je voudrais que le login OU mot de passe déjà saisi reste affiché dans les zones correspondantes du formulaire.
Comment faire ceci ?
Vu que tu as récupéré ce qui as été saisi dans dans $login et $pass, il suffit de demander à les aficher :
<input type='text' id='login' value='<?php
if (!empty ($login) ) {
   echo $login;
}?>' />

Invité
Invité n'ayant pas de compte PHPfrance

01 févr. 2011, 00:07

Merci à tous de vos conseils, que j'ai adaptés à ma configuration.
jf.

ViPHP
AB
ViPHP | 5818 Messages

01 févr. 2011, 00:22

merci xTG de t'intéresser à mon sujet.

Je ne veux pas de JavaScript.
Il faut faire la vérification de toutes façon en php mais rien ne t'empêche de doubler par un contrôle javascript ce qui éviterait une requête au serveur pour rien. Enfin bon c'est juste une option. Si ça t'intéresse j'ai fait un exemple assez complet ici mais il y a beaucoup plus simple.