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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2005
    Messages : 60
    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 éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 56
    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 averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2005
    Messages : 60
    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