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 :

Autre problème de variable de session


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 3
    Par défaut Autre problème de variable de session
    Bonjour !

    Étant plus ou moins débutant dans le domaine, j'ai quelques soucis au niveau d'un chat que j'essaye de réaliser de a à z depuis un certain temps, et pour tout dire je suis assez mal barré pour le moment xD !

    Le problème est le suivant, j'ai un champ de texte dans un formulaire qui doit garder en mémoire le pseudo fournit par l'utilisateur dans ce champ lorsqu'il a envoyé le formulaire.

    Par défaut celui ci contient 'Inconnu', je l'ai enregistré dans une variable $_SESSION['pseudo'] qui se trouve dans le paramètre value="" du formulaire ; Lorsque ce dernier sera traité, $_SESSION['pseudo'] contiendra alors $_POST['pseudo'] pour pouvoir mettre à jour le pseudo de l'utilisateur dans le champ de texte.

    Cependant, comme la page d'index se charge à nouveau pour rafraichir les messages, $_SESSION['pseudo'] redevient alors 'Inconnu'. J'ai l'impression que PHP me créer deux variables de session T_T Si quelqu'un pouvait m'éclaircir, m'apporter une solution ou quelques conseils, j’apprécierais énormément !

    Merci d'avance !

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Le mieux est de nous fournir le code

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 3
    Par défaut
    Très bien voici le code, je l'ai simplifié et retiré le contenu entre <head> </head> pour gagner de la place ;3.

    chat.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
    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();
    $_SESSION['pseudo'] = "Inconnu";
     
    try {
      $bdd = new PDO('mysql:host=localhost;dbname=db_mastersite', 'root', '');
    }
     
    catch (Exception $e) {
      die('Erreur : ' . $e->getMessage());
    }
     
      $reponse = $bdd->query('SELECT logged from ms_chat_usrlst WHERE IP = "' . $_SERVER['REMOTE_ADDR'] . '" ');
      $online = $reponse->fetch();
     
        /* Son pseudo est par défaut 'Inconnu' et on l'affiche comme connecté à droite. */
    	if (!$online) {
        $req = $bdd->prepare('INSERT INTO ms_chat_usrlst(usrname, IP, logged) VALUES(?, ?, ?)');
        $req->execute(array($_SESSION['pseudo'], $_SERVER['REMOTE_ADDR'], 1));
    	}
    	else {
    	}
     
    ?>
     
    <!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>
    </head>
    <body>
    <div id="enveloppe">
     
        <div class="chat_menu">
    	  <div class="msg_infomain">
    	    <tr>
    	      <td>
    	      <a href="profile.php"></a>
    	      </td>
    	      <td>
    	      <span></span>
    	      </td>
    	    </tr>
    	  </div>
    	  <p><a href="chat_functions.php?mode=logout">deconnexion</a></p>
    	  <div class="msg_infomain_bottom bottom_radius">
    	    <tr>
    		</tr>
    	  </div>
    	</div>
     
    <div class="left">	
    <?php
    // Messages ==>
      $msg = $bdd->query('SELECT usrname, date_creation, message FROM ms_chat_messages ORDER BY ID DESC LIMIT 0, 16') or die(print_r($bdd->errorInfo()));
      while ($donnees = $msg->fetch()) { ?>
        <div class="chat_msg">
    	  <div class="msg_info">
    	    <tr>
    	      <td>
    	      <a href="profile.php"><?php echo htmlspecialchars($donnees['usrname']); ?> :</a>
    	      </td>
    	      <td>
    	      <span><?php echo htmlspecialchars($donnees['date_creation']); ?></span>
    	      </td>
    	    </tr>
    	  </div>
    	  <p><span style="font-family: Verdana;"><?php echo htmlspecialchars($donnees['message']); ?></span></p>
    	  <div class="msg_bottom">
    	    <tr>
    		</tr>
    	  </div>
    	</div>
      <?php
      }
      $msg->closeCursor();
    ?>
    </div>
     
    <div class="right">
    <?php
    /* Liste des utilisateurs. */
    $usrlst = $bdd->query('SELECT usrname FROM ms_chat_usrlst WHERE logged = 1') or die(print_r($bdd->errorInfo()));  
      while ($donnees = $usrlst->fetch()) { ?>
    	  <div id="usrdta"><p><acronym title="<?php echo $_SERVER['REMOTE_ADDR']; // TEST ?>"><?php echo htmlspecialchars($donnees['usrname']); ?></acronym></p></div>
      <?php
      }
      $usrlst->closeCursor();
    ?>
    </div>
     
    <div class="send_form">
      <center>
      <form class="chat_form" method="post" action="chat_post.php">
        <input type="text" style="width: 100px;" name="pseudo" value="<?php echo $_SESSION['pseudo'] ?>" placeHolder="Pseudo"/>
        <input type="text" style="width: 342px;" name="message" placeHolder="Veuillez raconter votre vie."/>
        <input type="submit" class="chat_submit" value="Envoyer" onclick="document.send_form.chat_form.chat_submit.disabled=true; document.chat_form.submit();"/>
        <input type="submit" class="chat_refresh" value="Actualiser"/>
      </form>
      </center>
    </div>
     
    </div>
    </body>
    </html>
    chat_post.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
     
    <?php
    try {
      $bdd = new PDO('mysql:host=localhost;dbname=db_mastersite', 'root', '');
    }
    catch (Exception $e) {
      die('Erreur : ' . $e->getMessage());
    }
     
    if ( ($_POST['pseudo'] == "") AND ($_POST['message'] == "") ) {
      echo 'Les champs ne peuvent être vide.' ;
      header('Location: chat.php'); // Retour à la page.
        }
     
    else if ( ($_POST['pseudo'] == "") AND ($_POST['message'] != "") ) {
      // Pas de pseudo définit, on prend celui par défaut : 'Inconnu'.
      $req = $bdd->prepare('INSERT INTO ms_chat_messages(usrname, message, date_creation) VALUES(?, ?, NOW())');
      $req->execute(array($_SESSION['pseudo'], $_POST['message']));
      header('Location: chat.php');
        }
     
    else if ( ($_POST['pseudo'] > 12) OR ($_POST['message'] > 511) ) {
        echo 'Pseudo invalide ou message trop volumineux !';
    	}
     
    else {
        // Si le pseudo a été fourni, nous mettons à jour celui-ci dans la base de données.
    	$_SESSION['pseudo'] = $_POST['pseudo'];
        $update = $bdd->prepare('UPDATE ms_chat_usrlst SET usrname = :pseudo WHERE IP = "' . $_SERVER['REMOTE_ADDR'] . '" AND logged = 1');
        $update->execute(array('pseudo' => $_POST['pseudo']));
        // Fin de mise à jour. Execution en cours ...
        $req = $bdd->prepare('INSERT INTO ms_chat_messages(usrname, message, date_creation) VALUES(?, ?, NOW())');
        $req->execute(array($_POST['pseudo'], $_POST['message']));
        header('Location: chat.php');
        }  
    ?>

  4. #4
    Membre émérite
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Par défaut
    Bonjour,

    un simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ( !isset($_SESSION['pseudo']) ) {
    $_SESSION['pseudo'] = "Inconnu";
    }
    ne suffirait pas ?

  5. #5
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Assez d'accord avec syl2095.

    Mais encore plus simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     <input type="text" style="width: 100px;" name="pseudo" value="inconnu" placeHolder="Pseudo"/>
    et tu enlèves

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $_SESSION['pseudo'] = "Inconnu";

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 3
    Par défaut
    Oui j'aurais pu ;3 ! Mais je pense avoir mal précisé en fait.

    Ce que je voulais faire, c'est qu'une fois que l'utilisateur avait envoyé son premier message, son pseudo se serait alors mit à jour à la fois dans la base de données, et dans le champ qui contient son pseudo pour éviter à avoir a le retaper sans cesse, au risque de voir souvent apparaître 'Inconnu', vous voyez :3 ?

    Désolé d'être si tardif en répondant xD

  7. #7
    Membre émérite
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Par défaut
    Citation Envoyé par Zentao Voir le message
    Ce que je voulais faire, c'est qu'une fois que l'utilisateur avait envoyé son premier message, son pseudo se serait alors mit à jour à la fois dans la base de données, et dans le champ qui contient son pseudo pour éviter à avoir a le retaper sans cesse, au risque de voir souvent apparaître 'Inconnu', vous voyez :3 ?
    Heu oui ba c'est ce que feront les 3 lignes de codes postées par syl2095

Discussions similaires

  1. problème de variable de session
    Par emilek dans le forum Langage
    Réponses: 1
    Dernier message: 18/09/2007, 13h10
  2. problème de variables de session avec Jpgraph
    Par fat dans le forum Langage
    Réponses: 1
    Dernier message: 02/07/2007, 17h26
  3. Réponses: 2
    Dernier message: 30/05/2007, 17h08
  4. Problème avec variables de session
    Par jorggy dans le forum Langage
    Réponses: 2
    Dernier message: 22/03/2007, 00h31
  5. Problème de variable de session.
    Par snowball_party dans le forum Langage
    Réponses: 7
    Dernier message: 16/09/2006, 16h38

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