Afficher mon message enregistré au préalable dans mon tchat box

aldofkr Messages postés 35 Date d'inscription   Statut Membre Dernière intervention   -  
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour ami développeur,
j'ai un blocage sur mon code jquery. je voudrais que le message que j'envoie dans ma base de données affiche aussi automatiquement dans mon tchat box. voici le code

<div class="chat" id="popup" >
 <div class="chat_head">Assistance
  <button data-widget="remove" id="removeClass" style="background:#FF9933; border:none;" class="chat-header-button pull-right" type="button"><span class="glyphicon glyphicon-off"></span></button>
 </div>
 <form method="post" class="tchat">
 <?php if(!empty($_SESSION['pseudo'])): ?>
  <div class="chat_body">

   <div class="chat_body">
   <?php foreach ($result as $res): ?>
    <div class="msg2">
     <?= htmlentities($res->message); ?>
    </div>
   <?php endforeach; ?>
   </div>
  </div>
 <?php else: ?>
 <div class="form-group">
  <input class="form-control" placeholder="pseudo" type="text" name="pseudo">
 </div>
 <div class="chat_body" style="height:200px;">
  <div class="msg_insert">
  </div>
 </div>
 <?php endif;  ?>
 <div class="chat_foot">
  <textarea class="msg_input" placeholder="Message" rows="3" name="message"></textarea>
  <button type="button" id="envoyer" class="btn btn-primary form-control"><span class="glyphicon glyphicon-send"></span></button>
 </div>
</form>
</div>

ensuite la code php qui récupère mes messages depuis la base de données:
<?php
$d = array();
$d['result'] = "";

if ($_POST['action'] == "affichmsg"){
 $_POST['lastid']=floor($_POST['lastid']);
 $lastid = $_POST['lastid'];
 $req= $pdo->prepare("SELECT * FROM message WHERE idmsg > $lastid ORDER BY date ASC");
 $req -> execute();
 $res= $req -> fetchAll();
 foreach($res as $result){
  $d['result'] .= htmlentities($result -> message);
 }
 $d['erreur'] = "ok";
}
?>

je précise que cela fonction et qu'il recupère le dernier message. enfin mon code jquery qui doit en principe fait afficher ce message d&ans la tchat box:
function affichmsg(){
   $.ajax({
    type: "POST",
    url: "fonction-chat.php",
    datatype: "json",
    data: {action:"affichmsg",pseudo:"",lastid:lastid},
    success: function(data){
     if(data.erreur = "ok"){
      $('.tchat .msg2').append(data.result)
     }else{
      alert('pas ok');
     }
     }
   })  
   return false;
}


EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).

Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.
Jordane45

juste au niveau de la ligne où il y a "append", il est censé ajouter ce dernier message dans ma <div class="msg2"></div>. mais ça ne marche pas. je voudrais avoir votre expertise sur la chose. merci
A voir également:

3 réponses

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

As tu vérifié dans la console de ton navigateur si il n'y avait pas d'erreur ,
As tu regardé via un console.log ce que te retourne ta variable data dans le success ?

Au passage, msg2 est un enfant de chat_body lui même enfant d'un autre chat_body lui même enfant de tchat ...
Pourquoi ne pas simplement faire :
 $('.msg2').append(data.result) ..


Ou mieux..; mettre un ID à ta div et l’appeler depuis cet ID au lieu d'utiliser une class.


0
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
Bonjour,

     if(data.erreur = "ok"){
      $('.tchat .msg2').append(data.result)
     }else{
      alert('pas ok');
     }


Tu as mis un = simple, au lieu d'un double ==

Xavier
0
aldofkr Messages postés 35 Date d'inscription   Statut Membre Dernière intervention  
 
j'ai mis une double =, mais il saute carrement la ligne suivante et applique le "else" comme si ce code...

foreach($res as $result){
$d['result'] .= htmlentities($result -> message);
}
$d['erreur'] = "ok";
}
.... ne fonctionnait pas. tu as une idée?
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > aldofkr Messages postés 35 Date d'inscription   Statut Membre Dernière intervention  
 
As tu fais ce que je t'ai demandé à savoir afficher le contenu de tes variables dans la console de ton navigateur en ajoutant des console.log ?

Au passage, active la gestion des erreurs PDO dans ton code et place ta requête dans un bloc try/catch
voir ceci :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs


NB : Pour poster du code sur le forum.. merci d'utiliser la coloration syntaxique (les balises de code).
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

.

.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Au passage.. il te manque :
- Le retour des variables
- La connexion à ta bdd

Voici :
<?php
//activation de l'affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

//connexion à la bdd
require_once "ton_fichier_de_connexion_a_ta_bdd.php";

//initialisation des variables
$d = array();

//récupération PROPRE des variables AVANT de les utiliser
$action = !empty($_POST['action']) ? $_POST['action'] : NULL;
$lastid = !empty($_POST['lastid']) ? $_POST['lastid'] : NULL;

//début du traitement
if ($action == "affichmsg"){
  $sql = "SELECT * FROM message WHERE idmsg > :lastid ORDER BY date ASC";
  $datas = array(':lastid'=>$lastid);

  //Execution de la requete
    try{
      $req = $bdd -> prepare($sql) ;
      $req->execute($datas);
      $res = $req->fetchAll();
      foreach($res as $result){
          $d['result'] .= htmlentities($result -> message);
      }
      $d['erreur'] = "ok";
    }catch(Exception $e){
      // en cas d'erreur :
       $d['erreur'] =  " Erreur ! ".$e->getMessage();   
    }
}else{
  $d['erreur'] = 'Action inconnue';
}

//retourne les variables
echo json_encode($result);
?>
0
aldofkr Messages postés 35 Date d'inscription   Statut Membre Dernière intervention  
 
merci pour ta reponse jordane. mais il y a un autre truc. j'ai l'impression qu'il ne retourne pas les variables json pourtant dans ma console c'est écrit erreur = "ok"
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Tu peux nous faire un capture ecran de la console et nous montrer ton code JavaScript corrigé avec les deux == dans ton if ?
0
aldofkr Messages postés 35 Date d'inscription   Statut Membre Dernière intervention  
 
voici la capture
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
D'après ta capture .. ta variable ne contient rien hormis le erreur

On va donc ajouter du debug dans ton PHP ...

<?php
//activation de l'affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

//connexion à la bdd
require_once "ton_fichier_de_connexion_a_ta_bdd.php";

//initialisation des variables
$d = array();

//récupération PROPRE des variables AVANT de les utiliser
$action = !empty($_POST['action']) ? $_POST['action'] : NULL;
$lastid = !empty($_POST['lastid']) ? $_POST['lastid'] : NULL;

//début du traitement
if ($action == "affichmsg"){
  $sql = "SELECT * FROM message WHERE idmsg > :lastid ORDER BY date ASC";
  $datas = array(':lastid'=>$lastid);

  //Execution de la requete
    try{
      $req = $bdd -> prepare($sql) ;
      $req->execute($datas);
      $res = $req->fetchAll();
	  if(!empty($res)){
		  foreach($res as $result){
			  $d['result'] .= htmlentities($result -> message);
		  }
		  $d['erreur'] = "ok";
	  }else{
		  $d['erreur'] = "Erreur ! La requête n'a rien retournée... ";  
	  } 	
    }catch(Exception $e){
      // en cas d'erreur :
       $d['erreur'] =  " Erreur ! ".$e->getMessage();   
    }
}else{
  $d['erreur'] = 'Action inconnue';
}

$d['debug'] = array('POST'=>$_POST,'QUERY'=>$sql);

//retourne les variables
echo json_encode($d);
?>
0