IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Disparition inexpliquée des variables $_POST


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2005
    Messages : 60
    Points : 58
    Points
    58
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $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.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 56
    Points : 54
    Points
    54
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    include ("index.php");
    en clair remplace ton fichier index.php par ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2005
    Messages : 60
    Points : 58
    Points
    58
    Par défaut
    Salut, merci pour ta réponse, ça marche avec ta méthode. J'ai eu beau chercher, j'avais pas vu ça.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Sécurité des variables _POST
    Par zeushaolin dans le forum Flash
    Réponses: 3
    Dernier message: 24/05/2010, 22h10
  2. tableau des variables $_POST
    Par Alexdezark dans le forum Langage
    Réponses: 1
    Dernier message: 07/11/2008, 15h04
  3. Provenance des variables $_POST
    Par Linio dans le forum Langage
    Réponses: 5
    Dernier message: 23/10/2007, 19h48
  4. [RegEx] Ecrire une requete INSERT avec des variables $_POST
    Par arnaudperfect dans le forum Langage
    Réponses: 10
    Dernier message: 13/06/2007, 15h12
  5. Garder des variable $_POST
    Par highman dans le forum Langage
    Réponses: 3
    Dernier message: 12/05/2006, 14h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo