Probleme Requete SQL gestion amis

Jeremdu54 Messages postés 10 Date d'inscription   Statut Membre Dernière intervention   -  
Jeremdu54 Messages postés 10 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Voila je suis actuellement en train de creer pour mon site web un gestionnaire d'amis.Je m'explique :
-lorsque je clique sur gerer la liste d'amis j'apercois plusieurs onglet:
-Accueil
-Ajouter un amis
lorsque je met ajouter un amis,il trouve bien la personne et insert correctement dans la table mais j'ai décider de faire deux insertion pour que l'ajout fonctionne dans les deux sens:
X amis avec Y et Y amis avec X.Cependant il met crée deux insertion mais une completement fausse. par exemple il me rentre:

ami from ami to ami_confirm ami-date
1 7 0 time
0 1 1 time

voici le code add_amis.php :
<fieldset>  
                <legend>Ajouter un ami</legend>  
                <p><label for="pseudo">Pseudo :</label> <input type="text" name="pseudo" id="pseudo" /></p>  
                  
                <p class="centrer"><center><input type="submit" value="Ajouter en ami" /></p>  
  <?php  
    
 }  
 else{  
                  
   $pseudo = htmlspecialchars($_POST['pseudo']);  
   //On vérifie que le pseudo renvoit bien quelque chose :o (1)  
   $requete = mysql_query("SELECT COUNT(*) AS nbr,id FROM users  
   WHERE username = '".$pseudo."'") or die(mysql_error());  
   $data = mysql_fetch_assoc($requete);  
   $pseudo_exist = $data['nbr'];  
   $i = 0;  
   if(!$pseudo_exist)  
   {  
   echo '<div class="erreur">Erreur :<br />ce membre n\'existe pas.</div>  
   <p>Cliquez <a href="/add_amis">ici</a> pour réessayer.</p>';  
   $i++;  
   }  
   
        // On vérifie que le membre n'est pas déjà un ami (2)  
        $deja_ami = @mysql_result(mysql_query("SELECT COUNT(*) AS nbr FROM amis  
                        WHERE ami_from = '".$_SESSION['userid']."' AND ami_to = '".$data['id']."'  
                        OR ami_to = '".$_SESSION['userid']."' AND ami_from = '".$data['id']."'"));  
        if ($deja_ami != 0)  
        {  
                echo '<div class="erreur">Erreur :<br />ce membre fait déjà parti de vos amis ou a déjà proposé son amitié.</div>  
                <p>Cliquez <a href="/add_amis">ici</a> pour réessayer.</p>';  
                $i++;  
        }  
   
        // On vérifie que le membre ne s'ajoute pas lui même (3)  
        if ($data['id'] == $_SESSION['userid'])  
        {  
                echo '<div class="erreur">Erreur :<br />vous ne pouvez pas vous ajouter vous même.</div>  
                <p>Cliquez <a href="/add_amis">ici</a> pour réessayer.</p>';  
                $i++;  
        }  
   
        // Si tout colle, on lance la requête  
        if ($i == 0)  
        {  
                mysql_query("INSERT INTO amis (ami_from, ami_to, ami_confirm, ami_date)  
                        VALUES('".$_SESSION['userid']."', '".$data['id']."', 0,'".time()."')") or die(mysql_error());  
      
    mysql_query("INSERT INTO amis (ami_from, ami_to, ami_confirm, ami_date)  
                        VALUES('".$data['id']."', '".$_SESSION['userid']."', 1,'".time()."')") or die(mysql_error());  
                echo '<div class="info"><strong>'.$pseudo.'</strong> a bien été ajouté à vos amis, il faut toutefois qu\'il donne son accord.</div>';  
        }  
 }


Donc il me trouve $data['id']== 0 ... Pourquoi?



A voir également:

4 réponses

Utilisateur anonyme
 
Bonjour

Que $data['id'] change de valeur entre deux lignes, je n'y crois pas du tout.

Peux-tu vérifier les requêtes que tu exécutes réellement :

$requete="INSERT INTO amis (ami_from, ami_to, ami_confirm, ami_date) VALUES('".$_SESSION['userid']."', '".$data['id']."', 0,'".time()."')";
echo $requete;  
mysql_query($requete) or die(mysql_error());  
      
$requete="INSERT INTO amis (ami_from, ami_to, ami_confirm, ami_date) VALUES('".$data['id']."', '".$_SESSION['userid']."', 1,'".time()."')";
echo $requete; 
mysql_query($requete) or die(mysql_error()); 


D'autre part, il n'y a pas de 'else' à ton if(!$pseudo_exist). Donc la suite est exécutée même si le pseudo n'existe pas... Dans ce cas, Il n'est pas impossible que tu insères non pas une seule mais deux lignes erronées.
0
Jeremdu54 Messages postés 10 Date d'inscription   Statut Membre Dernière intervention  
 
Merci pour ta reponse. j'ai remarquer une erreur un petit peu avant ce souci est donc resolu il m'affiche bien les pseudo et l'ajout se fais bien dans les deux sens.Maintenant dans le but l'ameliorer je souhaite faire un statut de l'utilisateur : connecté ou non.
j'ai deja un compteur_connecté comme table et ce dernier m'affiche bien les membre connectés si ce dernier ne depasse pas iun temps d'inactivité.
mon souci c'est que l'icone reste rouge quoi qu'il arrive.
voici mon code:
$dnns2 = mysql_query('select pseudo from cpt_connectes');
					$dnns3 = mysql_query('select username from users');
					$dn2 = mysql_fetch_array($dnns2);
					$dn3 = mysql_fetch_array($dnns3);
while ($donnees_amis = mysql_fetch_assoc($requete_amis))
{
 if($dn2['pseudo'] == $dn3['username'] ){
	 $img = 'enLigne.png';
}
else{
	 $img= 'horsLigne.png';
}
0
Utilisateur anonyme
 
Il n'y a pas assez de code pour pouvoir analyser ce qui se passe. Mais je vois déjà un truc bizarre :
 if($dn2['pseudo'] == $dn3['username'] )
Ce test est toujours le même à chaque itération de ton while. S'il n'y a pas d'autre $dn2 = mysql_fetch_array($dnns2);, ta comparaison porte toujours sur la première ligne de cpt_connectes et la première ligne de users.
S'ils sont différents lors de la première comparaison, il n'y a pas de raison que ça change.
0
Jeremdu54 Messages postés 10 Date d'inscription   Statut Membre Dernière intervention  
 
La question dans ce cas est: comment faire pour qu'il lise toute les ligne de ma table users et toutes les lignes de ma table cpt_connectes et comment les comparer.J'ai que ceci comme code a te fournir.En effet je veux permettre l'affichage du statut en sachant si la personne est connecté ou non je peut cependant je peut te fournir une partie de code avant.. et une partie de code apres:
$requete = mysql_query("SELECT id FROM users
			WHERE username = '".$pseudo."'
			GROUP BY username") or die(mysql_error());
			$data = mysql_fetch_assoc($requete);
			
$requete_amis = mysql_query("SELECT ami_from, ami_date, users.username
FROM amis
LEFT JOIN users ON id = ami_to
WHERE ami_from = '".$_SESSION['userid']."' AND ami_confirm = '1'
ORDER BY ami_date DESC") or die(mysql_error());


if (mysql_num_rows($requete_amis) == 0)
{
 echo '<table width="880" border="1" cellpadding="0" style="border-collapse: collapse" bordercolor="blue">
 <tr>
 <td bgcolor="#CCCCFF" width=5% align="center">Vous n\'avez aucun amis.</td></tr></table>';
}

else
{
?>
<table border="1" cellspacing="0">
<tr>
<th>Statut</th>
<th>Pseudo</th>
<th>Envoyer un MP</th>
<th>Supprimer</th>
</tr>
<tbody>
<?php
					$dnns = mysql_fetch_array(mysql_query('select count(pseudo) as nb from cpt_connectes where pseudo="'.$_SESSION['username'].'"'));
					$times_m_5mins = time()-(60*5);
					mysql_query('delete from cpt_connectes where timestamp<"'.$times_m_5mins.'"');
					$dnns2 = mysql_query('select pseudo from cpt_connectes');
					$dnns3 = mysql_query('select username from users');
					$dn2 = mysql_fetch_array($dnns2);
					$dn3 = mysql_fetch_array($dnns3);
while ($donnees_amis = mysql_fetch_assoc($requete_amis))
{
 if($dn2['pseudo'] == $dn3['username'] ){
	 $img = 'enLigne.png';
}
else{
	 $img= 'horsLigne.png';
}

?>
<table width="880" border="1" cellpadding="0" style="border-collapse: collapse" bordercolor="blue">
<tr>
<td bgcolor="#CCCCFF" width=5% align="center"><img src="images/<?php echo $img; ?>" alt="statut">
<td bgcolor="#CCCCFF" width=5% align="center"><?php echo'<a href="/profil.php?id='.$donnees_amis['id'].'">
'.$donnees_amis['username'].'</a></td>';?>
<td bgcolor="#CCCCFF" width=5% align="center"><a href="/Creer_message.php"> Envoyer un MP </a></td>
<td bgcolor="#CCCCFF" width=5% align="center"><a href="see_amis.php?action=delete&m=<?php echo $donnees_amis['ami_from'];?>"><img src="images/supprimer.gif" alt="Supprimer" /></a></td>
</tr>
<?php
}
0