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

PHP & Base de données Discussion :

requete qui ne fonctionne pas,sans message d'erreur [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 184
    Points : 65
    Points
    65
    Par défaut requete qui ne fonctionne pas,sans message d'erreur
    bonjour,
    j'essaie actuellement de faire un système de mot de passe oublié mais je me heurte a la requete d'UPDATE qui ne fonctionne pas.
    actuellement j'arrive bien a générer un token, a l'envoyer a l'utilisateur par mail,le rediriger vers la page pour reinitialiser le mot de passe.
    la ou j'ai un soucis,c'est que mon update ne fonctionne pas (pas de message d'erreur) je rentre le mot de passe et sa confirmation ,et rien ne se passe au niveau de la table après refresh.
    voici le code de la page:

    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
    <?php
    session_start(); 
     
        if(isset($_GET['email']) && isset($_GET['token'])){
        $email=htmlspecialchars(trim($_GET['email']));
     
    	require_once("../connexionMysql.inc.php");	
    	$req = $pdo->prepare('SELECT * FROM userss WHERE email = ? AND reset_token = ? AND reset_time > DATE_SUB(NOW(), INTERVAL 30 MINUTE)') ;
    	$req->execute([$_GET['email'], $_GET['token']]);	
    	$user=$req->fetch();
        var_dump($user);
    	if ($user){
     
    		if(!empty($_POST)){
    			if (!empty($_POST['password']) && ($_POST['password'] == $_POST['password_confirm'])){
     
    				$password=sha1 ($_POST['password']);			
    				$sql=('UPDATE userss SET password =:password, reset_time=NULL, reset_token=NULL WHERE email =:email');
    			        $req=$pdo->prepare($sql);
    				$req->execute(array( 
    				                   ':email'=>$email,
    				                   ':password'=>$password				
    				                     )    );
     
     
    				echo 'votre mot de passe a bien été modifié';
    			}
     
    		}
    	} 
             else
            {
    	echo ' ce token n\est pas valide!' ;
    	 exit();
    	}
     
     
     
    	}  	
    	else
    	{
    	header("Location:login.php");
    	exit();
    	}
     
     
     
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
    <body>
     
    <form id="monform" name="form1" method="post" action="Reset.php">
     
                <div align="center"><font color="#000000" 
    		< p> 
                       <label>Mot de passe :
                        <input type="password" name="password" />
                       </label>
                    </p>
     
                          <p>
                              <label>&nbsp;Confirmer le mot de passe :
                              <input type="password" name="password_confirm" />
                              </label>
                         </p>
     
                               <input type="submit" name="bouton"  value="Reinitialiser votre mot de passe" /></br></br>
     
                </div>
     
    </form>
    </body>
    </html>
    et voici le var_dump($user);
    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
    array (size=16)
      'ID' => string '1' (length=1)
      0 => string '1' (length=1)
      'prenom' => string 'steph' (length=5)
      1 => string 'steph' (length=5)
      'email' => string xxxxxxxxx@orange.fr' (length=9)
      2 => string xxxxxxxxx@orange.fr' (length=9)
      'password' => string 'da39a3ee5e6b4b0d3255bfef95601890afd80709' (length=40)
      3 => string 'da39a3ee5e6b4b0d3255bfef95601890afd80709' (length=40)
      'token' => string 'c200645018f56b3dcc75f91f0b0d293a99df10de' (length=40)
      4 => string 'c200645018f56b3dcc75f91f0b0d293a99df10de' (length=40)
      'reset_token' => string 'e26b55950032f0fe3948ebe0555d9cb5cebf4121' (length=40)
      5 => string 'e26b55950032f0fe3948ebe0555d9cb5cebf4121' (length=40)
      'reset_time' => string '2015-06-28 17:06:07' (length=19)
      6 => string '2015-06-28 17:06:07' (length=19)
      'activate' => string '1' (length=1)
      7 => string '1' (length=1)
    merci

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu obtiens "votre mot de passe a bien été modifié" ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 184
    Points : 65
    Points
    65
    Par défaut
    Non,pas de message

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Dans ton formulaire "password" il n'y a plus email et token, donc le code n'est pas executé.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 184
    Points : 65
    Points
    65
    Par défaut
    Mais dans la partie traitement la première chose que je fais et de verifier via l'URL d'avoir mon mail ainsi que le token

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Oui justement. Quand tu arrives depuis le lien tu les as, quand tu valides le formulaire, ils n'existent plus.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 184
    Points : 65
    Points
    65
    Par défaut
    excuse moi, mais j'ai une incomprehension.
    normalement,si j'ai user et si les données sont pas vides ,si le password et identiques a la confirmation, déjà je devrai avoir ma variable password,et pour le moment je n'ai rien.
    j'ai deplacer le var_dump comme ci dessous ,et j'ai bien le résultat comme dans mon premier post.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if ($user)
    	{
    	var_dump($user);	
    		if(!empty($_POST))
    		{
     
    			if (!empty($_POST['password']) && $_POST['password'] == $_POST['password_confirm'])
    			{
    				$password= sha1($_POST['password']);
    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
    array (size=16)
      'ID' => string '1' (length=1)
      0 => string '1' (length=1)
      'prenom' => string 'steph' (length=5)
      1 => string 'steph' (length=5)
      'email' => string xxxxxxxxx@orange.fr' (length=9)
      2 => string xxxxxxxxx@orange.fr' (length=9)
      'password' => string 'da39a3ee5e6b4b0d3255bfef95601890afd80709' (length=40)
      3 => string 'da39a3ee5e6b4b0d3255bfef95601890afd80709' (length=40)
      'token' => string 'c200645018f56b3dcc75f91f0b0d293a99df10de' (length=40)
      4 => string 'c200645018f56b3dcc75f91f0b0d293a99df10de' (length=40)
      'reset_token' => string '28e027f14a888f4519b9fbdf0144073616f66ef1' (length=40)
      5 => string '28e027f14a888f4519b9fbdf0144073616f66ef1' (length=40)
      'reset_time' => string '2015-06-29 10:06:25' (length=19)
      6 => string '2015-06-29 10:06:25' (length=19)
      'activate' => string '1' (length=1)
      7 => string '1' (length=1)

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je parle de $_GET['email'] et $_GET['token'] qui sont dans la première condition sur tout ton traitement.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 184
    Points : 65
    Points
    65
    Par défaut
    en fait j'ai reussi a résoudre mon problème en changeant l'action de mon form

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form id="monform" name="form1" method="post" action="">
    mais par contre mon update agit sur tout mes enregistrements, comment je peux recupérer l'ID?
    faut il que je fasse une requete select pour lire ma table avant mon update?

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    tu as un problème de LOGIQUE : tu mélanges tout, sans prendre en compte la chronologie des évènements.
    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
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    <?php
    session_start();
    // ------------------------------
    $user_form_affiche = 0;
    $user_form_traitement = 0;
    $_SESSION['user_id'] = 0;
    // ------------------------------
    // 1/ traitemenet de l'URL 
    if(isset($_GET['email']) && isset($_GET['token'])){
       $email=htmlspecialchars(trim($_GET['email']));
     
       require_once("../connexionMysql.inc.php");      
       $req = $pdo->prepare('SELECT id FROM userss WHERE email = ? AND reset_token = ? AND reset_time > DATE_SUB(NOW(), INTERVAL 30 MINUTE)') ;
       $req->execute([$_GET['email'], $_GET['token']]);      
       $user=$req->fetch();
       var_dump($user);
       if ($user['id'] > 0 ){ // on a bien une correspondance
     
          $user_form_affiche = 1;
          $_SESSION['user_id'] = $user['id']; // on met l'id en SESSION pour pouvoir le récupérer ensuite.
       } 
       else
       {
          header("location:login.php");
          exit();
       }
     
    }        
    else
    {
       header("location:login.php");
       exit();
    }
     
    // ------------------------------
    // 3/ traitement du formulaire
    if( !empty($_POST) ){
       if (!empty($_SESSION['user_id']) && !empty($_POST['password']) && ($_POST['password'] == $_POST['password_confirm'])){
     
          $sql=('UPDATE userss SET password =:password, reset_time=NULL, reset_token=NULL WHERE id =:id');
          $req=$pdo->prepare($sql);
          $req->execute(array( 
             ':id'=>$_SESSION['user_id'], // id récupéré en SESSION
             ':password'=>sha1 ($_POST['password'])                       
             )   );
     
          $user_form_traitement = 1;
       }
       else
       {
          $user_form_traitement = 2; // erreur de traitement
     
       }
    }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
    <body>
    <?php
    // ------------------------------
    // 2/ affichage du formulaire
    if( $user_form_affiche==1 && $_SESSION['user_id']>0 )
    {
     
    <form id="monform" name="form1" method="post" action="Reset.php">
     
             <div align="center"><font color="#000000" 
                < p> 
                   <label>Mot de passe :
                   <input type="password" name="password" />
                   </label>
                </p>
     
                     <p>
                        <label>&nbsp;Confirmer le mot de passe :
                        <input type="password" name="password_confirm" />
                        </label>
                    </p>
     
                         <input type="submit" name="bouton"  value="Reinitialiser votre mot de passe" /></br></br>
     
             </div>
     
    </form>
    <?php
    }
    // ------------------------------
    // 5/ affichage résultat formulaire 
    elseif( $user_form_traitement==1 ){
    ?>
       <p>votre mot de passe a bien été modifié</p>
    <?php
    }
    elseif ($user_form_traitement==2 ){
    ?>
       <p>erreur de traitement</p>
    <?php
    }
    ?>
    </body>
    </html>
    Dernière modification par Invité ; 29/06/2015 à 12h26.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 184
    Points : 65
    Points
    65
    Par défaut
    merci pour cette autre solution,j'ai 2 petit soucis:

    dans ma requete l'update ne fonctionne plus lors de l'execution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $sql=("UPDATE userss SET password =:password, reset_time=NULL, reset_token=NULL WHERE ID=:id") ;
    	  $req=$pdo->prepare($sql);
    	$req->execute(array( 
    				        ':id'=>$_SESSION['user_id'],
    				         ':password'=>sha1($_POST['password'])				
    				         ));
    etje pense donc que logiquement cette seconde partie concernant l'affichage, ne m'affiche rien
    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
    <?php
    }
    // ------------------------------
    // 5/ affichage résultat formulaire 
    elseif( $user_form_traitement==1 ){
    ?>
       <p>votre mot de passe a bien été modifié</p>
    <?php
    }
    elseif ($user_form_traitement==2 ){
    ?>
       <p>erreur de traitement</p>
    <?php
    }
    ?>

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

Discussions similaires

  1. UPDATE avec jointure ne fonctionne pas sans message d'erreur
    Par EnRadeSurEclipse dans le forum Requêtes
    Réponses: 4
    Dernier message: 25/01/2010, 23h22
  2. requete qui ne fonctionne pas comme je shouterais
    Par domino_dj dans le forum Requêtes
    Réponses: 1
    Dernier message: 04/04/2007, 13h27
  3. requete qui ne fonctionne pas
    Par gregal dans le forum Requêtes
    Réponses: 2
    Dernier message: 03/04/2007, 17h19
  4. Requete qui ne fonctionne pas sur toutes les versions de MySQL
    Par goldorax113 dans le forum Requêtes
    Réponses: 2
    Dernier message: 06/06/2006, 12h04
  5. Requete qui ne fonctionne pas chez l'hebergeur
    Par Derik dans le forum Requêtes
    Réponses: 4
    Dernier message: 05/06/2006, 03h35

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