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 -
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 :
Donc il me trouve $data['id']== 0 ... Pourquoi?
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:
- Probleme Requete SQL gestion amis
- Logiciel gestion locative gratuit excel - Télécharger - Comptabilité & Facturation
- Logiciel gestion photo gratuit - Guide
- Gestion de fichiers - Télécharger - Gestion de fichiers
- Gestion autorisation application android - Guide
- Logiciel gestion cabinet médical gratuit - Télécharger - Organisation
4 réponses
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 :
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.
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.
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:
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'; }
Il n'y a pas assez de code pour pouvoir analyser ce qui se passe. Mais je vois déjà un truc bizarre :
S'ils sont différents lors de la première comparaison, il n'y a pas de raison que ça change.
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.
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 }