Tchat en php js ajax
Résolu/Fermé
flo39400
Messages postés
596
Date d'inscription
mardi 8 avril 2008
Statut
Membre
Dernière intervention
9 septembre 2021
-
Modifié le 31 août 2017 à 01:38
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 - 8 sept. 2017 à 15:31
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 - 8 sept. 2017 à 15:31
2 réponses
jordane45
Messages postés
37253
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 mars 2023
4 551
31 août 2017 à 13:57
31 août 2017 à 13:57
Bonjour,
Oula... y'aurait plein de choses à revoir dans ton code ...
mais bon.
Concernant ton appel ajax.
Pour commencer.. je serai toi.. je le ferai en POST et non en GET
Puis.. ajoute le success et le error pour afficher, dans la console, le résultat par exemple.
côté Le chat_control.php
Et pour finir .. tu dois activer la gestion des erreurs PHP :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Oula... y'aurait plein de choses à revoir dans ton code ...
mais bon.
Concernant ton appel ajax.
Pour commencer.. je serai toi.. je le ferai en POST et non en GET
Puis.. ajoute le success et le error pour afficher, dans la console, le résultat par exemple.
var datas ={name:name
,message:message
,statut:statut};
$.ajax({
async: false ,
type: 'POST',
url: 'chat_control.php',
data : datas,
success: function(reponse){
console.log(reponse);
},
error: function(jqXHR, textStatus){
console.log(jqXHR);
alert(jqXHR.status + ":" +jqXHR.responseText );
}
});
côté Le chat_control.php
<?php
require_once("chat_modele.php");
$bdd = bdd();
//récupération PROPRE DES VARIABLES AVANT de les utiliser
$name = !empty($_POST['name']) ? $_POST['name'] : NULL;
$message = !empty($_POST['message']) ? $_POST['message'] : NULL;
$statut = !empty($_POST['statut']) ? $_POST['statut'] : NULL;
if($name && $statut) {
if($message){
if($statut$ == 3){
ajout_message_admin($bdd,$_GET['name'],$_GET['message'],$_GET['statut']);
}else{
ajout_message($bdd,$_GET['name'],$_GET['message']);
}
}else{
echo "Votre messsage est vide !";
}
}else{
expire_message($bdd);
$message = message($bdd);
require_once("chat_vue.php");
}
Et pour finir .. tu dois activer la gestion des erreurs PHP :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
flo39400
Messages postés
596
Date d'inscription
mardi 8 avril 2008
Statut
Membre
Dernière intervention
9 septembre 2021
21
8 sept. 2017 à 15:31
8 sept. 2017 à 15:31
Donc après des jours de recherche, j'ai changer le mode de ma base de donnée au lieu de faire un UPDATE pour le Statut régler sur 1 par défaut.
Je l'est laisser vide ce champs puis j'ai simplement fait un INSERT pour ajouter le Pseudo,Message,Statut,Date.
Cela simplifie le problème vu que faire deux fonctions avec un UPDATE en traitement n'a pas marcher.
Merci a vous de votre aide.
Je l'est laisser vide ce champs puis j'ai simplement fait un INSERT pour ajouter le Pseudo,Message,Statut,Date.
Cela simplifie le problème vu que faire deux fonctions avec un UPDATE en traitement n'a pas marcher.
Merci a vous de votre aide.
Modifié le 31 août 2017 à 16:00
De chat_modele.php
function bdd() { try{ return $db = new PDO('mysql:host=localhost;dbname=site; charset=utf8', 'root', 'root'); // Activation des erreurs PDO $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); } }Puis après avoir modifier cela de chat_control.php :
require_once("chat_modele.php"); $bdd = bdd(); //récupération PROPRE DES VARIABLES AVANT de les utiliser $name = !empty($_POST['name']) ? $_POST['name'] : NULL; $message = !empty($_POST['message']) ? $_POST['message'] : NULL; $statut = !empty($_POST['statut']) ? $_POST['statut'] : NULL; if($name && $statut) { if($message){ if($statut == 3){ ajout_message_admin($bdd,$_POST['name'],$_POST['message'],$_POST['statut']); }else{ ajout_message($bdd,$_POST['name'],$_POST['message']); } }else{ echo "Votre messsage est vide !"; } }else{ expire_message($bdd); $message = message($bdd); require_once("chat_vue.php"); }Et la page chat.php
$("#message").keydown(function(event) { if ( event.which == 13 ) { var datas ={name:name ,message:message ,statut:statut}; $.ajax({ async: false , type: 'POST', url: 'chat_control.php', data : datas, success: function(reponse){ console.log(reponse); } error: function(jqXHR, textStatus){ console.log(jqXHR); alert(jqXHR.status + ":" +jqXHR.responseText ); } });Par exemple ici je comprend pas comment récupéré mon juste avec
var datas ={name:name,message:message
,statut:statut};
Donc actuellement avec ces modifications quand je met du texte j'appui sur la touche entrée le text disparait mais est inscrit nul part. Et aucun message d'erreur....
Merci d'avance de votre aide.
31 août 2017 à 16:27
tu parles de récupérer ton #id ... le récupérer de où ? Celui généré par ta BDD lorsque tu ajoutes un message ??
Si oui... il faut modifier plusieurs choses....
Déjà
function ajout_message($bdd,$pseudo,$message) { $sql = "INSERT INTO JS(Pseudo,Message,Date) VALUES(:Pseudo,:Message,NOW())"; $datas = array(":Pseudo"=>$pseudo,":Message"=>$message); try{ $req = $bdd->prepare($sql); $req->execute($datas); $result = $bdd>lastInsertId(); //retourne l'id autoincrementé créé par la bdd } catch(Exception $e){ echo "Erreur ! " . $e->getMessage(); } return $result; }Tu remarqueras que j'ai placé le code dans un bloc try/catch !
Il faudra faire de même dans TOUTES tes autres fonctions !
Ensuite dans ton fichier ajax php :
require_once("chat_modele.php"); $bdd = bdd(); //récupération PROPRE DES VARIABLES AVANT de les utiliser $name = !empty($_POST['name']) ? $_POST['name'] : NULL; $message = !empty($_POST['message']) ? $_POST['message'] : NULL; $statut = !empty($_POST['statut']) ? $_POST['statut'] : NULL; $result = ""; //initialisation de la variable de retour if($name && $statut) { if($message){ if($statut == 3){ $result = ajout_message_admin($bdd,$_POST['name'],$_POST['message'],$_POST['statut']); }else{ $result = ajout_message($bdd,$_POST['name'],$_POST['message']); } }else{ $result = "Votre messsage est vide !"; } }else{ expire_message($bdd); $message = message($bdd); } //retourne la variable au format json echo json_encode($result);Ensuite... pour afficher le message... dis toi que tu dois le gérer via le javascript directement....
Tu ne dois pas faire appel à ton fichier chat_vue.php ......
ou alors tu l'inclus DIRECTEMENT dans ta page principale puis tu rempli ton tableau depuis ton js (dans le success de l'ajax par exemple ).
Au passage....
tu peux remplacer ce code :
if(pair($don['id'])) { $color = ""; } else { $color = "#EDEDED"; }par :
Modifié le 1 sept. 2017 à 09:53
J'ai modifier les fonctions :
<?php function bdd() { try{ return $db = new PDO('mysql:host=localhost;dbname=site; charset=utf8', 'root', 'root'); // Activation des erreurs PDO $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); } } function ajout_message($bdd,$pseudo,$message) { $sql = "INSERT INTO JS(Pseudo,Message,Date) VALUES(:Pseudo,:Message,NOW())"; $datas = array(":Pseudo"=>$pseudo,":Message"=>$message); try{ $req = $bdd->prepare($sql); $req->execute($datas); $result = $bdd>lastInsertId(); //retourne l'id autoincrementé créé par la bdd } catch(Exception $e){ echo "Erreur ! " . $e->getMessage(); } return $result; } function ajout_message_admin($bdd,$pseudo,$message,$statut) { $sql = "INSERT INTO JS(Pseudo,Message,Date) VALUES(:Pseudo,:Message,NOW())"; $datas = array("Pseudo"=>$pseudo,"Message"=>$message); $sql1 = "UPDATE JS SET WHERE Statut = ?"; $datas1 = array($statut); try{ $req = $bdd->prepare($sql); $req->execute($datas); } catch(Exception $e) { echo "Erreur ! " . $e->getMessage(); } try{ req1 = $bdd->prepare($sql1); $req1->execute($datas1); } catch(Exception $e) { echo "Erreur ! " . $e->getMessage(); } } function message($bdd) { $sql = "SELECT * FROM JS WHERE Etat = 1 ORDER BY Date DESC"; try{ $req = $bdd->query($sql); } catch(Exception $e) { echo "Erreur ! " . $e->getMessage(); } return $req; } function expire_message($bdd) { $sql = "UPDATE JS SET Etat = 0 WHERE Date < DATE_SUB(NOW(), INTERVAL 10 MINUTE)"; try{ $req = $bdd->query($sql); } catch(Exception $e) { echo "Erreur ! " . $e->getMessage(); } } function pair($nombre) { if ($nombre%2 == 0) return true; else return false; } function getRelativeTime($date) { // Déduction de la date donnée à la date actuelle $time = time() - strtotime($date); // Calcule si le temps est passé ou à venir if ($time > 0) { $when = "il y a"; } else if ($time < 0) { $when = "dans environ"; } else { return "il y a 1 seconde"; } $time = abs($time); // Tableau des unités et de leurs valeurs en secondes $times = array( 31104000 => 'an{s}', // 12 * 30 * 24 * 60 * 60 secondes 2592000 => 'mois', // 30 * 24 * 60 * 60 secondes 86400 => 'jour{s}', // 24 * 60 * 60 secondes 3600 => 'heure{s}', // 60 * 60 secondes 60 => 'minute{s}', // 60 secondes 1 => 'seconde{s}'); // 1 seconde foreach ($times as $seconds => $unit) { // Calcule le delta entre le temps et l'unité donnée $delta = round($time / $seconds); // Si le delta est supérieur à 1 if ($delta >= 1) { // L'unité est au singulier ou au pluriel ? if ($delta == 1) { $unit = str_replace('{s}', '', $unit); } else { $unit = str_replace('{s}', 's', $unit); } // Retourne la chaine adéquate return $when." ".$delta." ".$unit; } } } ?>chat_vu.php
<table id="table_message"> <?php while($don = $message->fetch()) { $color = $don['id']%2 ? "" : "#EDEDED"; ?> <tr style="background-color:<?php echo $color; ?>"> <td class="info_message" valign="top"> <span style="font-size:small;"><?php echo $don['Pseudo']; ?></span><br/> <?php echo getRelativeTime($don['Date']);?> </td> <td class="message" > <div class="message2" > <?php echo $don['Message'];?> </div> </td> </tr> <?php } ?> </table>chat_controle.php :
<?php require_once("chat_modele.php"); $bdd = bdd(); //récupération PROPRE DES VARIABLES AVANT de les utiliser $name = !empty($_POST['name']) ? $_POST['name'] : NULL; $message = !empty($_POST['message']) ? $_POST['message'] : NULL; $statut = !empty($_POST['statut']) ? $_POST['statut'] : NULL; $result = ""; //initialisation de la variable de retour if($name && $statut) { if($message){ if($statut == 3){ $result = ajout_message_admin($bdd,$_POST['name'],$_POST['message'],$_POST['statut']); }else{ $result = ajout_message($bdd,$_POST['name'],$_POST['message']); } }else{ $result = "Votre messsage est vide !"; } }else{ expire_message($bdd); $message = message($bdd); } //retourne la variable au format json echo json_encode($result); ?>chat.php :
<?php session_start(); ?> <html> <head> <link rel="stylesheet" href="chat.css"/> </head> <body> <table id="body"> <tr> <td id="titre">Chat en Ajax avec PHP et JQuery</td> </tr> <tr > <td style="height:300px"> <div id="chat_aff"></div> </td> </tr> <tr > <td id="form" valign="top"> <?php if(isset($_SESSION['id'])) { ?> <table id="form2"> <input id="statut" type="hidden" value="<?= $_SESSION['statut'] ?>" /> <input id="name" type="hidden" value="<?= $_SESSION['pseudo'] ?>" /> <tr> <td style="width:100%"> <label for="message" style="font-family:Comic Sans MS;">Message</label> </td> <td></td> </tr> <tr> <td colspan="2" > <input id="message" type="text" maxlength="250" /> </td> <td> </td> </tr> </table> <?php }else{ ?> <center>Vous devez être connecter pour poster un message !</center><br/> <?php } ?> </td> </tr> </table> <script src="http://code.jquery.com/jquery.min.js"></script> <script> setInterval(function() { $("#chat_aff").load("chat_control.php",function(){}); },1000); $("#message").keydown(function(event) { if ( event.which == 13 ) { var datas ={name:name ,message:message ,statut:statut}; $.ajax({ async: false , type: 'POST', url: 'chat_control.php', data : datas, success: function(reponse){ console.log(reponse); <?php include("chat_vue.php"); ?> } error: function(jqXHR, textStatus){ console.log(jqXHR); alert(jqXHR.status + ":" +jqXHR.responseText ); } }); </script> </body> </html>Mais j'ai toujours le même problème pas de message d'erreur et pas de message inscrit dans la base de donnée.....
1 sept. 2017 à 16:19
1 sept. 2017 à 23:15
Le XMLHttpRequest je sais pas, car au début tous fonctionner sauf que j'arriver pas a update l'Etat de l'utilisateur connecter dans la DB.
Maintenant même le menu pour naviguer ne marche pu, et aucune erreur pourtant j'ai activer les erreurs dans Mamp et dans le fichier de connexion.
Je comprend pas pourquoi ça ne marche pas... comme si Ajax n'arriver pas a transmettre les données au serveur php.
Je vais bosser dessus toutes la nuit je vais bien voir.
Merci d'avance de votre réponse.