Systeme de chat
Résolu/Fermé
kherox
Messages postés
131
Date d'inscription
dimanche 13 janvier 2013
Statut
Membre
Dernière intervention
17 octobre 2015
-
Modifié par kherox le 13/12/2013 à 09:38
kherox Messages postés 131 Date d'inscription dimanche 13 janvier 2013 Statut Membre Dernière intervention 17 octobre 2015 - 13 déc. 2013 à 19:07
kherox Messages postés 131 Date d'inscription dimanche 13 janvier 2013 Statut Membre Dernière intervention 17 octobre 2015 - 13 déc. 2013 à 19:07
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 - Guide
- Chat engine - Télécharger - Outils Internet
- Chat hot ✓ - Forum Réseaux sociaux
2 réponses
JooS
Messages postés
2468
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
228
13 déc. 2013 à 12:10
13 déc. 2013 à 12:10
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
kherox
Messages postés
131
Date d'inscription
dimanche 13 janvier 2013
Statut
Membre
Dernière intervention
17 octobre 2015
1
13 déc. 2013 à 12:19
13 déc. 2013 à 12:19
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.
JooS
Messages postés
2468
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
228
Modifié par JooS le 13/12/2013 à 14:30
Modifié par JooS le 13/12/2013 à 14:30
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)
kherox
Messages postés
131
Date d'inscription
dimanche 13 janvier 2013
Statut
Membre
Dernière intervention
17 octobre 2015
1
13 déc. 2013 à 14:43
13 déc. 2013 à 14:43
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?
JooS
Messages postés
2468
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
228
13 déc. 2013 à 15:26
13 déc. 2013 à 15:26
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é).
kherox
Messages postés
131
Date d'inscription
dimanche 13 janvier 2013
Statut
Membre
Dernière intervention
17 octobre 2015
1
13 déc. 2013 à 16:01
13 déc. 2013 à 16:01
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
JooS
Messages postés
2468
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
228
Modifié par JooS le 13/12/2013 à 18:01
Modifié par JooS le 13/12/2013 à 18:01
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>'; }