Perte de mot de passe

Perdu
Invité n'ayant pas de compte PHPfrance

09 juin 2006, 14:48

Bonjour à tous,

J'aurais besoin d'un conseil pour un problème que je n'arrive pas à résoudre.

Sur 2 pages d'un site, une identification est nécessaire pour accéder à ces 2 pages.

Un formulaire de connexion est inclus si un $_SESSION['pseudo'] n'existe pas.
Le problème est que certains utilisateurs sont contraints de redemander un mot de passe car ils n'arrivent pas à se connecter et ce à chaque déconnexion, le lendemain, ou après fermeture du navigateur, c'est assez vague à déterminer.

Je n'arrive pas à reproduire le problème chez moi, je ne comprends pas.

Voici la page qui requiert une identification :
session_start();

// identifiants pour la base de données
@ $idbdd = require('./connect.php');

// inclusion de la bibilothèque des fonctions
@ $biblio = require('./biblio.php');

if(!$biblio || !$idbdd)
{
    exit();
}

if( !isset($_SESSION['pseudo']) )
{
    require('./inc/connexion.php');
}
else
{
  .........
La page connexion.php
// mot de passe oublié inclusion du formulaire
if( isset($_GET['act']) && $_GET['act'] == 1 )
{
    require('./inc/new_mdp.inc.php');
    exit();
}

// connexion
if( isset($_POST['envoi']) && $_POST['envoi'] == 'Connexion' )
{
    unset($mess_connect);
    // connexion de l'utilisateur
    $verif = "SELECT COUNT(pseudo) FROM participant WHERE pseudo='" . protection(trim($_POST['pseudo'])) . "';";
    @ $req = mysql_query($verif);
    
    if( mysql_result( $req, 0) == 1 )
    {
        $verif = "SELECT id, mdp FROM participant WHERE pseudo='" . protection(trim($_POST['pseudo'])) . "';";
        
        @ $req = mysql_query($verif);
        
        if( md5(trim($_POST['passwd'])) == mysql_result($req, 0, 'mdp') )
        {
            $_SESSION['pseudo'] = protection($_POST['pseudo']);
            $_SESSION['id'] = mysql_result($req, 0, 'id');
            header('location: ' . $_SERVER['HTTP_REFERER']);
        }
        else
        {
            $mess_connect = 'Vos identifiants sont incorrects';
        }
    }
    else
    {
        $mess_connect = 'Vos identifiants sont incorrects';
    } 
}
?>
Elle fait appel à une autre en cas de mdp oublié ou perdu.
// mot de passe oublié
if( isset($_POST['new_mdp']) && $_POST['new_mdp'] == 'Valider' && !empty($_POST['pseudo']) && !empty($_POST['mail']) )
{
    unset($confirm);
    
    // vérification du pseudo et mail
    $sql = "SELECT COUNT(pseudo) FROM participant WHERE pseudo='" . protection($_POST['pseudo']) . "'";
    @ $req = mysql_query($sql);
    if( mysql_result($req, 0) == 1 )
    {
        $sql = "SELECT mail FROM participant WHERE pseudo='" . protection($_POST['pseudo']) . "'";
        @ $mail = mysql_result(mysql_query($sql), 0);
        if ( $mail )
        {
            // le pseudo correspond à l'email, envoi d'un nouveau mdp
            
            // génération d'un nouveau mot de passe
            $string = 'azertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN0123456789';
            $mdp = chaine_aleatoire($string, 8);
        
            $from = "From: ";
            $from .= "MIME-version: 1.0\n";
            $from .= "Content-type: text/html; charset= iso-8859-1\n"; 

            $sujet = "Envoi d'un nouveau mot de passe\n";
            $message = ''; // message de l'email
                                       
            // entete mail à changer
            @ $envoi_mail = mail($mail, $sujet, $message, $from);
                              
            if(!$envoi_mail)
            {
                echo '<p>erreur.</p>'; 
                exit();
            }
            else
            {
                // si l'email a bien été envoyé, mise à jour de la table particpant.
                @ $update = mysql_query("UPDATE participant SET mdp='" . md5($mdp) . "' WHERE pseudo='" . protection($_POST['pseudo']) . "';");
                if ( !$update )
                {
                    $mes_mdp = 'erreur';
                }
                else
                {
                    // tout est ok.
                    header('location: ' . $_SERVER['REQUEST_URI'] . '&confirm=1');
                }
            }                 
        }
        else
        {
            exit('erreur');
        }
    }
    else
    {
        $mes_mdp = 'Ces identifiants ne sont pas corrects';
    }
}
else
{
  // affichage de la page
Je pense à un problème avec la session ou la requête, mais pourquoi cela fonctionne avec pratiquement tout le monde, et que seulement 3, 4 utilisateurs ont ce problème.

J'ai vraiment besoin de vos conseils, car le problème est tenace et je suis à court d'idées :cry:

Merci.

Invité
Invité n'ayant pas de compte PHPfrance

12 juin 2006, 11:26

salut,

je te conseille de mettre des exit; just'après chaque header('Location:...');
ça évite des erreurs. (dans ton cas je sais pas, mais soyons prévoyant)