Notifications nouveau message
flo39400
Messages postés
659
Statut
Membre
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
Voila j'ai un tchat en javascript ajax et php.
J'ai fait un système de notification mais le problème sais qu'il est basé sur le temps du message j'aimerais ajouter un condition qui désactive l'envoi de la notification.
Car celui qui envoie le message entend la notification alors que il ne devrait pas.
Comment faire cela ?
chat_modele.php
chat_control.php
tchat.php
chat_vue.php
Merci d'avance de votre aide.
Voila j'ai un tchat en javascript ajax et php.
J'ai fait un système de notification mais le problème sais qu'il est basé sur le temps du message j'aimerais ajouter un condition qui désactive l'envoi de la notification.
Car celui qui envoie le message entend la notification alors que il ne devrait pas.
Comment faire cela ?
chat_modele.php
<?php
function bdd()
{
return $db = new PDO('mysql:host=localhost;dbname=sitebeta; charset=utf8', 'root', '');
}
function ajout_message($bdd,$pseudo,$message)
{
$req = $bdd->prepare("INSERT INTO message(Pseudo,Message,Date) VALUES(:Pseudo,:Message,NOW())");
$req->execute(array("Pseudo"=>$pseudo,"Message"=>$message));
}
function message($bdd)
{
$req = $bdd->query("SELECT * FROM message ORDER BY Date DESC");
return $req;
}
function expire_message($bdd)
{
$req = $bdd->query("DELETE FROM message WHERE Date < DATE_SUB(NOW(), INTERVAL 30 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";
}
//Notification sonore a l'arriver d'un message de 1 seconde
if ($time == 1)
{
echo "<audio src='bipmessage.mp3' autoplay></audio>";
}
$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_control.php
<?php
require_once("chat_modele.php");
$bdd = bdd();
if(isset($_GET['name']) AND isset($_GET['message']))
{
ajout_message($bdd,$_GET['name'],$_GET['message']);
}
else
{
expire_message($bdd);
$message = message($bdd);
require_once("chat_vue.php");
}
?>
tchat.php
<?php
session_start();
?>
<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<?php include('menu.php'); ?>
<?php
if(isset($_SESSION['id']))
{
?>
<table id="body">
<tr>
<td id="titre">Discution :</td>
</tr>
<tr >
<td style="height:500px">
<div id="chat_aff"></div>
</td>
</tr>
<tr >
<td id="form" valign="top">
<table id="form2">
<tr>
<td style="width:30%">
<label for="name" style="font-family:Comic Sans MS;">Pseudo</label>
</td>
<td style="width:55%">
<label for="message" style="font-family:Comic Sans MS;">Message</label>
</td>
<td></td>
</tr>
<tr>
<td>
<input id="name" type="text" maxlength="20" value="<?= $_SESSION['pseudo']; ?>" disabled />
</td>
<td>
<input id="message" type="text" maxlength="250" />
</td>
<td>
<button id="submit">Envoyer</button>
</td>
</tr>
</table>
</td>
</tr>
</table>
<script src="http://code.jquery.com/jquery.min.js"></script>
<script>
setInterval(function()
{
$("#chat_aff").load("chat_control.php",function(){});
},1000);
$("#submit").click(function()
{
var name = $("#name").val();
var message = $("#message").val();
$("#message").val("");
$.ajax({
async: false ,
type: 'GET',
url: 'chat_control.php?name='+name+'&message='+message
});
});
</script>
<?php
}
else
{
echo "Vous devez être connecter pour discuter avec d'autre membres !";
}
?>
</body>
</html>
chat_vue.php
<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 de votre aide.
A voir également:
- Notifications nouveau message
- Recuperer message whatsapp supprimé - Guide
- Message absence thunderbird - Guide
- Message supprimé whatsapp - Guide
- ^^ Signification message ✓ - Forum Loisirs / Divertissements
- Epingler un message whatsapp - Accueil - Messagerie instantanée
1 réponse
Il faut mettre un moyen d’identifier l'utilisateur dans ta fonction qui permet la notification sonore, et de voir si c'est lui qui a envoyé le message ou non, ce qui implique de refaire ta fonction car le seul paramètre que tu utilises c'est la date du message.
Je te conseil de créer une fonction notification, ou tu as le message et l'utilisateur actuel, pour faire la comparaison et donc savoir si l'utilisateur doit recevoir la notif ou non.
Après si je ne me trompe pas tu rafraîchis la page qui contient les messages, je te conseilles plutôt d'utiliser un système de JSON, pour récupérer les messages, comme ça tu récupères que les messages non lu au lieu de recharger tout les messages, et tu auras un meilleur contrôle.
Je te conseil de créer une fonction notification, ou tu as le message et l'utilisateur actuel, pour faire la comparaison et donc savoir si l'utilisateur doit recevoir la notif ou non.
Après si je ne me trompe pas tu rafraîchis la page qui contient les messages, je te conseilles plutôt d'utiliser un système de JSON, pour récupérer les messages, comme ça tu récupères que les messages non lu au lieu de recharger tout les messages, et tu auras un meilleur contrôle.
Uttiliser un système JSON je veux bien mais déjà que je galère avec sa... Ça risque d'être compliqué pour moi
https://www.grafikart.fr/tutoriels/tchat-jquery-ajax-php-82
Il est un peu vieux, comme l'utilisation de mysql_ et non PDO, mais bon ça te donne les bases pour le JSON et récupération des messages.