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 :

Aidez-moi à corriger mon Code pour vérifier les informations d'un Utilisateur avant de changer son Pass ?


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 452
    Points : 66
    Points
    66
    Par défaut Aidez-moi à corriger mon Code pour vérifier les informations d'un Utilisateur avant de changer son Pass ?
    Bonjour.

    Mon code étant très brouillon, mon but est de permettre à un utilisateur de réinitialiser son Password une fois qu'il l'as oublié.

    Pour cela, j'ai créé 2 fonctions initiateChangePass et doResetPassword. La seconde se déclenche (sinon doit se déclencher) à partir de la première.

    D'abord dans la 1ère fonction, j'ai créé à la ligne 8 de mon code PHP, la variable $change_pass qui récupère les informations entrées par l'Utilisateur dans le Formulaire HTML en Tableau.

    Cette variable $change_pass est ensuite appelée dans la 2ème fonction (ligne 36) avec la fonction extract pour une première vérification ce qui fini par un exite() à la ligne 40.
    Maintenant de la ligne 43 jusqu'à la fin, c'est là que j'ai écris du n'importe quoi sans savoir si cela est correcte et si cela peut vraiment m'aider ) vérifier dans un premier temps si les informations accno et acctype entrées par l'Utilisateur sont correctes et sont vraiment disponible dans la Base de données (ligne 43 - 66).

    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    <?php
    function initiateChangePass()
    {	
    	$accno 	= (int)$_POST['accno'];
    	$type 	= $_POST['acctype'];
        $pwd 	= $_POST['password']; // MP en clair
     
    	$change_pass = array(
    		'acc_no' 	=> $acc_no, 
    		'acc_type' 	=> $type,
    		'pass_wd' 	=> $pwd
    	);
     
    	//now setting the temp array into session so we can use it later...
    	$_SESSION['change_pass'] = $change_pass;
    	//generate and send token
    	$tokenPass = rand(100000, 9999999);
    	$tokenPass = strlen($tokenPass) != 6 ? substr($tokenPass, 0, 6) : $tokenPass;
    	$_SESSION['otp_tokenpass'] = $tokenPass;
     
    	//email it now.	
    	$subject = "Email Verification Code";
    	$to = $_SESSION['hlbank_user']['email'];
    	$mail_data = array('to' => $to, 'sub' => $subject, 'msg' => 'otppass', 'tokenpass' => $tokenPass);
    	send_email($mail_data);
    	header('Location: index.php?v=rptoken');
    	exit();
    }
     
    function doResetPassword() 
    {
    	$tokenPass = (int)$_POST['tokenpass'];
    	$s_tokenpass = (int)$_SESSION['otp_tokenpass'];
     
    	if($s_tokenpass == $tokenPass) {
    		extract($_SESSION['change_pass']);
    	}	
    	else {
    		header('Location: index.php?v=changepass&msg=' . urlencode('Verification Code in not valid.'));
    		exit();
    	}
     
    	$id		= $_POST['id'];
    	$accno 	= (int)$_POST['accno'];
    	$type 	= $_POST['acctype'];	
        $pwd 	= $_POST['password']; // clair
     
    	$pwd_hash = hash('sha512',$pwd); // hash512
     
    	$errorMessage = '';
     
    	$sql_st = 'SELECT u.fname, u.lname, u.email, u.is_active, u.phone,
    			a.acc_no, a.user_id, a.pin, a.type, a.status,
    			ad.address, ad.city, ad.state, ad.zipcode
    			FROM tbl_users u, tbl_accounts a, tbl_address ad
    			WHERE a.acc_no = ? AND u.pwd = ?
    			AND u.id = a.user_id AND ad.user_id = u.id AND u.is_active != ?';
    	$result = dbQuery($sql_st,$accno,$type,"FALSE"); 
     
    	if (dbNumRows($result) == 1) {
    		$row = dbFetchAssoc($result); 
    		$_SESSION['hlbank_tmp'] = $row;
    		$_SESSION['hlbank_user_name'] =	strtoupper( $row['fname'].' '.$row['lname']);
    		$sql	= "UPDATE tbl_users SET pwd = ? WHERE id = ?"; 
     
    		$result = dbQuery($sql,$pwd_hash,$id);
     
    		$subject = "Password changed";
    		$to = $_SESSION['hlbank_user']['email'];
    		// dans le mail on envoie bien le $pwd soit MDP en clair
    		$mail_data = array('to' => $to, 'sub' => $subject, 'msg' => 'change_pwd', 'pwd' => $pwd);
    		send_email($mail_data);
     
    			//email details...
    			header('Location: index.php?v=changepass&success=' . urlencode('Password successfully changed.'));	
    			exit();
    	}
    	else {
    		$errorMessage = 'Not valid account number or password or Account is not Active. Please try again or contact to support.';
    	}
    	return $errorMessage;
    }
    ?>
    1 - Alors j'aimerais savoir exactement si ma manière de procéder en vérifiant si ces données entrées par l'Utilisateur (ligne 60) est correcte ???
    Sinon, veuillez me corriger svp.

    2 - J'aimerais aussi savoir si la mise à jour avec UPDATE (ligne 64) précédé des ligne ci-dessus est correcte ??? Sinon, svp veuillez me corriger.

    NB: Je précise que ceci est un exercice. Donc j'ai fais ce que je pouvais voilà pourquoi je sollicite maintenant votre aide n'étant pas du tout sûr de ce que j'ai fait.
    Alors, aidez-moi svp.

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Il nous manque le formulaire qui alimente la 2e fonction, mais on va essayer de faire sans.

    Tu as un problème de conception : tu ne peux pas faire une recherche en utilisant le mot de passe, puisque ton utilisateur l'a oublié. Là tu fais la recherche avec le nouveau mot de passe alors que c'est l'ancien (oublié) qui est dans la base. Retire la condition sur le mot de passe dans ta requête.

    En revanche, ce que tu peux faire, c'est stocker le token que tu génères pour l'envoi du mail en base et l'ajouter à la condition.

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 452
    Points : 66
    Points
    66
    Par défaut
    Déjà merci Celira pour ta réponse.
    Mais je ne comprends pas très bien tout ce que tu m'explique. Je crois que je comprendrais mieux à travers des lignes de code.

    En attendant, voici le code du formulaire HTML corresponde:

    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
    71
    72
    73
    74
    <form action="<?php echo WEB_ROOT; ?>view/process.php?action=changepass" method="post" enctype="multipart/form-data" id="acclogin">
          <h2 align="center">Log in to Reset your Password</h2>
          <p align="center">Enter Your Account Details to change your password</p>
    	  <div class="errorMessage" align="center"><?php echo $errorMessage; ?></div>
           <table width="450" border="0" align="center" cellpadding="5" cellspacing="1" bgcolor="#336699" class="entryTable">
            <tr id="entryTableHeader"> 
             <td><div align="center">Account informations</div></td>
            </tr>
            <tr> 
             <td class="contentArea"> 
     
    		  <table width="100%" border="0" cellpadding="2" cellspacing="1" class="text">
               <tr> 
                <td colspan="3">&nbsp;</td>
               </tr>
               <tr class="text"> 
                <td width="100" align="right">Account No</td>
                <td width="10" >:</td>
                <td>
    			<span id="sprytextfield1" style="text-align:left;">
                <input name="accno" type="text" tabindex="10" size="30" maxlength="30" />
                <br/>
                <span class="textfieldRequiredMsg">Account Number is required.</span>
    			<span class="textfieldInvalidFormatMsg">Invalid Account Number.</span>
    			</span>
    			</td>
               </tr>
     
               <tr>
                <td width="100" align="right">Account Type</td>
                <td width="10" align="center">:</td>
                <td>		
    			<span id="spryselect_acctype">
    			  <select name="acctype" id="acctype">
    					<option value="">Please select Account Type</option>
    					<option value="CA">Checking Account</option>
    					<option value="SA">Saving Account</option>
    					<option value="FDA">Fixed deposit Account</option>
    			  </select>
    			 <br/>
    			 <span class="textfieldRequiredMsg">Please select Account Type.</span>
    			</span>
    			</td>
    		  </tr>		   
     
              <tr>
                <td width="100" align="right">Password</td>
                <td width="10" >:</td>
                <td>
    			<span id="sprypwd"> 
                  <input name="password" type="password" tabindex="10" size="30" maxlength="30" onfocus="claviersur(this)" id="keyboardd" /><br />
                  <span class="passwordRequiredMsg">Password is required.</span>
    			  <span class="passwordMinCharsMsg">You must specify at least 6 characters.</span>
    			  <span class="passwordMaxCharsMsg">You must specify at max 10 characters.</span>
    			</span>
    			</td>
              </tr>
     
    		  <tr>
                <td width="100" align="right">Confirm Password</td>
                <td width="10" >:</td>
                <td>
    			<span id="sprycpwd"> 
                  <input name="cpassword" type="password" tabindex="10" size="30" maxlength="30" onfocus="claviersur(this)" id="keyboard"/><br />
                  <span class="confirmRequiredMsg">Confirm Password is required.</span>
    			  <span class="confirmInvalidMsg">Confirm Password values don't match</span>
    			</span>
    			</td>
              </tr>		   
     
               <tr> 
                <td colspan="2">&nbsp;</td>
                <td><input name="submitButton" type="submit" id="submitButton" value="Login Now ! " /></td>
               </tr>
    Merci de m'aider svp.

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Hum... c'est difficile d'expliquer un problème de conception avec du code. Ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $sql_st = 'SELECT u.fname, u.lname, u.email, u.is_active, u.phone,
    			a.acc_no, a.user_id, a.pin, a.type, a.status,
    			ad.address, ad.city, ad.state, ad.zipcode
    			FROM tbl_users u, tbl_accounts a, tbl_address ad
    			WHERE a.acc_no = ? AND u.pwd = ?
    			AND u.id = a.user_id AND ad.user_id = u.id AND u.is_active != ?';
    Tu recherches si il existe un utilisateur actif avec le login et le password reçus. Sauf que le password reçu de ton formulaire c'est le nouveau password à enregistrer.

    Pour illustrer : tu as perdu la clé de la porte de chez toi, tu demandes à un serrurier de changer la serrure. Mais pour avoir le droit d'installer la nouvelle serrure, il faut que le serrurier puisse ouvrir l'ancienne serrure avec la nouvelle clé. ça ne peut pas marcher.

    Donc on retire le mot de passe de la requête de vérification :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $sql_st = 'SELECT u.fname, u.lname, u.email, u.is_active, u.phone,
    			a.acc_no, a.user_id, a.pin, a.type, a.status,
    			ad.address, ad.city, ad.state, ad.zipcode
    			FROM tbl_users u, tbl_accounts a, tbl_address ad
    			WHERE a.acc_no = ? 
    			AND u.id = a.user_id AND ad.user_id = u.id AND u.is_active != ?';
    $result = dbQuery($sql_st,$accno,"FALSE");

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 452
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par Celira Voir le message
    Donc on retire le mot de passe de la requête de vérification :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $sql_st = 'SELECT u.fname, u.lname, u.email, u.is_active, u.phone,
    			a.acc_no, a.user_id, a.pin, a.type, a.status,
    			ad.address, ad.city, ad.state, ad.zipcode
    			FROM tbl_users u, tbl_accounts a, tbl_address ad
    			WHERE a.acc_no = ? 
    			AND u.id = a.user_id AND ad.user_id = u.id AND u.is_active != ?';
    $result = dbQuery($sql_st,$accno,"FALSE");
    Ok grand merci Celira mais dans le $result, on ne doit pas mettre $type ??? Puisque je constate que tu as mis seule $result = dbQuery($sql_st,$accno,"FALSE") sans le $type puisque cette variable est comprise dans les informations du formulaire HTML comme type de compte et doit aussi servit d'informations à vérifier ???

Discussions similaires

  1. [XL-2007] Ajouter une ligne à mon code pour éliminer les doublons dans un Combobox
    Par INFINITY100 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/01/2018, 02h39
  2. [MCD] Aidez moi à corriger mon MCD avant de generer MLR
    Par erusie dans le forum Schéma
    Réponses: 14
    Dernier message: 26/08/2010, 20h03
  3. aider moi a Corriger mon css pour un menu deroulant
    Par clem62173 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 22/06/2010, 18h06
  4. [Tableaux] probleme avec mon code pour faire un parseur !
    Par Joe-La-Boule dans le forum Langage
    Réponses: 10
    Dernier message: 11/10/2006, 15h35

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