Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

j'ai un count pour compter les invitations dans mon système d'amitier mais le problème c'est que quand j'accepte ou je refuse la demande d'amitier normalement il devrait passé à 0 mais il reste toujours à 1.
Le compteur fonctionne, le problème c'est que qu'il passe pas à 0 quand j'accepte ou je refuse la demande d'amitier alors que normalement il devrait.

function nombre_invitation()
{
global $bdd;
$query = $bdd->prepare("SELECT COUNT(id_invitation) FROM amis WHERE id_dest=:id AND
 date_invitation = date_confirmation ");
$query->execute(array('id' => $_SESSION['id']));
return $query->fetchColumn() != 0;

}
<?php
                $nb_invitation = nombre_invitation();
                if($nb_invitation !== 0)
                {
                ?>
                <li><a href="demande.php">Mes demandes(<?php echo $nb_invitation;?>) </a></li>
                <?php
                }
                else
                {
                ?>
                <?php
                }
                ?>

J'ai essayé de remplacer if($nb_invitation !== 0) par un seul = mais rien y fait.

Merci d'a vance

6 réponses


Lartak
Réponse acceptée

Si tu as résolu ton problème c'est une bonne chose, par contre si je peux te donner quelques conseils, ils seraient :

  • Ne supprimes pas une invitation si l'utilisateur qui en est le destinataire la refuse, car ça donnerait la possibilité à l'utilisateur qui en est l'expéditeur de faire à nouveau la demande et au bout d'un moment l'utilisateur destinataire risque d'en n'avoir marre de recevoir plusieurs demandes alors qu'il a déja refusé, il vaut mieux que tu mettes le champ correspondant par défaut à NULL et tu le passe à 1 si la demande est accepté et à 0 s'il la refuse, en supprimant l'enregistrement tu n'auras aucun moyen de savoir si la demande n'a pas déja été faite.
  • Pour ce qui concerne le comptage, il est préférable d'avoir le champ dans la table des utilisateurs étant donné qu'un nombre d'amis correspond à un utilisateur et non à une demande.
    Par contre, ce que je ne comprends pas, c'est que dans ton lien qui à le libellé Mes amis, tu affiches le nombres de demandes/invitations alors que d'après ce libellé il faudrait plutôt afficher le nombre d'amis.
    Si tu veux afficher le nombre d'invitations reçues, tu devrais plutôt mettre un libellé à ton lien correspondant à la valeur affichée, comme par exemple Invitations d'ami reçues.

Bonjour.
Il y a plusieurs choses qui ne vont pas, la première c'est que tu te contredis, car tu dis que le système fonctionne et qu'il ne fonctionne pas :

Le compteur fonctionne, le problème c'est que qu'il passe pas à 0 quand j'accepte ou je refuse la demande d'amitier alors que normalement il devrait.

Ensuite, ton problème se situe où en fait, lors de la récupération de données ou lors de l'ajout/modification/suppression en base de données ?
D'après ce que tu expliques :

le problème c'est que quand j'accepte ou je refuse la demande d'amitier normalement il devrait passé à 0 mais il reste toujours à 1.

Je crois bien que tu devrais revoir ton système car il ne me semble pas correct.
Car tu parles de 0 et 1, mais un compteur à la base, ce n'est pas pour récupérer une valeur négative|positive de type booléen (0|1).
Tu devrais plutôt par exemple :
Lors de l'acceptation ou le refus d'une invitation, tu décrémentes un champ dans la table concernant l'utilisateur de manière à récupérer la valeur de ce champ et l'afficher à ton utilisateur pour qu'il sache s'il a des invitations ou non et si oui combien il en a.
Pour faire simple :

  • Un utilisateur fait une demande d'ami, incrémentation du champ dans l'enregistrement de l'utilisateur destinataire
  • L'utilisateur destinataire accepte/refuse la demande, décrémentation du champ dans son enregistrement
    Il ne te reste plus qu'à récupérer la valeur du champ de son enregistrement, pour qu'il sache s'il a des demandes et combien ou non.

Là c'est bien sûr la version simplifiée, mais étant donné que tu n'as pas donné de précisions, j'ai fais au plus simple.

Serg77
Auteur

Salut, Je m'explique, j'ai un système d'amitier, l'utilisateur (A) donc l'expediteur va envoyer une demande d'invitation à l'utilisateur (B) le destinataire et si il accepte l'active passe à 1 sinon si il refuse l'invitation est donc supprimé.

Moi ce que je souhaite, quand un utilisateur (B) accepte une invitation de l'utilisateur (A) sont petit 1 qu'il à reçu passe à 0. Si l'utilisateur (B) reçoit 5 demandes d'invitations alors il devrait écrire (5) et quand il accepte ou il refuse il se décrémente.

Serg77
Auteur

Je pense avoir compris ce que tu voulais dire, je ne peu pas utilisé l'active comme compteur, donc j'ai fais un champs (compteur) dans ma table d'amitier en int. Et quand l'utilisateur A va envoyer à une invitation à l'utilisateur B. Alors incrémentation. Si il accepte, décrémentation et si il réfuse (rien) vu que ça va être supprimé.

Du coup j'ai ajouté dans mes deux fonction, le compteur : Elle fonctionne j'ai bien un (1) quand il y a une invitation et un 0 quand il y a une acceptation. Mais après je sais pas faire avec le count pour récupérer.

function enreg_invitation()
{
global $bdd;

$query = $bdd->prepare(" SELECT * FROM amis WHERE id_exp = :session_id AND id_dest = :get_id");
$query->execute(array('get_id' =>  $_GET['id'], 'session_id' => $_SESSION['id']));

$nb_demandes_deja_existantes  = $query->fetch();

if (!$nb_demandes_deja_existantes)

{
$compteur = 0;
$query = $bdd->prepare(" INSERT INTO amis(id_invitation,id_exp,id_dest,active, date_invitation, date_confirmation, compteur)
VALUES ('',:session_id,:get_id,0, NOW(), NOW(), :compteur)

 ");

$query->execute(array('get_id' =>  $_GET['id'], 'session_id' => $_SESSION['id'], 'compteur' => $compteur=$compteur+1));

}
}

function accepter_invitation()
{
global $bdd;
$query = $bdd->prepare("
UPDATE amis SET active=1, compteur=:compteur WHERE id_exp= :get_pseudo
AND id_dest= :session_pseudo
");
$query->execute(array('get_pseudo' => $_GET['id'], 'session_pseudo' => $_SESSION['id'], 'compteur' => $compteur = --$compteur));
}

function refuser_invitation()
{
global $bdd;
$query = $bdd->prepare("DELETE FROM amis WHERE id_exp = :get_pseudo AND id_dest = :session_pseudo");
$query->execute(array('get_pseudo' => $_GET['id'], 'session_pseudo' => $_SESSION['id']));

}
Serg77
Auteur

Bon dsl de up mais je pense que j'ai résolu mon problème, j'ai fais : Après je sais pas si tu es d'accord avec moi mais à première vu il me compte bien les invitations et me décrémente quand j'ai rien.

function nombre_invitation()
{
global $bdd;
$query = $bdd->prepare("SELECT COUNT(id_invitation) FROM amis WHERE id_dest=:id AND compteur=:compteur ");
$query->execute(array('id' => $_SESSION['id'], 'compteur' => 1));
return $query->fetchColumn() ;

}
<?php
                $nb_invitation = nombre_invitation();

                if($nb_invitation != 0)
                {
                ?>
                <li><a href="amis.php?a=amis">Mes amis <?php echo '('.$nb_invitation.')';?> </a></li>
                <?php
                }
Serg77
Auteur

D'accord, merci pour vos explications.