Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/03/2011, 15h26   #1
Invité régulier
 
Inscription : septembre 2008
Messages : 72
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 72
Points : 9
Points : 9
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 :
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 :
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
Romuald632 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 15h37   #2
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
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 : 951
Points : 1 063
Points : 1 063
c'est un peu de la soupe ton code. exemples
Citation:
</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.
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 15h48   #3
Invité régulier
 
Inscription : septembre 2008
Messages : 72
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 72
Points : 9
Points : 9
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.
Romuald632 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 15h58   #4
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 709
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 709
Points : 3 279
Points : 3 279
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 :
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>.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 16h11   #5
Invité régulier
 
Inscription : septembre 2008
Messages : 72
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 72
Points : 9
Points : 9
Sur mon fichier upload j'ai fais du menage :
Code :
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 ?!
Romuald632 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 18h09   #6
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 709
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 709
Points : 3 279
Points : 3 279
Citation:
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.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 18h33   #7
Invité régulier
 
Inscription : septembre 2008
Messages : 72
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 72
Points : 9
Points : 9
Bon je suis reparti de zéro, parce qu'il y avait trop d'erreurs :
Donc ma page de recap des données :
Code :
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 :
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
Romuald632 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h27.


 
 
 
 
Partenaires

Hébergement Web