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 :

Probleme session apres modification compte


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 72
    Par défaut Probleme session apres modification compte
    Bonjour,
    sur mon site l'internaute peut créer un compte, avec la possibilité de le modifier.
    Mon problème provient de l'affichage des modifications et du cangement de mot de passe.
    Quand je change de mot de passe, je "perds" la session et si je modifie le prenom par exemple, j'ai toujours un "décalage" d'une étape . Voici mes pages PHP
    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
    <?php
    session_start();
    include ('haut_connexion.php');
    include ('config.php');
    $sql = mysql_connect($hostname,$username,$password);
    mysql_select_db($database, $sql);
     
    session_start();
    if(isset($_SESSION['login']))
    {
    $sql=mysql_query("SELECT * FROM connexion WHERE login_connexion='".$_SESSION['login']."'");
    $res=mysql_fetch_assoc($sql);
    ?>
    <br />
    <table class="tableau_nom_rubrique">
      <tr>
        <td class="td_nom_rubrique">Bonjour <?php echo $res['prenom_connexion']; ?> <?php echo $res['nom_connexion']; ?>, bienvenue dans votre espace personnel</td>
        <td class="td_retour"></td>
      </tr>
    </table>
    <?php
    header('Content-Type: text/html; charset=UTF-8'); 
    mysql_query("SET NAMES 'utf8'"); 
     
    $compte = mysql_query("SELECT * FROM connexion WHERE login_connexion='".$_SESSION['login']."'") or die(mysql_error());
     
    while ($affichage = mysql_fetch_assoc($compte)) 
    { 
    	mb_internal_encoding("UTF-8");
    	echo ' '.$affichage['nom_connexion'].'
    <form action="mon_compte_update.php" method="post">
    <table class="td_mon_compte" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td class="td_mon_compte_gauche">Nom : </td>
        <td class="td_mon_compte_droite"><input name="nom_connexion" size="40" type="text" value="'.$affichage['nom_connexion'].'" /></td>
      </tr>
      <tr>
        <td class="td_mon_compte_gauche">Prémom : </td>
        <td class="td_mon_compte_droite"><input name="prenom_connexion" size="40" type="text" value="'.$affichage['prenom_connexion'].'" /></td>
      </tr>
      <tr>
        <td class="td_mon_compte_gauche">E-mail : </td>
        <td class="td_mon_compte_droite"><input name="email_connexion" size="40" type="text" value="'.$affichage['email_connexion'].'" /></td>
      </tr>
      <tr>
        <td class="td_mon_compte_gauche">Mot de passe : </td>
        <td class="td_mon_compte_droite"><input name="login_connexion" size="40" type="text" value="'.$affichage['login_connexion'].'" /></td>
      </tr>
      <tr>
        <td class="td_mon_compte_centre" colspan="2"><input type="hidden" name="id_connexion" value="'.$affichage['id_connexion'].'" /><input name="Envoyer" type="submit" value="Mettre à jour vos infrormations"/></td>
      </tr>
    </table>
    </form>
    '
    ;
    }
    ?>
    <?php } ?>
    Page update
    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
    <?php
    session_start();
    include ('haut_connexion.php');
    include ('config.php');
    $sql = mysql_connect($hostname,$username,$password);
    mysql_select_db($database, $sql);
     
    session_start();
    if(isset($_SESSION['login']))
    {
    $sql=mysql_query("SELECT * FROM connexion WHERE login_connexion='".$_SESSION['login']."'");
    $res=mysql_fetch_assoc($sql);
    ?>
    <br />
    <table class="tableau_nom_rubrique">
      <tr>
        <td class="td_nom_rubrique">Bonjour <?php echo $res['prenom_connexion']; ?> <?php echo $res['nom_connexion']; ?>, bienvenue dans votre espace personnel</td>
        <td class="td_retour"></td>
      </tr>
    </table>
    <?php 
    header('Content-Type: text/html; charset=UTF-8');
    if(isset($_POST['id_connexion']))      $id_connexion=$_POST['id_connexion'];
    else      $id_connexion="";
     
    if(isset($_POST['nom_connexion']))      $nom_connexion=$_POST['nom_connexion'];
    else      $nom_connexion="";
     
    if(isset($_POST['prenom_connexion']))      $prenom_connexion=$_POST['prenom_connexion'];
    else      $prenom_connexion="";
     
    if(isset($_POST['email_connexion']))      $email_connexion=$_POST['email_connexion'];
    else      $email_connexion="";
     
    if(isset($_POST['login_connexion']))      $login_connexion=$_POST['login_connexion'];
    else      $login_connexion="";
     
    mysql_query("SET NAMES 'utf8'");
     
    $sql = 'UPDATE connexion SET nom_connexion="'.$nom_connexion.'", prenom_connexion="'.$prenom_connexion.'",email_connexion="'.$email_connexion.'", login_connexion="'.$login_connexion.'" WHERE id_connexion="'.$_POST['id_connexion'].'"';
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
     
    header('Content-Type: text/html; charset=UTF-8'); 
    mysql_query("SET NAMES 'utf8'"); 
     
    $compte = mysql_query("SELECT * FROM connexion WHERE login_connexion='".$_SESSION['login']."'") or die(mysql_error());
     
    while ($affichage = mysql_fetch_assoc($compte)) 
    { 
    	mb_internal_encoding("UTF-8");
    	echo ' '.$affichage['nom_connexion'].'
    <form action="mon_compte_update.php" method="post">
    <table class="td_mon_compte" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td class="td_mon_compte_gauche">Nom : </td>
        <td class="td_mon_compte_droite"><input name="nom_connexion" size="40" type="text" value="'.$affichage['nom_connexion'].'" /></td>
      </tr>
      <tr>
        <td class="td_mon_compte_gauche">Prémom : </td>
        <td class="td_mon_compte_droite"><input name="prenom_connexion" size="40" type="text" value="'.$affichage['prenom_connexion'].'" /></td>
      </tr>
      <tr>
        <td class="td_mon_compte_gauche">E-mail : </td>
        <td class="td_mon_compte_droite"><input name="email_connexion" size="40" type="text" value="'.$affichage['email_connexion'].'" /></td>
      </tr>
      <tr>
        <td class="td_mon_compte_gauche">Mot de passe : </td>
        <td class="td_mon_compte_droite"><input name="login_connexion" size="40" type="text" value="'.$affichage['login_connexion'].'" /></td>
      </tr>
      <tr>
        <td class="td_mon_compte_centre" colspan="2"><input type="hidden" name="id_connexion" value="'.$affichage['id_connexion'].'" /><input name="Envoyer" type="submit" value="Mettre à jour vos infrormations"/></td>
      </tr>
    </table>
    </form>
    '
    ;
    } 
    ?>
    <?php } ?>
    En créant mes pages je me doutais qu'il y allait avoir un problème de session.
    Mais j'avoue que néophyte en PHP je sais pas trop quoi faire pour corriger mon erreur.
    Merci de votre aide

  2. #2
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Par défaut
    c'est un peu de la soupe ton code. exemples
    </table>
    <?php
    header('Content-Type: text/html; charset=UTF-8');
    l'idée c'est de toujours faire dans l'ordre le traitement pour identifier le visiteur, la modification des informations personnelles puis de faire les affichages.

    je crois que tu aurais bcp à gagner à mettre certaines parties de ton code (ie la connexion à la bd) dans un fichier inclu.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 72
    Par défaut
    Salut,
    ce bout de code
    j'ai trouvé ça dans un cours de php pour les sessions...

    D'autre part je viens de voir que j'avais deux fois : session_start();
    Donc je l'ai supprimé

    Mon problème vient surtout de fait que si je modifie les données du compte, je n'ai plus de session.

  4. #4
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Il y a des soucis dans le déroulement du code, des choses qui devraient ce faire avant les autres, question de logique en faite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?php
    session_start();
    ?>
    ... code HTML etc ...
    <?php
    header('Content-Type: text/html; charset=UTF-8'); 
    mysql_query("SET NAMES 'utf8'"); 
     
    session_start();
     
    mb_internal_encoding("UTF-8");
    Déjà, ici il y a 2 session_start(), or il en faut qu'un, il n'y a pas lieu de démarrer 2 fois la gestion des sessions.

    Ensuite, tout ce qui est header(), requête sur le SET NAMES, etc ... tout ça c'est théoriquement à faire le plus tôt possible, en tout cas, au minimum avant le moindre echo ou/et code HTML.


    En faite, il faut percevoir le principe du Web un peu comme celui du courrier papier par la poste.
    Il y a cette notion d'envoyer une demande, et recevoir une réponse, (donc des échanges), et ça entre 2 personnes (du moins, client/serveur).
    Si on envoie en 1er la lettre et qu'après on envoie l'enveloppe (avec le Nom et l'adresse), le facteur sera bien embêté, il ne va pas comprendre que telle enveloppe et en relation avec telle lettre.
    C'est grosso modo se qui est fait, faut corriger ça.


    D'ailleurs, il faudrait en 1er savoir si tu as activé les messages d'erreurs de Php, display_errors coté php.ini et à On.
    De même voir ce qu'il y a comme valeur au error_reporting. E_ALL est conseillé.
    Tout au moins pendant la phase de développement.


    Théoriquement tu devrais avoir des erreur du faite d'avoir mis une entête (un header) alors que du contenu a déjà été envoyé, de même que répéter 2 fois session_start().
    Au pire, consulte les erreur dans les log comme php_error.log.

    Une fois que tu auras connaissance de toutes les erreurs, et bien là il sera possible de les réparer, ces messages sont là pour aider/comprendre justement.


    Revois un peu ça, remonte certain code Php, et ça avant le moindre echo ou code HTML (qui normalement commence par un <!DOCTYPE ...> ou/et <html>.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 72
    Par défaut
    Sur mon fichier upload j'ai fais du menage :
    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
    <?php
    session_start();
    include ('haut_connexion.php');
    include ('config.php');
    $sql = mysql_connect($hostname,$username,$password);
    mysql_select_db($database, $sql);
     
    if(isset($_SESSION['login']))
    {
    $sql=mysql_query("SELECT * FROM connexion WHERE login_connexion='".$_SESSION['login']."'");
    $res=mysql_fetch_assoc($sql);
     
    if(isset($_POST['id_connexion']))      $id_connexion=$_POST['id_connexion'];
    else      $id_connexion="";
     
    if(isset($_POST['nom_connexion']))      $nom_connexion=$_POST['nom_connexion'];
    else      $nom_connexion="";
     
    if(isset($_POST['prenom_connexion']))      $prenom_connexion=$_POST['prenom_connexion'];
    else      $prenom_connexion="";
     
    if(isset($_POST['email_connexion']))      $email_connexion=$_POST['email_connexion'];
    else      $email_connexion="";
     
    if(isset($_POST['login_connexion']))      $login_connexion=$_POST['login_connexion'];
    else      $login_connexion="";
     
    $sql = 'UPDATE connexion SET nom_connexion="'.$nom_connexion.'", prenom_connexion="'.$prenom_connexion.'",email_connexion="'.$email_connexion.'", login_connexion="'.$login_connexion.'" WHERE id_connexion="'.$_POST['id_connexion'].'"';
    $_SESSION['login']=$_POST['id_connexion'];
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
     
    echo '<img src="puces/07.png"> Le mise à jour de votre compte s\'est effectuée avec succès';
    }
    ?>
    C'est déjà mieux non ?!

  6. #6
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    C'est déjà mieux non ?!
    Ca a l'air mieux.

    Mais n'empêche qu'apparemment il manque du code ci-dessus.
    Au début il y a du code Php, comme le démarrage de la session, des instruction pour l'entête, et à la fin il y a un echo.
    Du coup, on a pas une vue globale du comment tout ça se déroule, car on ne sait pas où se situe par exemple le 1er contenu renvoyé, qui théoriquement doit être un <!DOCTYPE ...><html> et finir par </html>, et ça par rapport au code que tu mets, ne serait ce dans les grandes lignes.
    Donc impossible de dire si c'est correcte ou pas.


    Mais as tu fais le point sur les retours d'erreurs ?
    Etre au courant de ces erreurs, c'est important, ça évite de coder en aveugle.
    Aussi, tu ne dis pas si cette erreur de décalage est résolue ou pas.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 72
    Par défaut
    Bon je suis reparti de zéro, parce qu'il y avait trop d'erreurs :
    Donc ma page de recap 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <?php
    session_start();
    if(isset($_SESSION['login']))
    {
     
    include ('haut_connexion.php');
    include ('config.php');
    $sql = mysql_connect($hostname,$username,$password);
    mysql_select_db($database, $sql);
     
     
    $sql=mysql_query("SELECT * FROM connexion WHERE login_connexion='".$_SESSION['login']."'");
    $res=mysql_fetch_assoc($sql);
     
    ?>
     
    <form action="mon_compte_update.php" method="post">
    <table class="td_mon_compte" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td class="td_mon_compte_gauche">Nom : </td>
        <td class="td_mon_compte_droite"><input type="text" name="nom_connexion" size="40" value="<?php if(isset($_POST['nom_connexion'])) echo $_POST['nom_connexion']; else echo $res['nom_connexion']; ?>" /></td>
      </tr>
      <tr>
        <td class="td_mon_compte_gauche">Prémom : </td>
        <td class="td_mon_compte_droite"><input type="text" name="prenom_connexion" size="40" value="<?php if(isset($_POST['prenom_connexion'])) echo $_POST['prenom_connexion']; else echo $res['prenom_connexion']; ?>" /></td>
      </tr>
      <tr>
        <td class="td_mon_compte_gauche">E-mail : </td>
        <td class="td_mon_compte_droite"><input type="text" name="email_connexion" size="40" value="<?php if(isset($_POST['email_connexion'])) echo $_POST['email_connexion']; else echo $res['email_connexion']; ?>" /></td>
      </tr>
      <tr>
        <td class="td_mon_compte_gauche">Mot de passe : </td>
        <td class="td_mon_compte_droite"><input type="text" name="login_connexion" size="40" value="<?php if(isset($_POST['login_connexion'])) echo $_POST['login_connexion']; else echo $res['login_connexion']; ?>" /></td>
      </tr>
      <tr>
        <td class="td_mon_compte_centre" colspan="2"><input type="hidden" name="id_connexion" value="'.$affichage['id_connexion'].'" /><input name="Envoyer" type="submit" value="Mettre à jour vos infrormations"/></td>
      </tr>
    </table>
    </form>
    <?php } ?>
    Voilà ma apge re récupration des modifications :
    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
    <?php
    session_start();
    if(isset($_SESSION['login']))
    {
     
    include ('haut_connexion.php');
    include ('config.php');
    $sql = mysql_connect($hostname,$username,$password);
    mysql_select_db($database, $sql);
    $sql=mysql_query("SELECT * FROM connexion WHERE login_connexion='".$_SESSION['login']."'");
    $res=mysql_fetch_assoc($sql);
     
    if(isset($_POST['id_connexion']))      $id_connexion=$_POST['id_connexion'];
    else      $id_connexion="";
     
    if(isset($_POST['nom_connexion']))      $nom_connexion=$_POST['nom_connexion'];
    else      $nom_connexion="";
     
    if(isset($_POST['prenom_connexion']))      $prenom_connexion=$_POST['prenom_connexion'];
    else      $prenom_connexion="";
     
    if(isset($_POST['email_connexion']))      $email_connexion=$_POST['email_connexion'];
    else      $email_connexion="";
     
    if(isset($_POST['login_connexion']))      $login_connexion=$_POST['login_connexion'];
    else      $login_connexion="";
     
    $sql=mysql_query("UPDATE connexion SET nom_connexion='".$_POST['nom_connexion']."',prenom_connexion='".$_POST['prenom_connexion']."',email_connexion='".$_POST['email_connexion']."',login_connexion='".$_POST['login_connexion']."' WHERE login_connexion=".$_SESSION['login']." ") or die (mysql_error());
     
    if ($sql!=false)
    {
    header("Refresh: 1; URL=mon_compte.php"); 
    die("<p>Vos modifications ont bien été prise en compte...</p><p>Si vous n'êtes pas redirigé automatiquement <a href='mon_compte.php'>cliquez ici</a>.");
    }
    ?>
    <?php } ?>
    Bon maintenant j'ai toujours la session ouverte, mais les modifications ne sont pas mise à jour...
    Je vais m'arracher les cheveux

Discussions similaires

  1. Réponses: 5
    Dernier message: 26/04/2009, 13h51
  2. Probleme de connection aprés modif BD
    Par Ogtraba dans le forum JDBC
    Réponses: 6
    Dernier message: 08/03/2009, 15h58
  3. [DOM] probleme de fermeture de fichier xml apres modification
    Par bibi73 dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 08/04/2008, 16h13
  4. probleme d'affichage après modification d'une donnée
    Par rherrad dans le forum Struts 1
    Réponses: 2
    Dernier message: 31/08/2007, 16h09
  5. Réponses: 2
    Dernier message: 05/12/2005, 11h02

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