Page 1 sur 1

probleme d'affichage de variable

Posté : 22 mai 2008, 11:59
par mystic666
bonjour,

je debut en php et j'ai un petit probleme que j'arrive pas a comprendre sur l'affichage de mes messages d'erreurs, le probleme se situe sur une seule page sur les autres ca marche tres bien...
voila le code que j'ai fait sur la page qui me pose probleme...
<?php
$messError__champ_empty = "<br><font color=red>Vous avez oubli&eacute; de remplir un champ <br>Tous les champs doivent &ecirc;tre remplis!<br><br></font>";
$messError__log_error = "<br><font color=red>Veuillez vérifier vos identifiants !<br><br></font>";
$messError__acces_refuse = "<br><font color=red><center>Vous avez tent&eacute; d'acc&eacute;der &agrave; une page dont l'acc&egrave;s vous est interdit ! <br> Vous allez &ecirc;tre redirig&eacute; vers votre page dans 5s !</center></font>";

session_start();
include 'fonction/cnxbdd.php';

if ((isset($_GET['action'])) && ($_GET['action'] == 'logout')){
	$_SESSION = array();
	session_destroy();
}
$_SESSION['for_nom'] = '';
$_SESSION['for_mdp'] = '';

if(isset($_POST['submit'])){
cnxbdd();			
$for_nom = ($_POST['for_nom']);	
$for_mdp = ($_POST['for_mdp']);	
$type = $_POST['type'];	
  
if ($for_nom == '' || $for_mdp == '') {echo $messError__champ_empty;/*msg erreur*/}
else{
	$_SESSION['for_nom'] = $for_nom;
	$_SESSION['for_mdp'] = $for_mdp;
	$retour = mysql_query("SELECT rang FROM user WHERE nom = '".$for_nom."' AND mdp = '".$for_mdp."'");
	if(mysql_num_rows($retour) > 0){
		$result = mysql_fetch_object( $retour );
			switch ($result->rang){
			case "admin": 
				echo ('<META HTTP-EQUIV="Refresh" CONTENT="0;URL=\'admin/administration2.php\'">');
				break;
			case "manager":
				echo ('<META HTTP-EQUIV="Refresh" CONTENT="0;URL=\'sadministration.php\'">'); 
				break;
			default:
				echo $messError__acces_refuse; /*msg erreur*/
				echo ('<META HTTP-EQUIV="Refresh" CONTENT="5;URL=\'sacceuil.html\'">');
				break;
	}
}else{echo $messError__log_error;/*msg erreur*/}
	}
}?>
pour voir le script en action c'est http://zawoski.free.fr/sadmin.php

lorsque je valide le formulaire en ayant rien rentre il doit m'afficher sur la meme page le message d'erreur mais la il m'efface tout pour me mettre juste le message d'erreur je sais pas pourquoi... j'ai le meme type de code sur d'autre page et cela fonctionne tres bien pourtant...
pourriez vous m'aider svp je desespere de ne pas trouver d'ou vien le pb :(
merci d'avance

Posté : 22 mai 2008, 12:18
par guilt92
Soit tu ne montres pas la totalité du code soit il y a beaucoup trop d'accolade fermantes...

Peut on voir le reste et surtout la partie d'affichage du reste de la page ?

Posté : 22 mai 2008, 13:17
par mystic666
Soit tu ne montres pas la totalité du code soit il y a beaucoup trop d'accolade fermantes...

Peut on voir le reste et surtout la partie d'affichage du reste de la page ?
je montrai pas tout le code... c'est chose repare voila la totalite du code...
<?php
	session_start();
	include 'fonction/cnxbdd.php';
	$messError__champ_empty = "<br><font color=red>Vous avez oubli&eacute; de remplir un champ <br>Tous les champs doivent &ecirc;tre remplis!<br><br></font>";
	$messError__log_error = "<br><font color=red>Veuillez vérifier vos identifiants !<br><br></font>";
	$messError__acces_refuse = "<br><font color=red><center>Vous avez tent&eacute; d'acc&eacute;der &agrave; une page dont l'acc&egrave;s vous est interdit ! <br> Vous allez &ecirc;tre redirig&eacute; vers votre page dans 5s !</center></font>";

	if ((isset($_GET['action'])) && ($_GET['action'] == 'logout'))
	{
		$_SESSION = array();
		session_destroy();
	}
	$_SESSION['for_nom'] = '';
	$_SESSION['for_mdp'] = '';
if(isset($_POST['submit'])){
	cnxbdd();			
	$for_nom = ($_POST['for_nom']);	
	$for_mdp = ($_POST['for_mdp']);	
	$type = $_POST['type'];	
	if ($for_nom == '' || $for_mdp == '') {
		echo $messError__champ_empty;/*msg erreur*/
	}
	else
	{
		$_SESSION['for_nom'] = $for_nom;
		$_SESSION['for_mdp'] = $for_mdp;
		$retour = mysql_query("SELECT rang FROM user WHERE nom = '".$for_nom."' AND mdp = '".$for_mdp."'");
		if(mysql_num_rows($retour) > 0){
			$result = mysql_fetch_object( $retour );
			switch ($result->rang){
			case "admin": 
				echo ('<META HTTP-EQUIV="Refresh" CONTENT="0;URL=\'admin/administration2.php\'">');
				break;
			case "manager":
				echo ('<META HTTP-EQUIV="Refresh" CONTENT="0;URL=\'sadministration.php\'">'); 
				break;
			default:
				echo $messError__acces_refuse;/*msg erreur*/
				echo ('<META HTTP-EQUIV="Refresh" CONTENT="5;URL=\'sacceuil.html\'">');
				break;
			}
		}else{
			echo $messError__log_error;/*msg erreur*/	
		}	
	}
	}
	else
	{
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
        <title>Page prot&eacute;g&eacute;e par mot de passe</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <link rel="stylesheet" media="screen" type="text/css" title="Design" href="design.css" />
</head>
<?php
	if (!isset($_POST['submit']))
	{
		echo '<br>Veuillez renseigner les champs suivant afin de vous connecter.'."\n";
		echo '<form id="conn" method="post" action="">'."\n";
		echo '  <p><label for="for_nom">Nom :</label><input type="text" id="for_nom" name="for_nom" /><br>'."\n";
		echo '  <label for="for_mdp">Mot de passe :</label><input type="password" id="for_mdp" name="for_mdp" /></p>'."\n";
		echo '<input  type="hidden" value="log" name="type" /> '."\n";
		echo '  <p><input type="submit" id="submit" name="submit" value="Valider" /></p>'."\n";
		echo '</form>'."\n";
		echo '<p>Cette page est r&eacute;serv&eacute;e aux managers d\'&eacute;quipe !!</p>'."\n";
	}; 
?>
<a href="index.php">Retour &agrave; la page principale du site</a>
</body>
</html>
<?php
}
?>

Posté : 22 mai 2008, 13:23
par guilt92
if (!isset($_POST['submit'])) 
Forcement tu ne rentres pas dans cette boucle si tu as validé la version précédente donc l'affichage du formulaire ne se fait pas... :p

Ou alors je ne comprends pas ta question. Pour moi tu voulais avoir le formulaire en dessous du message d'erreur si quelqu'un avait validé avec un champ vide par exemple. Hors si quelqu'un valide le $_POST existera de toute facons, meme si la valeur est vide il est défini...

Posté : 22 mai 2008, 13:51
par mystic666
if (!isset($_POST['submit'])) 
Forcement tu ne rentres pas dans cette boucle si tu as validé la version précédente donc l'affichage du formulaire ne se fait pas... :p

Ou alors je ne comprends pas ta question. Pour moi tu voulais avoir le formulaire en dessous du message d'erreur si quelqu'un avait validé avec un champ vide par exemple. Hors si quelqu'un valide le $_POST existera de toute facons, meme si la valeur est vide il est défini...
zut de flute!! merci pour le tuyau mais je vois pas comment faire bizarrement... pcq si je met
if (isset($_POST['submit'])) 
a la place de
if (!isset($_POST['submit'])) 
il ne m'afichera pas le formulaire
et a part en recopiant le code du formulaire apres chaque message d'erreur je vois rien d'autre en solution -_-'

Posté : 22 mai 2008, 15:13
par FredoMkb
Bonjour :)

Pour essayer d'y voir un peu plus clair, mystic666, tente de structurer un peu ton code... petite suggestion :

- Placer tout le traitement Php au-dessus du code Html
- Faire les "echo" dans la partie Html uniquement

Voici une structure basique :
<?php
// Traitements Php
$titrePage = 'Mon Super Site';
?>
<html>
<head>
<title><?php echo $titrePage; ?></title>
</head>
<body>
<!-- D'autres codes Html avec "echo" des variables Php -->
</body>
</html>
De cette manière tu pourras séparer un peu plus clairement ce qui est le calcul Php de ce qui concerne uniquement l'affichage...

Tu pourras par la même occasion résoudre plus facilement les problèmes d'affichage des différents éléments en utilisant des variables intermédiaires, un peu dans ce style :
<?php
// Traitements Php
$titrePage = 'Mon Super Site';
$error_nom = "Veuillez remplir le champ du Nom";
$error_pass = "Veuillez remplir le champ du Mot de Passe";
$error_vide = "Veuillez remplir tous les champs";
if ($_POST['nom'] == '' && $_POST['pass'] == '') { $error = $error_vide; }
elseif ($_POST['nom'] == '') { $error = $error_nom; }
elseif ($_POST['pass'] == '') { $error = $error_pass; }
else { $error = ""; }
?>
<html>
<head>
<title><?php echo $titrePage; ?></title>
</head>
<body>
<?php echo $error; ?>
<!-- La suite du code Html -->
</body>
</html>
Ici on prend une variable intermédiaire "$error" puis on lui affecte la bonne valeur, c'est à dire une des variables "$error_nom", "$error_pass" ou "$error_vide", suivant différents tests, il suffit d'afficher notre variable "$error" par un simple "echo" dans la partie Html pour avoir toujours le bon affichage...

Attention, tout ceci n'est qu'un petit exemple de méthode, les codes que je propose n'ont pas été testés, c'est donc juste pour s'en inspirer, c'est tout... ;)

à+ :)

Posté : 23 mai 2008, 12:49
par guilt92
zut de flute!! merci pour le tuyau mais je vois pas comment faire bizarrement... pcq si je met
if (isset($_POST['submit'])) 
a la place de
if (!isset($_POST['submit'])) 
il ne m'afichera pas le formulaire
et a part en recopiant le code du formulaire apres chaque message d'erreur je vois rien d'autre en solution -_-'
Ce que je ne comprend pas c'est pourquoi tu mets un if. Si dans tous les cas (que ca soit la 1ere tentative de login ou une autre) tu veux afficher le formulaire, alors pourquoi le conditionner par un if ?