Tchat en php js ajax
Résolu
flo39400
Messages postés
596
Date d'inscription
Statut
Membre
Dernière intervention
-
flo39400 Messages postés 596 Date d'inscription Statut Membre Dernière intervention -
flo39400 Messages postés 596 Date d'inscription Statut Membre Dernière intervention -
Bonjour, je suis débutant et j'ai un problème pour faire un update dans mon instance quand j'envoie un message et je sais pas comment vérifier que mon $_GET['statut'] est bien reçu mon code.
Voici la page principal :
chat.php
Le chat_control.php :
Le chat_modele.php :
Le chat_vue.php :
Merci d'avance je galère depuis des jours.....
Voici la page principal :
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:500px"> <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><?php /* <td> <label for="name" style="font-family:Comic Sans MS;"><?= $_SESSION['pseudo'] ?></label>< </td> */ ?> <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/> <center><a href="connexion.php" rel="nofollow noopener noreferrer" target="_blank">Vous connecter !</a></center> <?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 name = $("#name").val(); var message = $("#message").val(); var statut = $("#statut").val(); $("#message").val(""); $.ajax({ async: false , type: 'GET', url: 'chat_control.php?name='+name+'&message='+message+'&statut='+statut }); } }); </script> <?php if(isset($_SESSION['id'])) { if($_SESSION['statut'] == 3){ echo 'Admin statut !'; }else{ echo 'User staut !'; } } ?> <?php if(isset($_SESSION['id'])) { echo "<a href='deco.php' rel="nofollow noopener noreferrer" target="_blank">Se déconnecter !</a>"; } ?> </body> </html>
Le chat_control.php :
<?php require_once("chat_modele.php"); $bdd = bdd(); if(isset($_GET['name']) AND isset($_GET['message']) AND isset($_GET['statut'])) { if(!empty($_GET['message'])){ if($_GET['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"); } ?>
Le chat_modele.php :
<?php function bdd() { return $db = new PDO('mysql:host=localhost;dbname=site; charset=utf8', 'root', 'root'); } function ajout_message($bdd,$pseudo,$message) { $req = $bdd->prepare("INSERT INTO JS(Pseudo,Message,Date) VALUES(:Pseudo,:Message,NOW())"); $req->execute(array("Pseudo"=>$pseudo,"Message"=>$message)); } function ajout_message_admin($bdd,$pseudo,$message,$statut) { $req = $bdd->prepare("INSERT INTO JS(Pseudo,Message,Date) VALUES(:Pseudo,:Message,NOW())"); $req->execute(array("Pseudo"=>$pseudo,"Message"=>$message)); $req_admin = $bdd->prepare("UPDATE JS SET WHERE Statut = ?"); $req_admin->execute(array($statut)); } function message($bdd) { $req = $bdd->query("SELECT * FROM JS WHERE Etat = 1 ORDER BY Date DESC"); return $req; } function expire_message($bdd) { $req = $bdd->query("UPDATE JS SET Etat = 0 WHERE Date < DATE_SUB(NOW(), INTERVAL 10 MINUTE)"); } 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; } } } ?>
Le chat_vue.php :
<?php session_start(); ?> <table id="table_message"> <?php while($don = $message->fetch()) { if(pair($don['id'])) { $color = ""; } else { $color = "#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>
Merci d'avance je galère depuis des jours.....
A voir également:
- Tchat ajax
- Coco tchat - Accueil - Réseaux sociaux
- Tchat gratuit - Accueil - Réseaux sociaux
- Coco tchat nouveau ✓ - Forum Réseaux sociaux
- Tchat locaux - Forum Vos droits sur internet
- Tchat comme coco ✓ - Forum Réseaux sociaux
2 réponses
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
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.
De chat_modele.php
Puis après avoir modifier cela de chat_control.php :
Et la page chat.php
Par exemple ici je comprend pas comment récupéré mon juste avec
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.
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à
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 :
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 :
par :
J'ai modifier les fonctions :
chat_vu.php
chat_controle.php :
chat.php :
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.....
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.