Problème minichat.php

Résolu
Utilisateur anonyme -  
 Utilisateur anonyme -
Bonjour,

Je suis en train de faire un petit espace membre et j'ai un problème au niveau du minichat, il n'affiche que les messages et pas les pseudo.

Sur une page register.php le visiteur s'inscrit avec un pseudo et un mot de passe. Le pseudo est mis das une session puis le visiteur est redirigé vers minichat.php (ou il doit taper un message). Cette page affiche le message avec le pseudo qui va avec ( récupéré avec $_SESSION["pseudo"].

Problème : pas de pseudo, enfaite le problème c'est que le pseudo n'apparait pas dans la base de donnée ( table = minichat )

Voici les codes :

register.php

<?php include ("cnx.php");
//démarrage de la session
session_start(); ?>

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8" />
 </head>

 <body>
  <h2> Formulaire d'inscription : </h2>

  <form action="" method = "POST">
   <label for="pseudo"> pseudo : </label> </br>
   <input type="texte" name = "pseudo" /> </br>
 
   <label for="password"> Password : </label> </br>
   <input type="password" name = "password" /> </br>
 
   <input type="submit" value ="Inscription" />
  </form> 
 
<?php

// On vérifie que le formulaire à été complété et si les champs ne sont pas vides
if ( isset($_POST) && (!empty($_POST['pseudo'])) && (!empty($_POST['password'])) )
{
 //On met le résultat pseudo du formulaire dans $pseudo
 $pseudo = addslashes($_POST["pseudo"]) ;
 $password = addslashes($_POST["password"]) ;

 //préparation de la requête 
 $params = array(":pseudo"=>$pseudo);
 $sql = "SELECT pseudo FROM utilisateurs WHERE pseudo = :pseudo" ;

 // execution de la requete 
 $query = $cnx->prepare($sql);
 $query->execute($params);

 //Récupère tous les résultats dans un ARRAY
 $result = $query->fetchAll();

 $nbResult = count($result);

 if($nbResult==1)
 {
  echo'Ce pseudo est déjà utilisé';
 }
 else 
 { 
  $sql ="INSERT INTO utilisateurs (pseudo, password) VALUE (:pseudo, '$password')";
  $params = array(":pseudo"=>$pseudo);
  $query = $cnx->prepare($sql);
  $result =  $query->execute($params); 
  $_SESSION["pseudo"] = addslashes($_POST['pseudo']) ;
  header("location: minichat.php") ;
 } 
}

?>  
 
 
 </body>
</html>


Et minichat.php

<?php
//démarrage de la session
session_start();

?> 
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Mini-chat</title>
    </head>
    <body>
    
     <form action="" method="post">
        <p>
        <label for="message">Message</label> :  <input type="text" name="message" id="message" /><br />

        <input type="submit" value="Envoyer" />
       </p>
    </form>
        
 <p> <a href="logout.php"> Déconnection </a> </p>  
  
<?php  

// Connexion à la base de données
try
{
 $cnx = new PDO('mysql:host=mysql.hostinger.fr;dbname=u214604578_dunce', 'u214604578_user', 'motdepasse');
}
catch(PDOException $e)
{
    die('Erreur : '.$e->getMessage());
}



if ( isset($_POST) && (!empty($_POST['message'])) )
{
 //On met le résultat pseudo du formulaire dans $pseudo
 $message = addslashes($_POST["message"]) ;
 
 //préparation de la requête 
 $params = array(":message"=>$message);
 $sql = "INSERT INTO minichat (pseudo, message) VALUES($_SESSION['pseudo'], :message)" ;

 // execution de la requete 
 $query = $cnx->prepare($sql);
 $query->execute($params);
 $_SESSION["poste"] = true;
}
else
{
 echo"renseigner un message !";
} 


//récupération des messages
if($_SESSION["poste"] == true)
{
 // Récupération des 10 derniers messages
 
 //On met le résultat pseudo du formulaire dans $pseudo
 $message = addslashes($_POST["message"]) ;
 
 //préparation de la requête
 $sql = "SELECT pseudo, message FROM minichat ORDER BY ID DESC LIMIT 0, 30" ;

 // execution de la requete 
 $query = $cnx->prepare($sql);
 $query->execute();

 // Affichage de chaque message (toutes les données sont protégées par htmlspecialchars)
 while ($donnees = $query->fetch())
 {
  echo '<p><strong>' . htmlspecialchars($donnees["pseudo"]) . '</strong> : ' . htmlspecialchars($donnees["message"]) . '</p>';
 }
} 

?>   
  
    </body>
</html>


Quelqu'un voit-il ou j'ai fais mon erreur ? Merci :-)


EDIT : Ajout du langage dans les balises de code
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

.

1 réponse

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,

Premier point.... tu as un fichier de connexion à ta BDD ....
pourquoi ne pas l'utiliser dans ton fichier minichat.php plutôt que de réécrire le code de connexion ???

Ensuite ....
prends l'habitude de tester avec ISSET tes variables AVANT de les utiliser (il me semblait te l'avoir déjà dit .. ^^ )

Donc , dans minichat.php
<?php 

//démarrage de la session
session_start(); ?>

//Connexion à la BDD
include ("cnx.php");

//récupération des variables
 $message = isset($_POST["message"])?addslashes($_POST["message"]) :NULL;
 $pseudo = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL; 

if ( $pseudo && !empty(message ) ) {
 //préparation de la requête 
 $params = array(":message"=>$message,":pseudo"=>$pseudo);
 $sql = "INSERT INTO minichat (pseudo, message) VALUES(:pseudo, :message)" ;

 // execution de la requete 
 $query = $cnx->prepare($sql);
 $query->execute($params);
 $_SESSION["poste"] = true;
} else {
 echo"renseigner un message !";
 //--------------------------------------------------//
 // Le temps des tests :
  echo "<br> SESSION : <br>";
  print_r($_SESSION);
  echo "<br> Message : <br>";
  echo $message;
  //--------------------------------------------------//
} 






0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
PS : Merci de préciser le LANGAGE dans les balises de code

Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

.
0
Utilisateur anonyme > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
C'est vrai ^^ j'essaye ça demain ! Merci
0