Problème affichage info bulle et date_vue
RésoluZakarya93 Messages postés 1026 Statut Membre -
1/ J'aimerai que lorsque une personne a cliqué sur l'onglet invitation sur laquelle il y avait une info bulle, elle s'efface après que l'utilisateur aie vu l'invitation, qu'est ce quii cloche sur ma function ?
<?php
//-----------------------------------------------//
// Fichier : ibi.func.php
//-----------------------------------------------//
/*
//la function qui va nous permettre d'afficher l'info-bulle des invitations
*/
function afficher_ibi_invitations(){
global $bdd;
$result=0;
//Variables
$pseudo_session = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL;
if($pseudo_session){
$sql = "SELECT COUNT(id_invitation) as NB
FROM amis
WHERE (date_invitation = date_confirmation
AND pseudo_dest=:pseudo_session)
OR (pseudo_exp=:pseudo_session AND date_confirmation > date_vue) ";
// je place les params dans une variable avant de l'utiliser :
$params = array(':pseudo_session' => $pseudo_session);
try{
$query = $bdd->prepare($sql);
$query ->execute($params);
$req= $query->fetchall();
$result= count($req)>0 ? $req[0]['NB']:0;
}catch(Exception $e) {
echo "<br>ERREUR ! ".$e->getMessage()."<br>";
echo "<br>params : <br>";
print_r($params);
}
} // Fin du if($pseudo_session)
// le return
return $result;
}
/*
//la function qui va nous permettre de mettre à jour la date_vue dans la bdd pour pouvoir cacher l'info-bulle
*/
function update_date_vue(){
global $bdd;
//récupération des variables PROPREMENT !
$pseudo_exp = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL;
if($pseudo_exp){
$sql = "UPDATE amis
SET active=1
, date_vue=NOW()
WHERE pseudo_exp = :session_pseudo";
// je place les params dans une variable avant de l'utiliser :
$params = array('session_pseudo' => $pseudo_exp);
try{
$query = $bdd->prepare($sql);
$query ->execute($params);
}catch(Exception $e) {
echo "<br>ERREUR ! ".$e->getMessage()."<br>";
echo "<br>params : <br>";
print_r($params);
}
}
}
/**
*la function qui va nous permettre d'afficher l'info-bulle des messages
*/
function afficher_ibi_messages(){
global $bdd;
$result=0;
//Variables
$pseudo_session = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL;
if($pseudo_session){
$sql = "SELECT COUNT(id_conversation) as NB
FROM conversations
WHERE pseudo_dest=:pseudo_session
OR (pseudo_exp=:pseudo_session > date_vue) ";
// je place les params dans une variable avant de l'utiliser :
$params = array(':pseudo_session' => $pseudo_session);
try{
$query = $bdd->prepare($sql);
$query ->execute($params);
$req= $query->fetchall();
$result= count($req)>0 ? $req[0]['NB']:0;
}catch(Exception $e) {
echo "<br>ERREUR ! ".$e->getMessage()."<br>";
echo "<br>params : <br>";
print_r($params);
}
} // Fin du if($pseudo_session)
// le return
return $result;
}
2/ Pour ce qui est de l'onglet "messages", le "1" ne s'affiche même pas pour que j'y puis styliser son info bulle, comme résoudre ceci ? après cela j'aimerai faire la même chose pour le 1/
voilà et ce sera vraiment terminé pour ce qui est du tuto :)
Merci d'avance ;)
- Problème affichage info bulle et date_vue
- Info - Guide
- Voici ce qu'il ne faut surtout jamais faire avec un frelon asiatique (c'est très dangereux) - Guide
- Crystal disk info - Télécharger - Informations & Diagnostic
- Affichage double ecran - Guide
- Crystal disk info mac ✓ - Forum Disque dur / SSD
6 réponses
Le problème porte sur les notifications d'invitation qui restent visibles même après consultation, lié à l'enregistrement des dates date_confirmation et date_vue lors de l'insertion initiale. Des propositions indiquent de retirer ces champs de l'insertion et de n'enregistrer que date_invitation et l'état actif, avec une fonction d'enregistrement qui transmet uniquement les identifiants des participants et la date actuelle. La version proposée donne une requête d'insertion où seuls date_invitation et actif sont définis, évitant l'initialisation de date_confirmation et date_vue et simplifiant l'historique des invitations. En parallèle, une autre piste consiste à corriger le signe dans la comparaison des dates entre date_confirmation et date_vue, en passant de date_confirmation > date_vue à date_confirmation < date_vue pour les invitations.
1/
Je suppose que lorsque le user click sur l'onglet invitation
ça lances cette fonction la : update_date_vue()
Déjà... que contient ta BDD avant et après avoir lancé la fonction ??
- est-ce qu'en BDD les valeurs sont bonnes ?
Ensuite... es tu sûr qu'il faille utiliser cette requête ci :
UPDATE amis
SET active=1
, date_vue=NOW()
WHERE pseudo_exp = :session_pseudo
C'est le active=1 qui me choque.... Cela signifie que tu valide directement le fait qu'ils deviennent amis..... ça m'étonne .. vu que tu as normalement un "bouton" prévu à cet effet.
Et puis... ça ne mets à jour QUE si c'est l'expéditeur qui cliques sur l'onglet invitation... pas le destinataire ... est-ce normal ??
2/
2/ Pour ce qui est de l'onglet "messages", le "1" ne s'affiche même pas
Autre question = Nouvelle discussion.
Merci de t'en souvenir à l'avenir.
Ta requête actuelle :
INSERT INTO amis(id_invitation,pseudo_exp,pseudo_dest,date_invitation,date_confirmation,date_vue,active) VALUES ('',:sessPseudo,:getPseudo,NOW(),NOW(),NOW(),0)
insère dans la table "amis", dans les champs :
id_invitation,
pseudo_exp,
pseudo_dest,
date_invitation,
date_confirmation,
date_vue,
active
Les valeurs (dans le même ordre que les champs cités ci-dessus
''
,:sessPseudo,
:getPseudo,
NOW(),
NOW(),
NOW(),
0
....
Donc... vu que ton souci c'est que les champs date_confirmation et date_vue ... ont une date d'enregistrée .. alors qu'ils ne devraient pas...... il te suffit de modifier la requête en les retirant !
(au passage... on peut également retirer l'ID !! )
Bref.. ça donne :
function enreg_invitation() {
global $bdd; // déclaration globale de BDD
$sess_pseudo = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL;
$get_pseudo = isset($_GET['pseudo'])?$_GET['pseudo']:NULL;
if($sess_pseudo && $get_pseudo) {
$sql = "INSERT INTO amis
(pseudo_exp
,pseudo_dest
,date_invitation
,active)
VALUES (:sessPseudo
,:getPseudo
,NOW()
,0)";
$params = array(":sessPseudo" =>$sess_pseudo
,":getPseudo" => $get_pseudo );
try {
$query = $bdd->prepare($sql);
$req = $query->execute($params);
}catch(Exception $e){
// en cas de soucis dans la requete :
echo "<br>ERREUR ! ".$e->getMessage()."<br>";
echo "<br>params : <br>";
print_r($params);
}
}//fin du if !
}//fin de la fonction
Maintenant... peux tu tester la requête suivante ( avec jean ou zak)
SELECT COUNT(id_invitation) as NB
FROM amis
WHERE (date_vue = '0000-00-00 00:00:00'
OR date_confirmation < date_vue )
AND pseudo_dest='jean'
.. ce qui devrait afficher les demandes qui sont destinées à Jean (ou xzak47..si tu changes dans la requêtee) ET qui n'ont pas encore été vues (date_vue =00 ) Ou celles qui ont déjà été vues... mais qui n'ont pas encore été confirmées (ou supprimées) ..
<?php
//-----------------------------------------------//
// Fichier : ibi.func.php
//-----------------------------------------------//
/*
//la function qui va nous permettre d'afficher l'info-bulle des invitations
*/
function afficher_ibi_invitations(){
global $bdd;
$result=0;
//Variables
$pseudo_session = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL;
if($pseudo_session){
$sql = "SELECT COUNT(id_invitation) as NB
FROM amis
WHERE (date_vue = '0000-00-00 00:00:00'
OR date_confirmation < date_vue
AND pseudo_dest=:session_pseudo)";
// je place les params dans une variable avant de l'utiliser :
$params = array(':pseudo_session' => $pseudo_session);
try{
$query = $bdd->prepare($sql);
$query ->execute($params);
$req= $query->fetchall();
$result= count($req)>0 ? $req[0]['NB']:0;
}catch(Exception $e) {
echo "<br>ERREUR ! ".$e->getMessage()."<br>";
echo "<br>params : <br>";
print_r($params);
}
} // Fin du if($pseudo_session)
// le return
return $result;
}
/*
//la function qui va nous permettre de mettre à jour la date_vue dans la bdd pour pouvoir cacher l'info-bulle
*/
function update_date_vue(){
global $bdd;
//récupération des variables PROPREMENT !
$pseudo_exp = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL;
if($pseudo_exp){
$sql = "UPDATE amis
SET date_vue=NOW()
WHERE pseudo_exp = :session_pseudo AND active=1";
// je place les params dans une variable avant de l'utiliser :
$params = array('session_pseudo' => $pseudo_exp);
try{
$query = $bdd->prepare($sql);
$query ->execute($params);
}catch(Exception $e) {
echo "<br>ERREUR ! ".$e->getMessage()."<br>";
echo "<br>params : <br>";
print_r($params);
}
}
}
/**
*la function qui va nous permettre d'afficher l'info-bulle des messages
*/
function afficher_ibi_messages(){
global $bdd;
$result=0;
//Variables
$pseudo_session = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL;
if($pseudo_session){
$sql = "SELECT COUNT(id_conversation) as NB
FROM conversations
WHERE pseudo_dest=:pseudo_session
OR (pseudo_exp=:pseudo_session > date_vue) ";
// je place les params dans une variable avant de l'utiliser :
$params = array(':pseudo_session' => $pseudo_session);
try{
$query = $bdd->prepare($sql);
$query ->execute($params);
$req= $query->fetchall();
$result= count($req)>0 ? $req[0]['NB']:0;
}catch(Exception $e) {
echo "<br>ERREUR ! ".$e->getMessage()."<br>";
echo "<br>params : <br>";
print_r($params);
}
} // Fin du if($pseudo_session)
// le return
return $result;
}
mais j'ai : Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\wamp\www\rs\functions\ibi.func.php on line 25
- La demande... actuellement... elle est acceptée (c'est à dire active=1 ) ou pas (active = 0 )?
- Que contiennent les champs dans ta table pour la demande que tu essaies de faire afficher ?
-Tu dis que tu as toujours les mêmes soucis... c'est à dire ??? pourrais tu être un peu plus précis ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionavec cette requete :
UPDATE amis
SET date_vue=NOW()
WHERE pseudo_dest = 'xzak47'
AND active=0
-je n'ai ni accepté ni refusé l'invitation, elle est toujours en cours (car je teste le date_vue)
- date_vue est à 00000000 de même que date_confirmation
- meme probleme du dessus : rien n'a changé (meme en bdd), j'ai même refais un test en refusant l'invitation et la renvoyant avec le pseudo jean, il recoit lui meme une info bulle sur l'onglet invitation alors que c'est l'expediteur..
function afficher_ibi_messages(){
global $bdd;
$result=0;
//Variables
$pseudo_session = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL;
if($pseudo_session){
$sql = "SELECT COUNT(id_invitation) as NB
FROM amis
WHERE (date_vue = '0000-00-00 00:00:00'
OR date_confirmation < date_vue )
AND pseudo_dest= :pseudo_session ";
// je place les params dans une variable avant de l'utiliser :
$params = array(':pseudo_session' => $pseudo_session);
try{
$query = $bdd->prepare($sql);
$query ->execute($params);
$req= $query->fetchall();
$result= count($req)>0 ? $req[0]['NB']:0;
}catch(Exception $e) {
echo "<br>ERREUR ! ".$e->getMessage()."<br>";
echo "<br>params : <br>";
print_r($params);
}
} // Fin du if($pseudo_session)
// le return
return $result;
}
Il faut y mettre la requête
$sql = "SELECT COUNT(id_invitation) as NB
FROM amis
WHERE (date_vue = '0000-00-00 00:00:00'
OR date_confirmation < date_vue )
AND pseudo_dest= :pseudo_session ";
.. la position des parenthèses a son importance !!
<?php
//-----------------------------------------------//
// Fichier : ibi.func.php
//-----------------------------------------------//
/*
//la function qui va nous permettre d'afficher l'info-bulle des invitations
*/
function afficher_ibi_invitations(){
global $bdd;
$result=0;
//Variables
$pseudo_session = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL;
if($pseudo_session){
$sql = "SELECT COUNT(id_invitation) as NB
FROM amis
WHERE (date_vue = '0000-00-00 00:00:00'
OR date_confirmation < date_vue )
AND pseudo_dest= :pseudo_session ";
// je place les params dans une variable avant de l'utiliser :
$params = array(':session_pseudo' => $pseudo_session);
try{
$query = $bdd->prepare($sql);
$query ->execute($params);
$req= $query->fetchall();
$result= count($req)>0 ? $req[0]['NB']:0;
}catch(Exception $e) {
echo "<br>ERREUR ! ".$e->getMessage()."<br>";
echo "<br>params : <br>";
print_r($params);
}
} // Fin du if($pseudo_session)
// le return
return $result;
}
/*
//la function qui va nous permettre de mettre à jour la date_vue dans la bdd pour pouvoir cacher l'info-bulle
*/
function update_date_vue(){
global $bdd;
//récupération des variables PROPREMENT !
$pseudo_exp = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL;
if($pseudo_exp){
$sql = "UPDATE amis
SET date_vue=NOW()
WHERE pseudo_dest = :session_pseudo AND active=0";
// je place les params dans une variable avant de l'utiliser :
$params = array('session_pseudo' => $pseudo_exp);
try{
$query = $bdd->prepare($sql);
$query ->execute($params);
}catch(Exception $e) {
echo "<br>ERREUR ! ".$e->getMessage()."<br>";
echo "<br>params : <br>";
print_r($params);
}
}
}
/**
*la function qui va nous permettre d'afficher l'info-bulle des messages
*/
function afficher_ibi_messages(){
global $bdd;
$result=0;
//Variables
$pseudo_session = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL;
if($pseudo_session){
$sql = "SELECT COUNT(id_conversation) as NB
FROM conversations
WHERE pseudo_dest=:pseudo_session
OR (pseudo_exp=:pseudo_session > date_vue) ";
// je place les params dans une variable avant de l'utiliser :
$params = array(':pseudo_session' => $pseudo_session);
try{
$query = $bdd->prepare($sql);
$query ->execute($params);
$req= $query->fetchall();
$result= count($req)>0 ? $req[0]['NB']:0;
}catch(Exception $e) {
echo "<br>ERREUR ! ".$e->getMessage()."<br>";
echo "<br>params : <br>";
print_r($params);
}
} // Fin du if($pseudo_session)
// le return
return $result;
}
bon.. essaye avec ça :
function afficher_ibi_invitations(){
global $bdd;
$result=0;
//Variables
$pseudo_session = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL;
if($pseudo_session){
$sql = "SELECT COUNT(id_invitation) as NB
FROM amis
WHERE (date_vue = '0000-00-00 00:00:00'
OR date_confirmation < date_vue )
AND pseudo_dest= :pseudo_session ";
// je place les params dans une variable avant de l'utiliser :
$params = array(':pseudo_session' => $pseudo_session);
try{
$query = $bdd->prepare($sql);
$query ->execute($params);
$req= $query->fetchall();
$result= count($req)>0 ? $req[0]['NB']:0;
}catch(Exception $e) {
echo "<br>ERREUR ! ".$e->getMessage()."<br>";
echo "<br>params : <br>";
print_r($params);
}
} // Fin du if($pseudo_session)
// le return
return $result;
}
le date_vue fonctionne dans la table mais pas sur le site!!
//la function qui va nous permettre de mettre à jour la date_vue dans la bdd pour pouvoir cacher l'info-bulle
*/
function update_date_vue(){
global $bdd;
//récupération des variables PROPREMENT !
$pseudo_session = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL;
if( $pseudo_session){
$sql = "UPDATE amis
SET date_vue=NOW()
WHERE pseudo_dest = :session_pseudo
AND active=0";
// je place les params dans une variable avant de l'utiliser :
$params = array(':session_pseudo' => $pseudo_session);
try{
$query = $bdd->prepare($sql);
$query ->execute($params);
}catch(Exception $e) {
echo "<br>ERREUR ! ".$e->getMessage()."<br>";
echo "<br>params : <br>";
print_r($params);
}
}
}
//fonction qui va nous permettre de mettre à jour la date_vue dans la bdd pour pouvoir cacher l'infobulle function update_date_vue(){ $query = mysql_query("UPDATE amis SET date_vue= NOW() WHERE pseudo_exp = '{$_SESSION['pseudo']}' AND active = 1") or die(mysql_error()); }et ma fonction pdo :
//la function qui va nous permettre de mettre à jour la date_vue dans la bdd pour pouvoir cacher l'info-bulle */ function update_date_vue(){ global $bdd; //récupération des variables PROPREMENT ! $pseudo_exp = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL; if($pseudo_exp){ $sql = "UPDATE amis SET date_vue=NOW() WHERE pseudo_exp = :session_pseudo AND active=1"; // je place les params dans une variable avant de l'utiliser : $params = array('session_pseudo' => $pseudo_exp); try{ $query = $bdd->prepare($sql); $query ->execute($params); }catch(Exception $e) { echo "<br>ERREUR ! ".$e->getMessage()."<br>"; echo "<br>params : <br>"; print_r($params); } } }des remarques ?
Regarder les valeurs AVANT ...puis APRES avoir cliqué sur ton lien d'update ?????