Problème sur la gestion d'amis

Répondre
taha221
le 26/08/2014 à 18:15
taha221
Bonjour,

Comme le nom de mon sujet l'indique, j'aimerais faire une gestion d'amis sur mon site, j'ai également créer une table :
CREATE TABLE `forum_amis` (
`ami_from` int(11) NOT NULL,
`ami_to` int(11) NOT NULL,
`ami_confirm` enum('0','1') collate latin1_general_ci NOT NULL,
`ami_date` int(11) NOT NULL,
PRIMARY KEY (`ami_to`,`ami_from`)
)


et pour ma page d'amis :

<?php
switch($action)

{
case "add": //On veut ajouter un ami
if (!isset($_POST['pseudo']))
{
echo '<form action="amis.php?action=add" method="post">
<p><label for="pseudo">Entrez le pseudo</label>
<input type="text" name="pseudo" id="pseudo" />
<input type="submit" value="Envoyer" />
</p></form>';
}

else
{
$pseudo_d = $_POST['pseudo'];
//On vérifie que le pseudo renvoit bien quelque chose :o

$query=$db->prepare('SELECT id, COUNT(*) AS nbr FROM membre
WHERE LOWER(login) = :pseudo GROUP BY login');
$query->bindValue(':pseudo',strtolower($pseudo_d),PDO::PARAM_STR);
$query->execute();
$data = $query->fetch();
$pseudo_exist = $data['nbr'];
$i = 0;
$id_to=$data['id'];
if(!$pseudo_exist)
{
echo '<p>Ce membre ne semble pas exister<br />
Cliquez <a href="amis.php?action=add">ici</a> pour réessayer</p>';
$i++;
}
$query->CloseCursor();
$query = $db->prepare('SELECT COUNT(*) AS nbr FROM amis
WHERE ami_from = :id AND ami_to = :id_to
OR ami_from = :id AND ami_to = :id_to');
$query->bindValue(':id',$id,PDO::PARAM_INT);
$query->bindValue(':id_to', $id_to, PDO::PARAM_INT);
$query->execute();
$deja_ami=$query->fetchColumn();
$query->CloseCursor();

if ($deja_ami != 0)
{
echo '<p>Ce membre fait déjà parti de vos amis ou a déjà proposé son amitié :p<br />
Cliquez <a href=amis.php?action=add">ici</a> pour réessayer</p>';
$i++;
}
if ($id_to == $id)
{
echo '<p>Vous ne pouvez pas vous ajouter vous même<br />
Cliquez <a href="amis.php?action=add">ici</a> pour réessayer</p>';
$i++;
}
if ($i == 0)
{
$query=$db->prepare('INSERT INTO amis (ami_from, ami_to, ami_confirm, ami_date)
VALUES(:id, :id_to, :conf, :temps)');
$query->bindValue(':id',$id,PDO::PARAM_INT);
$query->bindValue(':id_to', $id_to, PDO::PARAM_INT);
$query->bindValue(':conf','0',PDO::PARAM_STR);
$query->bindValue(':temps', time(), PDO::PARAM_INT);
$query->execute();
$query->CloseCursor();
echo '<p><a href="profile.php?id='.$data['id'].'">'.stripslashes(htmlspecialchars($pseudo_d)).'</a>
a bien été ajouté à vos amis, il faut toutefois qu il donne son accord.<br />

Cliquez <a href="amis.php">ici</a> pour retourner à la page de gestion des amis</p>';
}
}
?>
<?php
case "check":
$add = (isset($_GET['add']))?htmlspecialchars($_GET['add']):0;
if (empty($add))
{
$query = $db->prepare('SELECT ami_from, ami_date, login FROM amis
LEFT JOIN membre ON id = ami_from
WHERE ami_to = :id AND ami_confirm = :conf
ORDER BY ami_date DESC');
$query->bindValue(':id',$id,PDO::PARAM_INT);
$query->bindValue(':conf','0',PDO::PARAM_STR);
$query->execute();

echo '<table align="center"><tr>
<th class="pseudo"><strong>Pseudo</strong></th>
<th class="inscrit"><strong>Date d ajout</strong></th>
<th><strong>Action</strong></th></tr>';

if ($query->rowCount() == 0)
{
echo '<td colspan="3" align="center">Vous n avez aucune proposition</td>';
}
while ($data = $query->fetch())
{
echo '<tr><td><a href="profile.php?id='.$data['ami_from'].'&amp;action=consulter">'.stripslashes(htmlspecialchars($data['login'])).'</a></td>
<td>'.date('d/m/Y',$data['ami_date']).'</td>
<td><a href="amis.php?action=check&amp;add=ok&amp;m='.$data['ami_from'].'">Accepter</a> -
<a href="amis.php?action=delete&amp;m='.$data['ami_from'].'">Refuser</a>
</td></tr>';
}
$query->CloseCursor();
}
else
{
$membre = (int) $_GET['m'];
$query = $db->prepare('UPDATE amis SET ami_confirm = :conf
WHERE ami_from = :membre AND ami_to = :id');
$query->bindValue(':conf','1',PDO::PARAM_STR);
$query->bindValue(':membre',$membre,PDO::PARAM_INT);
$query->bindValue(':id',$id,PDO::PARAM_INT);
$query->execute();
$query->closeCursor();
echo '<p>Le membre a bien été ajouté à votre liste d ami<br />
Cliquez <a href="amis.php">ici</a> pour retourner à la liste des amis';
}
break;
?><?php
case "delete":
$membre = (int) $_GET['m'];
if (!isset($_GET['ok']))
{
echo '<p>Etes vous certain de vouloir supprimer ce membre ?<br />
<a href="amis.php?action=delete&amp;ok=ok&amp;m='.$membre.'">oui</a> - <a href="amis.php">non</a></p>';
}
else
{
$query = $db->prepare('DELETE FROM amis WHERE ami_from = :membre AND ami_to = :id');
$query->bindValue(':membre',$membre,PDO::PARAM_INT);
$query->bindValue(':id',$id,PDO::PARAM_INT);
$query->execute();
$query->closeCursor();

$query = $db->prepare('DELETE FROM amis WHERE ami_to = :membre AND ami_from = :id');
$query->bindValue(':membre',$membre,PDO::PARAM_INT);
$query->bindValue(':id',$id,PDO::PARAM_INT);
$query->execute();
$query->closeCursor();

echo '<p>Membre correctement supprimé :D <br />
Cliquez <a href="amis.php">ici</a> pour retourner à la liste des amis</p>';
}
break;
?><?php
default:

$query = $db->prepare('SELECT (ami_from + ami_to - :id) AS ami_id, ami_date, login
FROM amis
LEFT JOIN membre ON id = (ami_from + ami_to - :id)

WHERE (ami_from = :id OR ami_to = :id) AND ami_confirm = :conf ORDER BY login');
$query->bindValue(':id',$id,PDO::PARAM_INT);
$query->bindValue(':conf','1',PDO::PARAM_STR);
$query->execute();

echo '<table align="center"><tr>
<th class="pseudo"><strong>Pseudo</strong></th>
<th class="inscrit"><strong>Date d ajout</strong></th>
<th><strong>Action</strong></th>
<th><strong>Connecté</strong></th></tr>';

if ($query->rowCount() == 0)
{
echo '<td colspan="4" align="center">Vous n avez aucun ami pour l instant</td>';
}
while ($data = $query->fetch())
{
echo '<tr><td><a href="profile.php?id='.$data['ami_id'].'&amp;action=consulter">'.stripslashes(htmlspecialchars($data['login'])).'</a></td>
<td>'.date('d/m/Y',$data['ami_date']).'</td>
<td><a href="new_pm.php">Envoyer un MP</a><br />
<a href="amis.php?action=delete&m='.$data['ami_id'].'">Supprimer</a></td>';
echo '<td>Non</td>';
echo '</tr>';
}
echo '</table>';
$query->CloseCursor();

//On compte le nombre de demande en cours et on met quelques liens
$query=$db->prepare('SELECT COUNT(*) FROM amis
WHERE ami_to = :id AND ami_confirm = :conf');
$query->bindValue(':id',$id,PDO::PARAM_INT);
$query->bindValue(':conf','0', PDO::PARAM_STR);
$query->execute();
$demande_ami=$query->fetchColumn();

//Cette ligne va permettre d'afficher 0 plutôt qu'un vide
if (empty($demande_ami)) {
$demande_ami=0;

echo '<br /><ul>
<li><a href="amis.php?action=add">Ajouter un ami</a></li>
<li><a href="amis.php?action=check">Voir les demandes d\'ajout ('.$demande_ami.')</a></li></ul>';
break;
}
}
?>


Alors quant j'ajoute un ami, ça s’enregistre dans la base de donné normal, mais l'ami que j'ai ajouté ne reçois pas d'invitation, j'ai vérifier sur la base de donné tout est bon, l'invitation s'est bien envoyé au bon membre, mais ne s'affiche pas dans la page, l'ami ne reçois rien, aussi même si le membre en personne à des amis, ils ne s'affiche pas aussi dans la liste, je ne sais pas ou est le problème, alors si vous pouvez m'aidez je vous remercie d'avance ;)
LupusMic
le 26/08/2014 à 18:58
LupusMic
1. Ne mélange pas l'anglais et le français. Il y a des faux amis qui risque de te donner la migraine. Par exemple : sensitive/sensible; sensible/pratique. Choisis une langue (de préférence l'anglais, évidement).

2. Trop long. Découpes en fonctions, ça t'aideras à tester les fonctionnalités unitairement, et te permettra de tester le code qui semble déconner.

3. Quel est le sens de ceci ? id = (ami_from + ami_to - :id)
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours