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 :

tab[] = "mail", echo tab[] me renvoit "1ail"


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 99
    Points : 62
    Points
    62
    Par défaut tab[] = "mail", echo tab[] me renvoit "1ail"
    Salut à tous,

    je tente de construire un systeme de login (ou le login est l'email) pour un site et afin de proteger contre des tentatives de craquage du mot de passe j'ai voulu limiter à 3 essais.

    Pour résumé, le visiteur entre un email et un mdp , si il y a un probleme je cré une variable de session $_SESSION['ProtectAccount']
    dans $_SESSION['ProtectAccount']['mails'][$keyMails] je met l'email que le visiteur a entré
    et dans $_SESSION['ProtectAccount']['mails'][$keyMails]['count'] le nombre de tentative deja faite pour se logger sur l'email.
    De maniere a ce que le visiteur lors d'une meme session ne puisse faire que 3 essais max par email (le nombre d'email tenté n'est pas limité)

    Le ros souci que j'ai c'est que lors des test quand je fais $_SESSION['ProtectAccount']['mails'][$keyMails] = $email , où $email = 'eilijah@mail.com', il m'enregistre '1ilijah@mail.com' dans le tableau, je sais pas du tout pourquoi il me change la premiere lettre en '1' ?!

    Je me disais que c'etait peut etre parce que $_SESSION['ProtectAccount']['mails'][$keyMails] est en string et $_SESSION['ProtectAccount']['mails'][$keyMails]['count'] est en integer, ca le fait peut etre bugger?


    voila le code, c'est un peu long désolé :/ :

    Code index.php : 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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    <?php
    session_start (); 
     
    // tests de debugage >> affichage des variables 
    echo '$email = '.$_SESSION['Cquoicbordel1']."<br />"
    	.'$_SESSION[\'ProtectAccount\'][\'mails\'][$nextKey] = '.$_SESSION['Cquoicbordel2']."<br />"
    	.'$_SESSION[\'keyMail\'] = '.$_SESSION['keyMail']."<br/>"
    	.'$_SESSION[\'ProtectAccount\'][\'mails\'][$_SESSION[\'keyMail\']] = '.$_SESSION['ProtectAccount']['mails'][$_SESSION['keyMail']]."<br/>"
    	.' = '."<br/>"
    	.' = '."<br/>"
    	.' = '."<br/>";
     
    print_r($_SESSION['ProtectAccount']);
    echo "<br />";
    print_r($_SESSION['ProtectAccount']['mails'][$_SESSION['keyMail']]['count']);
    //fin test
     
    //Variables par defaut : 
    $pageHeader = "header.view.php" ;
    $pageBody = "body.view.php" ;
    $pageFooter = "footer.view.php" ;
    $pageStyle = "../public/css/style.css";
    settype($_ENV['blacklist'], "array");
     
    //------------------------------------------------------------------------------------------------------------------//
    //----------------------------------------- User isn't logged --------------------------------------------------//
     
     
    if (!isset($_SESSION['userId']) || $_SESSION["userId"] == "")
    	{
    	if (ereg("logout.php$", $_SERVER['HTTP_REFERER']) && !isset($_SESSION['userId']))  
    		{ 
    		$sMessages[]="merci, vous êtes maintenant déconnecté"; 
    		} 
     
    	if (isset($_SESSION['existingEmail']) && !empty($_SESSION['existingEmail']))
    		{
    		$_POST['login'] = $_SESSION['existingEmail'];
    		$sMessages[]="Le compte lié à cet email existe déjà !";
    		unset($_SESSION['existingEmail']);
    		}
     
    	if (isset($_SESSION['emailedPass']) && $_SESSION['emailedPass'] == true)
    		{
    		$sMessages[]="L'inscription s'est bien déroulée, vous allez recevoir votre mot de passe à l'adresse email que vous avez indiqué";
    		unset($_SESSION['emailedPass']);
    		}
        elseif (isset($_SESSION['emailedPass']))
    		{
    		$sMessages[]="Nous n'avons pas pu réinitialiser le mot de passe, une erreure s'est produite, contactez le webmaster pour plus de details.";
    		unset($_SESSION['emailedPass']);
    		}
     
    	if (isset($_SESSION['pbLogin']) && $_SESSION['pbLogin'] == 1)
    		{
    		$sMessages[]="Attention, vous devez remplir les 2 champs";
    		unset($_SESSION['pbLogin']);
    		}		
     
    	if (isset($_SESSION['badLogin']) && $_SESSION['badLogin'] == 1)
    		{
    		$sMessages[]="L'email que vous avez entrée n'existe pour aucun compte, veuillez la vérifier svp";
    		$_POST['login'] = $_SESSION['badLoginEmail'];
    		unset($_SESSION['badLogin']);
    		}
     
    	if (isset($_SESSION['badEmail']) && $_SESSION['badEmail'] == 1)
    		{
    		$sMessages[]="Vous devez entrer un email valide";
    		unset($_SESSION['badEmail']);
    		}
    	if (isset($_SESSION['ProtectAccount']['mails'][$_SESSION['keyMail']]['count']) 
    		&& $_SESSION['ProtectAccount']['mails'][$_SESSION['keyMail']]['count'] >= 0 
    		&& $_SESSION['ProtectAccount']['mails'][$_SESSION['keyMail']]['count'] < 3)
    		{
    		$tries = 5 - $_SESSION['ProtectAccount']['mails'][$_SESSION['keyMail']]['count'];
    		$sMessages[]="Mauvais mot de passe, vous avez encore $tries tentatives";
    		}	
    	elseif (isset($_SESSION['ProtectAccount']['mails'][$_SESSION['keyMail']]['count']) 
    			&& $_SESSION['ProtectAccount']['mails'][$_SESSION['keyMail']]['count'] >= 3)
    		{
    		$sMessages[]="Le mot de passe à été réinitialisé, vérifier votre boite email pour le récupérer";
    		unset($_SESSION['badPass']);
    		}
    	elseif (isset($_SESSION['ProtectAccount']['mails'][$_SESSION['keyMail']]['count']) 
    			&& $_SESSION['ProtectAccount']['mails'][$_SESSION['keyMail']]['count'] == -1)
    		{
    		$sMessages[]="Le mot de passe à été réinitialisé, cependant il semble y avoir eut une erreure lors de 
    			l'envoi de l'email<br />
    			Veuillez contacter l'administrateur pour résoudre ce problème.";
    		unset($_SESSION['badPass']);
    		}
     
    	if (in_array($_SERVER['REMOTE_ADDR'], $_ENV['blacklist']))
    		{
    		$sMessages[]="Vous avez fait trop de tentatives, vous devez attendre 12 heures pour vous reloguer";
    		}
    	else
    		{
    		$pageHeader = "header.view.php";
    		$pageBody = "identification.view.php";
    		}//else => in_array($_SERVER['REMOTE_ADDR'], $_ENV[blacklist])) == false
    	}//if (!isset($_SESSION['userId']) || $_SESSION["userId"] == "")
     
     
     
    //------------------------------------------------------------------------------------------------------------------//
    //-------------------------------------------- User is logged --------------------------------------------------//
     
     
    else //(isset($_SESSION['userId']) || $_SESSION["userId"] != "")
    	{
    	if (empty($_GET))
    		{
    		$pageBody = "usersHome.view.php";
    		}
    	else
    		{
    		foreach ($_GET as $key => $value)
    			{
    			if ($key == "module")
    				{
    				$pageBody = $value.".view.php";
    				}
    			}
    		}
    	}
     
    include_once "./views/main.template.php";	
     
    ?>

    Code login.php : 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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
     
    <?php
    session_start (); 
     
    include_once "constants.php";
    include_once "functions.php";
     
    if($_POST["login"] != "" && $_POST["pass"] != "")
    	{
    	if (validateEmail($_POST["login"]))
    		{
    		$email = $_POST["login"] ;
     
    		$mysqlConnexion = mysql_connect(M_SERVEUR, M_LOGIN, M_PASS) or die('Could not connect to mysql server.<br />'.mysql_error()) ;
    	  	$dbConnexion  = mysql_select_db(M_DB,$mysqlConnexion) or die('Could not select database.<br />'.mysql_error());	  	
     
      	  	$query = "SELECT * FROM `users` WHERE `email` = '$email' ";
    	  	$result = @mysql_query($query, $mysqlConnexion) or die ($query."<br />".mysql_error()) ;
    		if	(mysql_num_rows($result)== 1)
    			{
    			$aEntry = mysql_fetch_array($result) or die(mysql_error());
    			$hash = niceHash($_POST["pass"],$email);
    			if ($hash == $aEntry['pass'])
    				{
    				$_SESSION['userId'] = $aEntry['id'];
    				$url = getParentDir(basename(__FILE__))."index.php";
    				header('location:'.$url);
    				}
    			else
    				{
    				ob_start("mail");
    				if (isset ($_SESSION['ProtectAccount']))
    					{
    					$nextKey = 0;
    					foreach($_SESSION['ProtectAccount']['mails'] as $keyMails => $valueMails)	
    						{
    						$nextKey++;	//compteur de clé
    						if($valueMails == $email)
    							{
    							$_SESSION['keyMail'] = $keyMails;
    							if($_SESSION['ProtectAccount']['mails'][$keyMails]['count'] < 2 && $_SESSION['ProtectAccount']['mails'][$keyMails]['count'] >= 0)
    								$_SESSION['ProtectAccount']['mails'][$keyMails]['count']++;
     
    							elseif($_SESSION['ProtectAccount']['mails'][$keyMails]['count'] >= 2)
    								{
    								$_SESSION['ProtectAccount']['mails'][$keyMails]['count']++;
    								//$_ENV['blacklist'][] = $_SERVER['REMOTE_ADDR'] ;
    								$pass = generatePass(10);
    								$hash = niceHash($pass,$email);
    				 				$query = "UPDATE `users` SET `pass` ='$hash' WHERE `id` =' ".$aEntry['id']." ' ";
    	  							$update = @mysql_query($query, $mysqlConnexion) or die ($query."<br />".mysql_error()) ;
    								if($update)
    									{
    									//envoi du mot de passe par email
    	  								$messageTxt = "Bonjour ! \n" 
    	 									."Quelqu'un a tenté de se connecter a votre compte et s'est trompé 3 fois,\n"
    	 									."Par mesure de sécurité nous réactualisaons donc votre mot de passe.\n"  
    	  									."Votre nouveau mot de passe : $pass";
    	  								$messageHtml = "<h1>Bonjour !</h1> <br />
    	 									Quelqu'un a tenté de se connecter a votre compte et s'est trompé 3  fois,<br />
    	 									Par mesure de sécurité nous réactualisaons donc votre mot de passe.<br />   
    	  									Votre nouveau mot de passe : $pass";
    	  								$from = "utopiste@esprits-libres.fr";
    	 								$envoye = theEmail($email, MAIL_FROM_NAME, MAIL_FROM_MAIL, MAIL_REPLY_MAIL, 'Esprits-libres', $messageTxt, $messageHtml);
    	 								if($envoye == false)	
    	  									{
    	 				 					$_SESSION['ProtectAccount']['mails'][$keyMails]['count'] = -1;	
    	  									}
    									}
    								}
    							}
    						else //$valueMails != $email
    							$_SESSION['keyMail'] = -1;
    						}
    					if ($_SESSION['keyMail'] == -1)// c'est la premiere fois que la session tente de se connecter au compte de cet email
    						{
    						$_SESSION['Cquoicbordel1'] = $email;
    						$_SESSION['ProtectAccount']['mails'][$nextKey] = $email;
    						$_SESSION['Cquoicbordel2'] = $_SESSION['ProtectAccount']['mails'][$nextKey];
    						$_SESSION['ProtectAccount']['mails'][$nextKey]['count'] = 1;
    						$_SESSION['keyMail'] = $nextKey;
    						}
    					}
    				else // !isset ($_SESSION['ProtectAccount'])
    					{
    					$_SESSION['ProtectAccount'] = array();
    					$_SESSION['ProtectAccount']['mails'][0] = $email;
    					$_SESSION['ProtectAccount']['mails'][0]['count'] = 1;
    					$_SESSION['keyMail'] = 0;
    					}// fin du test anti forcebrut
    				$url = getParentDir(basename(__FILE__))."index.php";
    				header("Refresh: 0; url=$url");	
    				ob_end_flush();
    				}// else mot de passe entré != du mot de passe de la bd
    			}// if	(mysql_num_rows($result)== 1)
    		else // le login n'existe pas dans la Base
    			{
    			$_SESSION['badLogin'] = 1;
    			$_SESSION['badLoginEmail'] = $email;
    			$url = getParentDir(basename(__FILE__))."index.php";
    			header('location:'.$url);	
    			}
    	  	mysql_close();
    		}//if (validateEmail($_POST["login"]))
    	else //!validateEmail($_POST["login"])
    		{
    		$_SESSION['badEmail'] = 1;
    		$url = getParentDir(basename(__FILE__))."index.php";
    		header('location:'.$url);
    		}
    	}//if($_POST["login"] != "" && $_POST["pass"] != "")
    else //$_POST["login"] == "" || $_POST["pass"] == ""
    	{
    	$_SESSION['pbLogin']=1;
    	$url = getParentDir(basename(__FILE__))."index.php";
    	header('location:'.$url);
    	}
     
    ?>

    Code vue du formulaire : 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
    <form action="login.php" method="post">
    	<p>
    		<label for="login">Veuillez taper votre email :</label>
    		<input type="text" id="login" name="login" value="<?php echo htmlentities($_POST['login']);?>" />
    	</p>	
     
    	<p>
    		<label for="pass">Tapez votre mot de passe :</label>
    		<input type="password" id="pass" name="pass" value="<?php echo htmlentities($_POST['pass']);?>" />
    	</p>
     
    	<p>
    	<input type="submit" value="Envoyez" />
    	</p>
    </form>
     
    <p>
    <a href="suscribing.php">S'inscrire</a>
    </p>
     
    <p>
    <a href="getPass.php">Récupérer son mot de passe</a>
    </p>


    Il y a pas mal de code et c'est peut etre pas indenté comme vous avez l'habitude mais bon si vous pouvez jeter un oeil, parce que vraiment je capte pas et ca m'enerve qu'il change des caractere dans mes variable sans que je sache pourquoi.

    en passant au début j'ai egalement récupéré l'ip du visiteur dans $_SESSION['ProtectAccount']['ip'] et là il me remplacé le premier chiffre par une lettre!!!
    genre $_SESSION['ProtectAccount']['ip'] = 111.111.111.111, l'echo renvoit "e11.111.111.111".

    Fin'bref je comprend pas ce qu'il se passe.

    si jamais vous avez des reflexions a faire sur le code qui ne concerne pas ce probleme , elles sont les bienvenue egalement

  2. #2
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Points : 2 557
    Points
    2 557
    Par défaut
    Essai un fichier tout simple :
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $_SESSION['ProtectAccount']['mails'][0] = "cetaitpasloin@fai.fr";
    $_SESSION['ProtectAccount']['mails'][0]['count'] = 1;
    echo '<pre>';
    print_r($_SESSION);
    Puis un autre avec ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $_SESSION['ProtectAccount']['mails'][0]['mail'] = "cetaitpasloin@fai.fr";
    $_SESSION['ProtectAccount']['mails'][0]['count'] = 1;
    echo '<pre>';
    print_r($_SESSION);
    Et voila ton erreur

    Bonne journée.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 99
    Points : 62
    Points
    62
    Par défaut
    recu 5 sur 5, je crois que je suis pas au point avec les tableaux :X

    Merci maxoo !

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/02/2013, 10h34
  2. Afficher double quote " dans un echo
    Par Xenon03 dans le forum Langage
    Réponses: 3
    Dernier message: 02/09/2009, 10h36
  3. struts-layout tabs inclut dans un autre tabs
    Par david06600 dans le forum Struts 1
    Réponses: 1
    Dernier message: 15/09/2006, 16h08

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