Systeme de chat
Résolu
kherox
Messages postés
131
Date d'inscription
Statut
Membre
Dernière intervention
-
kherox Messages postés 131 Date d'inscription Statut Membre Dernière intervention -
kherox Messages postés 131 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
salut a tous et a toute , je suis sur un systeme de chat que je suis en train de codé. donc ce qui j aimerais faire c'est d'afficher les messages une un a la suite de autres commes facebook et plein d 'autre site de chat les font:
voici mon code :
je voudrais savoir quel est la maniere de faire?
salut a tous et a toute , je suis sur un systeme de chat que je suis en train de codé. donc ce qui j aimerais faire c'est d'afficher les messages une un a la suite de autres commes facebook et plein d 'autre site de chat les font:
voici mon code :
<?php
foreach ($r as $key => $value) {
foreach ($s as $ke => $ve) {
foreach ($us as $k => $v) {
if($_SESSION['id'] == $v->id)
{
echo $v->pseudo.":\t" ;
echo '<p class="label label-important">';
echo $value->message."\t";
echo "</p>";
echo $value->date_envoie;
echo "</br>";
}elseif($v->id == $d['id_destinateur'] || $v->id == $d['id_expediteur']
){
echo $v->pseudo.":\t" ;
echo '<p class="label label-success">';
echo $ve->message."\t";
echo "</p>";
echo $ve->date_envoie;
echo "</br>";
}
}
}
}?>
je voudrais savoir quel est la maniere de faire?
A voir également:
- Systeme de chat
- Coco chat - Accueil - Réseaux sociaux
- Remplaçant de Coco : quelles solutions pour tchater gratuitement en ligne ? - Accueil - Réseaux sociaux
- Restauration systeme windows 10 - Guide
- Chat engine - Télécharger - Outils Internet
- Nouveau site coco chat - Forum Réseaux sociaux
2 réponses
Salut,
Déjà 3 boucles imbriquées, c'est pas très beau a voir sachant qu'il existe surement d'autres façon de faire !
Puis il faut préciser ce que représente les tableaux que tu parcours !
Et je suppose qu'il y a des requêtes SQL derrière tout ça, et je pari que tu n'as pas utilisé de jointure
Déjà 3 boucles imbriquées, c'est pas très beau a voir sachant qu'il existe surement d'autres façon de faire !
Puis il faut préciser ce que représente les tableaux que tu parcours !
Et je suppose qu'il y a des requêtes SQL derrière tout ça, et je pari que tu n'as pas utilisé de jointure
le $r represente les message envoyer par l'expediteur au destinataire , le $s represente les message envoyer par le destinateur a l'espediteur
$us represente l'expediteur et le destinataire. et oui ne n'ai pas utiliser les jointures.
$us represente l'expediteur et le destinataire. et oui ne n'ai pas utiliser les jointures.
Alors non, ce n'est pas comme ça qu'on procède !
En plus, tu n'as traiter que le cas ou le chat comprend deux interlocuteurs, sinon, si tu dois afficher les messages d'un salon(une centaine voir des milliers d'utilisateurs, alors tu auras un problème), tout ça, sans parler des performances de ton système ...
Postes le modele logique représentant ta base de données.
Exemple :
Utilisateur(identifiant, nom, prenom, email)
Salon(identifiant, nom, theme)
Message(expediteur_id*, destinaitaire_id*, date, salon_id*, contenu)
En plus, tu n'as traiter que le cas ou le chat comprend deux interlocuteurs, sinon, si tu dois afficher les messages d'un salon(une centaine voir des milliers d'utilisateurs, alors tu auras un problème), tout ça, sans parler des performances de ton système ...
Postes le modele logique représentant ta base de données.
Exemple :
Utilisateur(identifiant, nom, prenom, email)
Salon(identifiant, nom, theme)
Message(expediteur_id*, destinaitaire_id*, date, salon_id*, contenu)
mon modele est
posts(id,message,id_expediteur,id_destinateur)
users(nom,prenom,pseudo, password);
le systeme que je suis en train de construire est pour un chat du style skype ou tu dois selectioner la personne connecter pour voir vos messages, donc c'est dans ce sens que je faire mes deux requettes. donc a ton avis comment est que je dois proceder?
posts(id,message,id_expediteur,id_destinateur)
users(nom,prenom,pseudo, password);
le systeme que je suis en train de construire est pour un chat du style skype ou tu dois selectioner la personne connecter pour voir vos messages, donc c'est dans ce sens que je faire mes deux requettes. donc a ton avis comment est que je dois proceder?
Ou est l'id dans la table users ?
La date est importante dans ce genre de système !
Avec Skype, on sélectionne l'utilisateur, puis on peux voir l'historique de la discussion, donc si c'est ce que tu comptes faire alors ...
Pour extraire l'historique de la discussion faite avec X utilisateur, on a besoin de deux paramètres :
L'id de l'utilisateur en cours, qui est normalement enregistré dans la session en cours (:exp).
L'id du destinataire (:dest).
:dest et :exp sont les deux paramètres dont la requête a besoin, soit tu les remplies via PDO(conseillé), soit par une concaténation manuelle(déconseillé).
La date est importante dans ce genre de système !
Avec Skype, on sélectionne l'utilisateur, puis on peux voir l'historique de la discussion, donc si c'est ce que tu comptes faire alors ...
Pour extraire l'historique de la discussion faite avec X utilisateur, on a besoin de deux paramètres :
L'id de l'utilisateur en cours, qui est normalement enregistré dans la session en cours (:exp).
L'id du destinataire (:dest).
SELECT IF(id_expediteur = :exp, 'Moi', 'Interlocuteur') AS expediteur, message FROM posts WHERE (id_expediteur = :exp AND id_destinateur = :dest) OR (id_expediteur = :dest AND id_destinateur = :exp) ORDER BY id DESC
:dest et :exp sont les deux paramètres dont la requête a besoin, soit tu les remplies via PDO(conseillé), soit par une concaténation manuelle(déconseillé).
j ai deja recuperer tout cela via PDO, pour l'id du users j ai oublier de mettre. ensuite je te donne ma requete complete :
$d['id_destinateur'] = $_POST['destinateur'];
//pour recuperer les messages que l'expediteur a envoyer au destinataite
$r=$posts->name->find(array('conditions'=>array( 'id_expediteur' => $d['id_expediteur'],
'id_destinateur' => $d['id_destinateur'])));
//pour recuperer les messages que le destinateur a envoyer au expediteur
$s=$posts->name->find(array('conditions'=>array('id_expediteur'=>$d['id_destinateur'],
'id_destinateur' => $d['id_expediteur']
)));
quand on clique sur un pseudo par exemple on charge son historique, j ai deja faire cela . le probleme c'est a la affichage, cela ne se faire par comme skype. c'est ce que je veux corriger. donc comment faire
$d['id_destinateur'] = $_POST['destinateur'];
//pour recuperer les messages que l'expediteur a envoyer au destinataite
$r=$posts->name->find(array('conditions'=>array( 'id_expediteur' => $d['id_expediteur'],
'id_destinateur' => $d['id_destinateur'])));
//pour recuperer les messages que le destinateur a envoyer au expediteur
$s=$posts->name->find(array('conditions'=>array('id_expediteur'=>$d['id_destinateur'],
'id_destinateur' => $d['id_expediteur']
)));
quand on clique sur un pseudo par exemple on charge son historique, j ai deja faire cela . le probleme c'est a la affichage, cela ne se faire par comme skype. c'est ce que je veux corriger. donc comment faire
Tu l'as déjà fait, oui, je le sais, mais la manière dont tu l'as réaliser est inappropriée !
Tu récupère TOUT les messages postés, puis tu les filtres, et tu répète cette opération deux fois.
Moi je te propose de filtrer tes messages avant même de les récupérer, grâce a la clause "WHERE", et une seule requête suffira.
Sans oublier ce que j'ai dis dans mon premier message.
Puisque tu utilises PDO ...
Tu récupère TOUT les messages postés, puis tu les filtres, et tu répète cette opération deux fois.
Moi je te propose de filtrer tes messages avant même de les récupérer, grâce a la clause "WHERE", et une seule requête suffira.
Sans oublier ce que j'ai dis dans mon premier message.
Puisque tu utilises PDO ...
$req = $bd->prepare(' SELECT IF(p.id_expediteur = :exp, "Vous", "Interlocuteur") AS author, CONCAT(u_exp.nom, " ", u_exp.prenom) AS expediteur, p.message FROM posts p INNER JOIN users u_exp ON posts.id_expediteur = u_exp.id WHERE (id_expediteur = :exp AND id_destinateur = :dest) OR (id_expediteur = :dest AND id_destinateur = :exp) ORDER BY id DESC'); $req->bindParam(':exp', $d['id_expediteur'], PDO::PARAM_INT); $req->bindParam(':dest', $d['id_destinateur'], PDO::PARAM_INT); $req->execute(); while($post = $req->fetch(PDO::FETCH_OBJ)) { echo '<div>'; echo ($post->author == 'Vous') ? '<p style="display:inline;color:grey;">Vous : </p>' : '<p style="display:inline;color:blue;">' . $post->expediteur . ' : </p>'; echo '<p style="display:inline;">' . $post->message . '</p>'; echo '</div>'; }