Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/01/2011, 18h24   #1
Membre confirmé
 
Inscription : mars 2003
Messages : 674
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 674
Points : 242
Points : 242
Par défaut Message qui s'affiche avec retard

Bonjour,

J'ai un petit problème d'affichage.
Mon site contient 4 Div: 1 div pour le haut, 1 div gauche, 1 div droit et 1 div conteneur
Le loggin se fait à l'intérieur de la div conteneur.
Quand la personne valide, si le loggin est ok je mets un message dans la div conteneur comme quoi la personne est connectée.
Le message qui s'affiche dans la Div gauche est :
"Bonjour XXX"
"Déconnexion"

Mon soucis c'est que ce message dans la Div gauche n'apparaît que lorsque je clique sur un autre lien du site au lieu de s'afficher en même temps que celui de la Div conteneur.

Comment je peux faire pour qu'il s'affiche quand on valide le loggin?

la page où se trouve le formulaire de loggin
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 
if ((isset($_POST['mail'])) && (isset($_POST['pass']))){
	$pass1= sha1($_POST['pass']);
	$sql = mysql_query("SELECT id_proprio, civilite, nom, prenom, mail, pass FROM proprietaires WHERE mail LIKE '%$mail%' AND pass LIKE '%$pass1%'");
	if (mysql_num_rows($sql) > 0){
		$res = mysql_fetch_array($sql);
	   	$id_proprio = $res['id_proprio'];
	   	$civilite = $res['civilite'];
	   	$nom = $res['nom'];	
	   	$prenom = $res['prenom'];
	   	$mail = $res['mail'];
	   	$_SESSION['id_proprio'] = $id_proprio;
	   	$_SESSION['nom'] = $nom;
	   	$_SESSION['prenom'] = $prenom;
		if ($civilite == 'M'){
			$message2 = "Bonjour $prenom  vous êtes connecté";
		}
		else {
			$message2 = "Bonjour $prenom  vous êtes connectée";
		}
	}
	else {
		$message1 = "Adresse ou mot de passe invalide</span>";
	}
}
?>
<form name="identite" method="POST" action="index.php?page=axL134Ph82z">
<table border =0 style="border:0px grey solid;font-size:11px; width:255px;height:160px;background-color:#FCFCFC" cellspacing="0" cellpadding="0">
	<tr height="30px"><td colspan=2 align="center" style="font-weight:bold;color:olive">Déjà inscrit ? Identifiez-vous</td>
	</tr>
	<tr height="30px"><td align="right">Votre mail : </td><td>&nbsp;<input type="text" name="mail" value="<?php echo $mail;?>" style="width:150px" class="input"></td>
	</tr>
	<tr height="30px"><td align="right">Mot de passe : </td><td>&nbsp;<input type="password" name="pass" value="<?php echo $pass;?>" style="width:80px" class="input"></td>
	</tr>
	<tr height="10px"></tr><td></td><td></td>
	<tr height="35px"><td colspan=2 align="center"><input type="submit" name="identity" value="valider" style="font-size:12px;width:100px"></td>
	</tr>
	<tr height="30px"><td colspan=2 align="center">
			<?php if (!empty($message1)){ echo "<span style='color:red;font-weight:bold'>$message1</span>";}?>
			<?php if (!empty($message2)){ echo "<span style='color:blue;font-weight:bold'>$message2</span>";}?></td>
	</tr>
</table>
<p align="center">
</form>
la Div gauche
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<table style="border:1px grey solid;font-size:12px; width:150px;height:600px" cellspacing="0" cellpadding="0">
	<colgroup width="155px"></colgroup>
	<?php
	if (isset($_SESSION['prenom'])) { 
		echo "<tr><td>&nbsp;Bonjour <span style='font-family:verdana;font-weight:bold'>"; echo $_SESSION['prenom']; echo "</span>";
		echo"<br />&nbsp;&nbsp;<a href=index.php?deconnexion>d&eacute;connexion</a></td></tr>";
	}?>
	<tr>
		<td>&nbsp;Annonceurs : <br /><span style="margin-left:10px"><a href="index.php?page=axL134Ph82z">Accédez à votre espace</a></span></td>
	</tr>
	<tr>
		<td>&nbsp;Pas inscrit ? Cliquez <span style="font-weight:bold"><a href="index.php?page=identity">ICI</a></span></td>
	</tr>
</table>
J'espère que j'ai été clair
Merci d'avance
philippef est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2011, 19h22   #2
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 706
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 706
Points : 3 274
Points : 3 274
Salut

A mon avis, et sauf erreur, le problème viendrait dans la chronologie, le déroulement des traitements, du code en somme.

En faite, et dans le déroulement, le bloc de gauche étant effectué avant celui du centre (formulaire du login), du coup, à ce moment là on ne sait pas encore que l'identification est faite, donc les variables de sessions pas encore initialisées.
Ces variables le seront qu'au moment où le script du conteneur central seront exécutées.


Si c'est réellement ce problème, le conseil que je te donnerais, c'est de vraiment séparer les traitements et la couche présentation (interface).

Dans les traitements (le plus gros morceau), c'est :
Vérifications des données (GET,POST, ...), mise à jour des données (Bdd, fichiers, session, etc ...), récupérations des données (Bdd, session, xml, text, etc ...), etc, etc ...

Pour la partie interface, le HTML, ce serait à faire en tout dernier, mais vraiment en dernier, et ça commence par le DOCTYPE, balise <html> etc ...

En résumer, ce n'est que lorsqu'on aura obtenu tous les éléments nécessaires à la création de l'interface qu'on s'occupera de celle ci.

En procédant ainsi, tu pourras faire bien plus que prévu, et surtout ne plus rencontrer ces problèmes de déroulement (ou presque).
Le seul inconvénient, c'est que ça consomme un peu plus de mémoire, car ceci demande souvent à stocker les éléments au préalable, mais ça reste néanmoins très minime comparé aux avantages.


En tout cas, je remarque qu'actuellement tous les traitements sont effectués à l'endroit même où le code HTML doit être généré.

Mais avec Php, on peu faire bien mieux que ça, faut juste concevoir les choses un peu différemment.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2011, 17h32   #3
Membre confirmé
 
Inscription : mars 2003
Messages : 674
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 674
Points : 242
Points : 242
Bonjour,

Merci RunCodePhp pour ces précisions.

Si j'ai bien compris j'ai 3 solutions :
1) je mets dans la div gauche le formulaire du loggin avec sa validation et son message "bonjour xx" et "déconnexion"
2) sur ma page index je modifie l'ordre d'affichage donc de traitement des div en mettant div haut, div conteneur, div gauche et div droit
3) je mets le message dans la div droite.

Je vais essayer la 3ème solution qui est la plus simple et je reviens.

Merci encore
philippef est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 09h07   #4
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 706
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 706
Points : 3 274
Points : 3 274
Il ne me semble pas avoir évoqué 3 solutions, mais 1 seule

Tout est dans le déroulement du script Php, de concevoir les choses un peu différemment, et ça se résume à séparer les traitement pure (à faire en 1er) et la couche présentation qui est la partie Html (à faire en tout dernier).


Pour exemple, ça pourrait ce faire ainsi (index.php, la page d'accueil) :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
 
<?php
// On déclare le tableau messagerie
$message = array();
 
// On vérifie dès le début si une identification a été faite
if ((isset($_POST['mail'])) && (isset($_POST['pass']))) {
    ... code etc ...
    if (mysql_num_rows($sql) > 0){
        if ($civilite == 'M'){
            $message[] = "Bonjour $prenom  vous êtes connecté";
        }
        else {
            $message[] = "Bonjour $prenom  vous êtes connectée";
        }
    }
    else {
        $message[] = "Adresse ou mot de passe invalide";
    }
 
}
?>
 
 
<DOCTYPE ....>
<html>
<head>
    <title>ACCUEIL</title>
</head>
 
<body>
 
<!-- ENTETE -->
<div></div>
 
<!-- GAUCHE -->
<div>
<?php
if (isset($_SESSION['nom'])) {
    echo 'Bonjour '.$_SESSION['nom'];
}
?>
</div>
 
<!-- CENTRALE -->
<div>
    <form ...>
    ... code etc ...
<?php
// Affichage des messages/infos si tel est le cas
if (!empty($message)) {
    foreach ($message as $msg) {
        echo '<p>'.$msg.'</p>';
    }
}
?>
    </form>
</div>
 
<!-- DROITE -->
<div></div>
 
</body>
</html>
Ici, les traitements, comme la vérification de l'identification est faite en tout 1er, bien avant le moindre code HTML, du coup, ceci permettra de faire ce qu'on veut avec les éventuels messages (d'erreur, ou info), comme les placer dans la partie interface là ou on veut.

Il faut juste prévoir le coup, comme déclarer/initialiser les données au début afin d'éviter des erreurs (genre variables/tableaux inexistants au niveau de la partie HTML).

En tout cas, et pour exemple, il ne faut pas perdre de vu que toutes les données comme $_GET, $_POST, $_COOKIE sont disponibles dès la 1er ligne de code de la page.
On a donc tout intérêt à les exploiter au plus tôt.


Bref, tout est une question d'organisation, et en adoptant ne serait-ce que ce principe qui reste simple, je t'assure que tu y gagneras beaucoup plus que tu ne le pense.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 15h19   #5
Membre confirmé
 
Inscription : mars 2003
Messages : 674
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 674
Points : 242
Points : 242
Merci RunCodePhp pour ta patience passée et à venir

J'ai compris le principe, seulement le formulaire de loggin se trouve sur une page log.php et non sur la page index.
Je ne vois donc pas comment faire sans passer par javascript (ce que je n'ai tellement envie de faire) ou par l'url mais dans ce cas comment récurépérer les valeurs des post "mail" et "pass" sans qu'elles soient en clair.
La div centrale sert à afficher les différentes pages appelées
philippef est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 15h58   #6
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 706
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 706
Points : 3 274
Points : 3 274
Citation:
J'ai compris le principe, seulement le formulaire de loggin se trouve sur une page log.php et non sur la page index.
Ca n'a aucune importance.

Le nom de la personne une fois identifiée se trouvera dans la session, donc comme le but des sessions c'est de conserver des données tout au long de la navigation, et bien si le texte (bonjours Mr/Mme XXX) ce trouve uniquement dans le index, et bien ça sera affiché si la personne revient à cette page.
Vois tu ?

Citation:
Je ne vois donc pas comment faire sans passer par javascript (ce que je n'ai tellement envie de faire) ou par l'url mais dans ce cas comment récurépérer les valeurs des post "mail" et "pass" sans qu'elles soient en clair.
Je ne vois pas le rapport avec Javascript.
Pour ma part pour JS, et dans l'absolu on en n'a pas du tout besoin pour faire une identification, Php seul peu très bien suffire.

Pour ce qui est que que les données soient en clair, faut pas faire de confusions.
Que ce soit en GET ou POST coté formulaire, les données transiteront toujours en clair, à part mettre du SSL.
Le faire en JS, et bien on dira ce qu'on voudra, c'est un pis allé car JS c'est coté client donc forcément visible (en tout cas pour un pirate ça le sera).
On veut que les données soient cryptées, et bien c'est du SSL qu'il faut.

La seule différence, c'est qu'en GET les données seront affichées dans la barre d'adresses (mais aussi stockées dans l'historique du navigateur), alors qu'en POST ça ne le sera pas (et pas d'historiques aussi).
Mais encore une fois, les données transiteront en claire sur le Net, sur le réseau.
Pour une identification, le faire en POST s'impose à mon sens.


Si le formulaire ce trouve dans log.php, et bien reprend le même principe que j'ai mis précédemment, il n'y pas grand chose qui change à mon avis.
Par contre, et en admettant qu'au bout de cette identification on souhaite rediriger le visiteur vers une autre page, genre la page d'accueil, et bien pour faire ça il faut faire un truc du genre : (fonction header())
Code :
1
2
3
4
5
6
7
8
9
10
 
// On vérifie dès le début si une identification a été faite
if ((isset($_POST['mail'])) && (isset($_POST['pass']))) {
 
    ... toutes les vérif, récup des donnés dans la Bdd ...
    .... et aussi initialiser la session (id, nom, etc ...) ...
 
    header('Location: /index.php');
    exit();
}
Le formulaire pointe sur lui même (donc dans le action du <form> c'est toujours log.php), puis si l'identification est correcte (et uniquement dans ce cas là), on proposera un autre contenu (le index.php).
En quelque sorte on redirige vers une autre page (même si le terme n'est vraiment exacte).

Ensuite, au niveau de l'index.php, partie ou le nom doit s'afficher, une simple vérif sur l'existence de $_SESSION['nom'] doit suffire, ce qui est déjà fait d'ailleurs.


En bref, je ne vois pas vraiment ce qui te pose problème.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 17h44   #7
Membre confirmé
 
Inscription : mars 2003
Messages : 674
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 674
Points : 242
Points : 242
J'avais mis le test isset du mail et du mot du mot de pass dans la page index mais je n'avais rien.
Je vais donc reprendre tout ça...

Merci encore
philippef est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 16h43   #8
Membre confirmé
 
Inscription : mars 2003
Messages : 674
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 674
Points : 242
Points : 242
Bonjour,

Pour le moment tout marche comme je veux!!

Grand merci RunCodePhp car c'est la 1ère fois qu'on me donne ces conseils et comme je fais ça en autodidacte, je n'avais pas vu ça dans les bouquins.

Sauf si j'ai mal regardé dans les tutos, ces conseils méritent d'y figurer.
philippef est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h05.


 
 
 
 
Partenaires

Hébergement Web