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

Fermé
aldofkr Messages postés 35 Date d'inscription mardi 25 février 2014 Statut Membre Dernière intervention 30 juillet 2019 - Modifié le 17 déc. 2017 à 13:36
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 - 18 déc. 2017 à 18:13
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 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
17 déc. 2017 à 13:40
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 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
17 déc. 2017 à 13:52
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 mardi 25 février 2014 Statut Membre Dernière intervention 30 juillet 2019
17 déc. 2017 à 15:50
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 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649 > aldofkr Messages postés 35 Date d'inscription mardi 25 février 2014 Statut Membre Dernière intervention 30 juillet 2019
17 déc. 2017 à 16:04
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 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
17 déc. 2017 à 16:11
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 mardi 25 février 2014 Statut Membre Dernière intervention 30 juillet 2019
17 déc. 2017 à 22:57
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 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
17 déc. 2017 à 23:16
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 mardi 25 février 2014 Statut Membre Dernière intervention 30 juillet 2019
18 déc. 2017 à 16:35
voici la capture
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
18 déc. 2017 à 18:13
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