Notifications nouveau message

Fermé
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 - Modifié par flo39400 le 19/03/2017 à 00:09
 Utilisateur anonyme - 19 mars 2017 à 02:29
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
<?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:

1 réponse

Utilisateur anonyme
19 mars 2017 à 02:03
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.
0
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21
19 mars 2017 à 02:20
Déjà que je suis bloqué créé une nouvelle fonction ok mais pour mettre quoi ?
Uttiliser un système JSON je veux bien mais déjà que je galère avec sa... Ça risque d'être compliqué pour moi
0
Utilisateur anonyme
19 mars 2017 à 02:29
Je te conseil d'aller voir ce tuto:

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.
0