IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Notifications de Message : Expéditeur -> Destinataire


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 73
    Par défaut Notifications de Message : Expéditeur -> Destinataire
    Bonjour,

    J'ai une messagerie, à chaque message envoyé, une notification arrive chez le destinataire.
    Mais le problème c'est que la notification est visible chez tous les membres, même celui qui a envoyé le message.

    Voici ma table wa_messagerie :

    id
    id_expediteur
    id_destinataire
    message
    lu
    timestamp

    Voici le code notification.php inclus dans un header qui est actualisé en ajax :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    require_once('../include/config.inc.php');
    $req = $connect->prepare('SELECT COUNT(id) as row FROM wa_messagerie WHERE lu=:lu AND id_destinataire="'.$_SESSION['id'].'"');
    $req->execute(array(':lu'=>false));
    $resultat = $req->fetch(PDO::FETCH_OBJ);
    ?>
    <?php if($resultat->row > 0 && $resultat !== false) { echo $resultat->row; } ?>
    Dès que je rajoute le bout de code : AND id_destinataire="'.$_SESSION['id'].'", la notification ne fonctionne plus,
    si j'enlève le bout de code, elle fonctionne mais chez tous les membres.

    Mon script ajax :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    function getNotifications() {
            J.ajax({
                    url: "../ajax/notifications.php",
                    ifModified:true,
                    statusCode: {
                            500: function(){
                                    J('#server-500').html('Serveur en surcharge, patientez quelques instants...');
                            },
                    },
                    success: function(content){
                            J('.messagesValue').html(content);
                            if(content>0){ J('.messagesValue').css({ 'display':'block' }); }
                            if(content<1){ J('.messagesValue').css({ 'display':'none' }); }
                    }
            });
            setTimeout(getNotifications, 60000);
    }
    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 370
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 370
    Billets dans le blog
    17
    Par défaut
    Dès que je rajoute le bout de code : AND id_destinataire="'.$_SESSION['id'].'", la notification ne fonctionne plus
    Ce critère de sélection est en effet indispensable.

    As-tu débogué un minimum ?
    Que vaut $_SESSION['id'] ?
    Pourquoi ne pas préparer la requête avec $_SESSION de la même manière qu'avec :lu ?

    Il faudrait que tu affiches la requête pour être sûr que tout est correctement renseigné.

  3. #3
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 73
    Par défaut
    Comment débogué une requête ?

    J'ai réécris de la même manière qu'avec :lu, sans résultat

  4. #4
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 370
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 370
    Billets dans le blog
    17
    Par défaut
    Pour commencer : en l'affichant variables valorisées.

  5. #5
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 73
    Par défaut
    Et comment tu fais ça ?

  6. #6
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 370
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 370
    Billets dans le blog
    17
    Par défaut
    Avec echo ou print c'est assez efficace.

  7. #7
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 73
    Par défaut
    J'ai fais un var_dump
    La valeur de $_SESSION['id'] est égal à l'id du membre connecté

  8. #8
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 370
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 370
    Billets dans le blog
    17
    Par défaut
    Et la requête est bonne ? Colle-la ici.

    Essaie aussi de la soumettre directement sur phpMyAdmin (par exemple) pour voir ce que ça donne.

  9. #9
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 73
    Par défaut
    voilà la requête, elle est fausse, je ne sais pas trop qu'elle est l'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    $req = $connect->prepare('SELECT id FROM wa_messagerie WHERE lu=:lu AND id_destinataire=:id');
    $req->execute(array(':lu'=>false,':id'=>$_SESSION['id']));
    $req->setFetchMode(PDO::FETCH_OBJ);
    $req->execute();
    $array = $req->fetchALL();
    $nb = count($array); ?>
    <?php if($nb > 0 && $resultat !== false) { echo $nb; } ?>
    Le problème c'est après le AND : Si je le laisse comme ça, ca ne fonctionne pas.
    Si je l'enlève, la notification apparait mais sur tous les membres

  10. #10
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 370
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 370
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par nico44530 Voir le message
    voilà la requête
    Je ne vois pas de requête, qu'un script.

    elle est fausse, je ne sais pas trop qu'elle est l'erreur
    phpMyAdmin (ou autre client) t'afficherait l'erreur.

    Pour afficher l'erreur avec PDO :
    http://www.php.net/manual/en/pdo.errorinfo.php
    http://www.php.net/manual/en/pdostatement.errorinfo.php

  11. #11
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 73
    Par défaut
    J'ai fait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    require_once('../include/config.inc.php');
    $req = $connect->prepare('SELECT id FROM wa_messagerie INNER JOIN wa_communaute ON id_destinataire=:id WHERE lu=:lu');
    $req->execute(array(':lu'=>false,':id'=>$_SESSION['id']));
    $req->setFetchMode(PDO::FETCH_OBJ);
    $req->execute();
    $array = $req->fetchALL();
    $nb = count($array);
    ?>
    <?php if($nb > 0 && $resultat !== false) { echo $nb; if (!$req) { 
        echo "\nPDO::errorInfo():\n"; 
        print_r($connect->errorInfo()); 
    }  } ?>
    Et ça n'affiche rien.

  12. #12
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 73
    Par défaut
    Si tu veux, on va partir de zéro, ça sera plus compréhensible pour toi.

    J'ai un système de messagerie qui fonctionne entre chaque membres.
    Je voudrais que à chaque message envoyé, une notification apparaisse.

    J'utilise une page notification.php qui serait actualisé toutes les 60 secondes.
    Avec un script Ajax qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    function getNotifications() {
    	J.ajax({
    		url: "../ajax/notifications.php",
    		ifModified:true,
    		statusCode: {
    			500: function(){
    				J('#server-500').html('Serveur en surcharge, patientez quelques instants...');
    			},
    		},
    		success: function(content){
    			J('.messagesValue').html(content);
    			if(content>0){ J('.messagesValue').css({ 'display':'block' }); }
    			if(content<1){ J('.messagesValue').css({ 'display':'none' }); }
    		}
    	});
    	setTimeout(getNotifications, 60000);
    }
    Le problème c'est comment faire la requête et joindre les 2 membres qui s'envois le message à travers la notification :

    Voici ma table :

    id
    id_expediteur
    id_destinataire
    message

    lu (0,1) 0 si non lu, 1 si lu
    timestamp

    Voici ma page notification.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    require_once('../include/config.inc.php');
     
    /* Ma requête */
     
    ?>
    <?php if($resultat[0] > 0 && $resultat !== false) { echo ''.$resultat[0].''; } //Si le résultat est au dessus de 0, on affiche le résultat ?>

  13. #13
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 370
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 370
    Billets dans le blog
    17
    Par défaut
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id
    FROM wa_messagerie INNER JOIN wa_communaute ON id_destinataire=:id
    WHERE lu=:lu

    Le critère de jointure me semble léger.


    Pourquoi 2 execute( ) ?
    D'où sort $resultat ?
    Pourquoi le errorInfo( ) dans un if n'ayant rien à voir avec un contrôle d'erreur ?

  14. #14
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 73
    Par défaut
    C'est résolu

    Voila la bonne requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $req = $connect->prepare('SELECT COUNT(id) as row, id_destinataire, id_expediteur FROM wa_messagerie WHERE lu=0 AND id_destinataire=:id_expediteur');
    $req->execute(array(':id_expediteur'=>$_SESSION['id']));
    $resultat = $req->fetch(PDO::FETCH_OBJ);
    Merci quand même

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Mail] masquer adresse expéditeur et destinataire
    Par guizmotte88 dans le forum Langage
    Réponses: 1
    Dernier message: 27/11/2008, 18h00
  2. [mandriva] Notification des messages
    Par olivier57b dans le forum Thunderbird
    Réponses: 0
    Dernier message: 09/07/2008, 21h44
  3. Réponses: 0
    Dernier message: 30/07/2007, 17h34
  4. [MFC]Notification de messages (OnSend, ...)
    Par Kaori dans le forum MFC
    Réponses: 2
    Dernier message: 02/03/2005, 15h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo