Précédent   Forum des professionnels en informatique > PHP > Langage > Formulaires
Formulaires Forum d'entraide sur les formulaires avec PHP. Avant de poster -> FAQ formulaires, Cours de formulaires et Sources de formulaires
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 04/09/2007, 17h44   #1
Membre du Club
 
Inscription : juin 2005
Messages : 60
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2005
Messages : 60
Points : 40
Points : 40
Par défaut Disparition inexpliquée des variables $_POST

Bonjour

Je cherche à faire une classe de login que je pourrais réutiliser sur plusieurs sites et en testant je suis tombé sur un problème que je n'arrive pas à résoudre. C'est très frustrant, j'en appelle à votre sagesse .

J'ai une page de login avec un formulaire :

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
<form action="" method="post" name="FormLogin" id="FormLogin" onSubmit="document.getElementById('MdpCode').value=SHA1(document.getElementById('Mdp').value);document.getElementById('Mdp').value='';" >
		<input name="MdpCode" id="MdpCode" type="hidden" value="0" >
		<table >
			<tr>
				<td colspan="3"><span style="color:#FF0000"><?php echo $MessageDErreur; ?></span></td>
			</tr>
			<tr>
				<td width="181"><div align="right">Login</div></td>
				<td width="8">&nbsp;</td>
				<td width="127">
					<input name="Log" type="text" id="Log" size="15" maxlength="15" />
				</td>
			</tr>
			<tr>
				<td><div align="right">Mot de passe </div></td>
				<td>&nbsp;</td>
				<td><input name="Mdp" type="password" id="Mdp" size="15" maxlength="15" /></td>
			</tr>
			<tr>
				<td colspan="3"><input name="BtValidLogin" type="submit" value="Valider" /></td>
			</tr>
 
		</table>
	</form>
Ce petit formulaire doit normalement me renvoyer un tableau de variables $_POST. Au submit du formulaire, on recharge la page avec ce code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
	session_start();
	print_r($_POST);
	$PageLogin=true;
	include("./scripts/debutexec.php");	
 
	$MessageDErreur="";
	if(isset($_POST["BtValidLogin"]))
	{
		if($Login->Login($_POST["Log"],$_POST["MdpCode"])) 
		{
			header("Location: index.php");
		}
		else
		{
			$MessageDErreur="Mauvais login ou mot de passe";
		}
	}
 
?>
Le fichier debutexec.php contient :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
 
	include("classlogin.php");
 
	if(!isset($_SESSION["plop"]))
	{ 
		$Login=new ClassLogin;
	}
	else
	{
		$Login=unserialize($_SESSION["plop"]);
	}
 
	if(!$Login->VerifLogge() && !isset($PageLogin)) 
	{
		header("Location: login.php");
	}
 
?>
et le fichier classlogin.php contient :
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
65
66
67
68
69
70
<?php
 
	abstract class BaseLogin
	{
		public $DroitsUtil=array();
 
		public $Connecte;
 
		public $IdUtil;
		public $LoginUtil;
		public $MailUtil;
		public $IP;
		public $DateHeureConnexion;
		public $DateHeureDernierePage;
 
		public function DetruireSession()
		{
			if(isset($_COOKIE[session_name()])) 
			{
				setcookie(session_name(), '',(time()-42000), '/');
			}	
			unset($_SESSION);
			session_destroy();
		}
 
	}
 
	class ClassLogin extends BaseLogin
	{		
		public function __construct()
		{ 
			$this->Connecte=false;
			$this->IdUtil=0;
			$this->LoginUtil="";
			$this->MailUtil="";
			$this->IP=$_SERVER['REMOTE_ADDR'];
			$this->DateHeureConnexion=0;
			$this->DateHeureDernierePage=0;
		}
 
		public function VerifLogge()
		{
			if($this->Connecte && $this->IdUtil!=0 && $_SERVER['REMOTE_ADDR']==$this->IP && (time()-$this->DateHeureDernierePage)<=1800)
			{
				$this->DateHeureDernierePage=time();
				return true;
			}
			else
			{
				return false;
			}
		}
 
		public function Login($Login, $Mdp)//$Login et $Mdp passés en POST, $Mdp crypté en SHA-1
		{
			//Ajouter addslashes si les magic quotes ne sont pas déjà activés dans php.ini
			$Login=htmlentities($Login);
 
			while(1==1)
			{
 
				return true;
 
				break;
			}
 
		}
	}
 
?>
mon problème est que la ligne renvoie sauf si je mets en commentaire la ligne
Code :
$Login=unserialize($_SESSION["plop"]);
J'ai donc l'impression qu'il y a un problème au niveau du unserialize d'un objet, mais ce qui est bizarre, c'est que si le unserialize devait vider le $_POST (ce qui est déjà bizarre), il ne devrait le faire que quand il est appelé. Or le simple fait que cette ligne soit présente dans le code suffit à vider mes $_POST.
Si quelqu'un a une idée de ce qui pourrait se passer, merci beaucoup d'avance parce que moi je sèche.
Nious99 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2007, 09h33   #2
Membre du Club
 
Inscription : juin 2007
Messages : 56
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 56
Points : 43
Points : 43
Bonjour

J'ai installé ton code et je crois avoir trouvé une piste.

Lorsque ton formulaire est envoyé tu inclus le code suivant pour le traitement des données :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
<?php
	session_start();
	print_r($_POST);
	$PageLogin=true;
	include("./debutexec.php");	
 
	$MessageDErreur="";
	if(isset($_POST["BtValidLogin"]))
	{
		if($Login->Login($_POST["Log"],$_POST["MdpCode"])) 
		{
			header("Location: index.php");
		}
		else
		{
			$MessageDErreur="Mauvais login ou mot de passe";
		}
	}
 
?>
Donc lors du traitement des données si tes champs sont renseignés , tu executes la ligne :
Code :
1
2
 
header("Location: index.php");
Cela a pour effet de te rediriger purement et simplement vers index.php dans lequel tu as perdu toutes tes variables $_POST.
A mon avis tu devrais utiliser plutot :
Code :
1
2
 
include ("index.php");
en clair remplace ton fichier index.php par ca :

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
 
<?php
	session_start();
	print_r($_POST);
	$PageLogin=true;
             include("./scripts/debutexec.php");	
 
	$MessageDErreur="";
	if(isset($_POST["BtValidLogin"]))
	{
		if($Login->Login($_POST["Log"],$_POST["MdpCode"])) 
		{
 
			// header("Location: index.php"); 
		}
		else
		{
			$MessageDErreur="Mauvais login ou mot de passe";
		}
	}
 
?>
 
 
<form action="" method="post" name="FormLogin" id="FormLogin" onSubmit="document.getElementById('MdpCode').value=SHA1(document.getElementById('Mdp').value);document.getElementById('Mdp').value='';" >
		<input name="MdpCode" id="MdpCode" type="hidden" value="0" >
		<table >
			<tr>
				<td colspan="3"><span style="color:#FF0000"><?php echo $MessageDErreur; ?></span></td>
			</tr>
			<tr>
				<td width="181"><div align="right">Login</div></td>
				<td width="8">&nbsp;</td>
				<td width="127">
					<input name="Log" type="text" id="Log" size="15" maxlength="15" />
				</td>
			</tr>
			<tr>
				<td><div align="right">Mot de passe </div></td>
				<td>&nbsp;</td>
				<td><input name="Mdp" type="password" id="Mdp" size="15" maxlength="15" /></td>
			</tr>
			<tr>
				<td colspan="3"><input name="BtValidLogin" type="submit" value="Valider" /></td>
			</tr>
 
		</table>
	</form>
Bon courage
jerome600 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2007, 15h19   #3
Membre du Club
 
Inscription : juin 2005
Messages : 60
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2005
Messages : 60
Points : 40
Points : 40
Salut, merci pour ta réponse, ça marche avec ta méthode. J'ai eu beau chercher, j'avais pas vu ça.
Nious99 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 09h30.


 
 
 
 
Partenaires

Hébergement Web