Tchat privé

Fermé
Bill-Billion Messages postés 41 Date d'inscription lundi 23 décembre 2019 Statut Membre Dernière intervention 2 septembre 2020 - 30 mars 2020 à 02:07
Bill-Billion Messages postés 41 Date d'inscription lundi 23 décembre 2019 Statut Membre Dernière intervention 2 septembre 2020 - 31 mars 2020 à 17:19
Bonsoir,je travaille sur un projet perso j'aimerais y mettre un tchat privé,le problème l'ors de l'affichage mes réponses se placent au dessus des messages de l'autre utilisateur,
J'ai utilisé deux tables dans ma base(à noter que je travail en local), l 'une pour les messages envoyés,l'autres pour les réponses
dans la table message_envoyé j'ai la structure suivante
Ex:
idmessage=1
message=salut
utilisateur=1//cet info vient de la table utilisateur,celui qui à envoyer le message
recevant=2//cet info vient de la table utilisateur,receveur

Ma table reponse
idreponse=1
reponse=Salut à toi
utilisateur=1//receveur
recevant=2//envoyant

puisque les differentes tables n'ont aucune liaison(clé etrangère)
j'ai utilisé 'UNION' dans les deux tables pour faire une boucle pour affiché chaque message à chaque utilisateur
C'est là que vient mon problème,merçi de votre aide.
A voir également:

4 réponses

Bill-Billion Messages postés 41 Date d'inscription lundi 23 décembre 2019 Statut Membre Dernière intervention 2 septembre 2020
30 mars 2020 à 18:55
Je pense que je viens de comprendre toutes tes réponses plus haut après une petite détour j'ai découvert "créer un tchat en ajax"
Enfaite j'ai utilisé le terme tchat c'est pas parceque je veux créer une chose comme une message en groupe,je veux créer une sorte de box de message privé
1
Salut,
',le problème l'ors de l'affichage '
Si le problème est lors de l'affichage il faut changer l'affichage et ça n'a rien à voir avec la base de données mais plutôt l'affichage ou comment vous modifier cet affichage.

Logiquement et simplement au lieu d'ajouter au dessus il faut ajouter au dessous.
Dans le cas d'un chat qui est censé être instantané vous devez rafraîchir la page à chaque fois qu'il y a un nouveau message.
Donc recharger tout les messages avec le nouveau sur certains critères que vous définissez (un nouveau message est ajouté, une durée déterminée) puis créer la nouvelle page quisqu'elle sera en tout point identique à l'ancienne sauf qu'elle aura un messge de plus.

une boucle c'est une boucle. C'est une structure qui permet de parcourir tous les éléments d'une liste par exemple pour les stocker dans des variables ou un tableau(de variables).
Dans votre exemple vous n'avez théoriquement qu'à lire dans l'autre 'sens' ou effectuer la boucle en commençant dans l'ordre opposé pour changer l'affichage.
Montrer vos tables n'a pas vraiment de lien avec ça, c'est juste l'ordre de lecture qui change.
Cela peut être éventuellement fait en SQL (voir ORDER BY avec un critère numérique).

Ici afficher vos tables qui n'ont pas de rapport avec la question (voir première réponse qui consiste à changer l'ordre d'affichage par le HTML / CSS qui reste la solution la plus simple) sauf que ça permet de voir que votre structure est fausse.

Bien sûr qu'il faut au moins 2 tables pour avoir un SGBD qui ait une quelconque utilité(ou alors vous avez vraiment quelque chose de très très primaire et pas du tout manipulable) mais déjà vos regroupements sont faux et surtout une table de données ne peut pas exister sans un identifiant.

Sans un identifiant qui est une valeur unique il n'est pas possible de repérer(et donc retrouver pour l'utiliser) une ligne du tableau en particulier.
Cela n'est d'ailleurs pas possible et devrait indiquer une erreur SQL(ou autre langage mais SQL est commun à plusieurs bases de données parfois avec des variantes).

Votre regroupement est faux parce qu'avec votre système vous devez faire autant de tables qu'il existe de messages dans une discussion.
En effet rien ne différencie conceptuellement ce que vous appelez message de reponse.
Que ce soit : ça va qui arrive en premier et salut en second ou l'inverse ça change rien pour une table.
Vous confondez la valeur avec le champ de donnée.
Pour faire des tables cohérentes vous devez savoir ce qu'est une table:
C'est un regroupement d'entités sur un même thèmes(les champs) qui permet d'avoir des lignes uniques(et donc identifiables et repérables , c'est à dire que le programme peut retrouver quand elle les cherchent) et ces lignes ce sont les valeurs que peuvent prendre les données qui sont potentiellement infinies.
Pour unir quelque chose il faut que vous ayez quelque chose à unir. Un message ne peut pas être uni avec lui même puisque un message c'est toujours le même champ(mais pas la même valeur).
Une table s'appelle aussi une table parce qu'elle à des colonnes(les champs) et des lignes (des cases qui peuvent prendre toutes les valeurs que l'on veut ou plutôt sont possibles).

Voici une structure de tables(entités qui regroupent des champs de données sur un même thème) qui peut fonctionner bien qu'évidemment incomplète:

table_utilisateur:
: nom_utilisateur (identifiant naturel)
: mot_de_passe_utilisateur

table_message
: date_message (identifiant naturel qui contient la date et l'heure à la seconde près)
: auteur_message (clé étrangère, identifiant qui correspond à l’identifiant de table_message qui est reporté ici*)
: message

Le fait de reporter une clé d'une table sur l'autre permet de retrouver qui a écrit quel message sinon c'est impossible.
La table_message à donc 2 champs de données(pas les valeurs mais toutes les valeurs qui peuvent être prises par ce champ) qui permettent d’identifier une et une seule ligne de la table et donc d'avoir le message d'un utilisateur en particulier.
Faites un dessin sur papier et ajoutez une lignes de données, 2 lignes 10, 300, 10000 ou plus et vous pourrez toujours trouver qui a écrit quel message. L'identifiant naturel de table_message est date_message mais ne suffit pas à identifier un message car:
_il n'y a alors aucun moyen de savoir qui a mis quel message
et aussi:
_2 utilisateurs peuvent très bien ajouter un message à la même date, heure seconde. Dans ce cas la table est foutue (et le programme qui va avec)si on ne lui ajoute pas une clé étrangère(de table_utilisateur) parce que l'on ne peut savoir à qui appartient le message donc utiliser ou afficher le message d'une quelconque façon.
C'est à cela que servent un ou plusieurs champs identifiant -si c'est nécessaire- d'une table: à identifier les valeurs contenues dans la table.
Le champ date_message peut servir aussi à indiquer l'ordre des messages. Ce qui peut-être pratique sur un chat ou un forum-c'est exactement le même principe - et peut aussi servir à trier , ordonner ou ne lister que des données comprises entre certaines valeurs(aujourd'hui de 0h à 12h, toute la semaine, entre 12h et 14h etc...) et d'autres comparaisons/tris qui peuvent être nécessaires pour u programme.

Attention j'ai bien dit que c'est un exemple. Il est incomplet et ne sert qu'à l’explication du principe des tables(tableaux= colonnes(les champs) / lignes(les valeurs d'un champ)) de données qui comportent OBLIGATOIREMENT une valeur identifiante(voire plusieurs).
L’identifiant naturel est le champ de la donnée (le nom des valeurs(toutes celles possibles) à enregistrer dans le système de gestion de base de données) qui apparaît naturellement comme unique (quand il existe, il peut en exister plusieurs aussi bien sûr). C'est la même chose qu'un identifiant numérique comme vous utilisez dans vos tables fausses mais e mieux puisque cette valeur est nécessaire et que l'identifiant numérique est 'arbitraire' et un ajout à la table non nécessaire(mais parfois pratique).


Soit vous n'avez fait que survoler le cours soit vous ne l'avez pas compris ou celui ci est incomplet. Tout ça revenant au même il faudra commencer par apprendre.

Pour créer un chat :
https://openclassrooms.com/fr/courses/918836-concevez-votre-site-web-avec-php-et-mysql/914663-tp-un-mini-chat

la conception de bases de données:
https://merise.developpez.com/

Créer un identifiant sur une table en SQL(clé primaire)
https://openclassrooms.com/fr/courses/1959476-administrez-vos-bases-de-donnees-avec-mysql/1963057-cles-primaires-et-etrangeres

Le rôle et l'utilité et utilisation d'une base de données de manière générale:
https://www.commentcamarche.net/contents/1083-systeme-d-information

La commande UNION en SQL:
https://sql.sh/cours/union
0
Note: je ne parle pas d'AJAX mais pour un chat c'est une amélioration à envisager et qui est nécessaire si on veut pas recharger la page à chaque fois et faire attendre l'utilisateur le temps de nouvelles requêtes serveur et de plus en plus fournies. Mais pour une amélioration (AJAX n'est pas un langage mais une méthode pour utiliser le langage serveur de façon décalée avec la page et donc éviter de devoir constamment recharger une page intégralement) il faut déjà avoir acquis le principe de fonctionnement.
0
Bill-Billion Messages postés 41 Date d'inscription lundi 23 décembre 2019 Statut Membre Dernière intervention 2 septembre 2020
Modifié le 30 mars 2020 à 18:29
Merçi d'avoir pris tout le temps d'ecrire toutes ces réponses pour bien te dire je n'y comprends rien,pas à ce que tu dis mais plutôt tes reponses vis à vis ma question.
J'ai pas besoin de rafraichir le tchat puisque le projet en question gère des utilisateurs en gros quand l'utilisateur se connecte il voit ses derniers messages.
Je pense que le problème vient de l'affichage
[J'ai essayé de changer de place,toujours la même affichage]
$select_message=$bdd->prepare('SELECT message,heure_message FROM message WHERE utilisateur_idutilisateur=:id AND recevant=:session_id UNION SELECT reponse,heure_reponse FROM reponse_message WHERE utilisateur_idutilisateut=:id AND recevant=:session_id UNION SELECT message,heure_message FROM message WHERE utilisateur_idutilisateur=:session_id AND recevant=:id UNION SELECT reponse,heure_reponse FROM reponse_message WHERE utilisateur_idutilisateut=:session_id AND recevant=:id');
$select_message->execute(
array(
'id'=>$utilisateur,
'session_id=>$_SESSION['id']
));//tout se joue par l'utilisateur qui se trouve en ligne

while($recherche_message=$select_message->fetch())
{

<p><?php if(isset($recherche_message['message'])){echo $recherche_message['message'];} ?></p>
<p><?php echo $recherche_message['reponse'];?></p>
<!-- même si j'essais d'inverser les données de l'affichage c'est toujours le même resultat -->
<!-- j'ai mis "if isset" au début il m'a afficé le message d'erreur undefined index-->

}
$select_message->closeCursor();

En gros c'est ça mon problème.
0
Bill-Billion Messages postés 41 Date d'inscription lundi 23 décembre 2019 Statut Membre Dernière intervention 2 septembre 2020
Modifié le 30 mars 2020 à 18:33
(un nouveau message est ajouté, une durée déterminée) puis créer la nouvelle page quisqu'elle sera en tout point identique à l'ancienne sauf qu'elle aura un messge de plus.
J'aimerais connaître un peu plus sur cette paragraphe.Est-ce-que je devrais créer deux page(l'une qui charges les nouveaux messages et l'autre?)?

Pour créer un chat :
https://openclassrooms.com/fr/courses/918836-concevez-votre-site-web-avec-php-et-mysql/914663-tp-un-minichat

Ce Tp est loin de ce que je fais et je l'ai fait déjà
0
En effet ce n'est pas un chat de discussion qui implique une conversation instantanée.
On dirait pas que vous l'avez fait le Tp que j'ai indiqué car il implique les rudiments sur les bases de données dont votre exemple initial faisait défaut.

Vos besoins s'apparente plutôt à une boîte e-mail qui est un service de communication différé et aussi un autre service d'Internet que le service WWW(les emails ne passent pas par des serveurs http mais des serveurs de messagerie comme pop, imap, smtp).
Donc vous devez avoir des raisons pour ne pas utiliser une messagerie djà existante(gmail, outlook, etc...).

Votre besoin s'apparente donc plus à un service de gestion privé(Intranet de gestion) et je vous conseille de vous renseigner avec le lien et d'autres recherches sur les systèmes d'informations et leur fonctionnement.

Techniquement, mais là n'est pas la question dans un premier temps parce que la partie technique c'est le ciment, les briques et la truelle mais si vous n'avez aucune idée de comment assembler des briques pour faire un mur ça ne sert à rien si vous comprenez ma comparaison:

Le problème de l'actualisation se pose toujours. C'est à dire qu'un utilisateur connecté qui reçoit un nouveau message devra obligatoirement recharger la page pour voir un nouveau message. Tant mieux si cela vous convient mais ce n'es clairement pas un chat qui est une messagerie instantanée.
C'est plus l'affichage d'informations internes et son gestionnaire. Ce qui est possible par n'importe quel CMS donc je ne voit pas pourquoi vous vous prenez la tête à développe quelque chose qui est moins bien.

Appelons un chat(ou tchat en français) un chat! Et ce n'est clairement pas d'un chat dont vous parlez mais d'un système de messagerie(différé).

Que ce soit pour un chat ou une messagerie interne(la différence est mince si vous utilisez pas un système d'email donc pourquoi se priver de la discussion instantanée, après pour l'interface et la façon de l'utiliser ça n'a pas vraiment de rapport) il existe des programmes et scripts tout fait simples à installer ou vous n'aurez quasiment aucun développement à faire.

D'où l'intérêt de voir la globalité(le système d'informations) pour voir quels intérêt vous pouvez bien avoir à l'intégrer complétement dans votre système d'information et donc être seul développeur, à la maintenance et exploitation(ainsi que possesseur) que peut apporter(ou pas) le fait d'avoir les bases de données au système.

On en revient à ce que j'ai essayé de vous apporter:
le besoin de l'analyse et de la conception(Merise pour les bases de données qui est l'un des meilleurs système et en plus d'origine français ce qui est plutôt rare en informatique) la nécessité de comprendre une BDD, et avant tout les fonctions et nécessités qui existent dans votre système d'information.

Le reste la partie technique c'est bêtement appliquer des méthodes bornés(langages, structure, architecture logicielle et matérielle) mais un système d'information pertinent et fonctionnel c'est fait par rapport à tous les besoins spécifiques(éventuellement ceux envisageable à l'avenir) de votre organisation/entreprise.

La première étape de merise est d'ailleurs de rassemble toutes les données qui peuvent exister, en commençant par celles qui peuvent exister physiquement comme une factures, un billet interne etc... et qui servent d'exemple pour en lister les données.

C'est le D.D.D. ou dictionnaire des données.
Le but et résultat final(après une dizaine d'étapes) c'est la structure (efficace et fonctionnelle autant que plus facile à développer parce que:
_évidemment un programme plus compliqué qu'il est nécessaire mène à des erreurs dans ses traitements/utilisation, plus de temps à créer pour rien, une lenteur et complexité inutile de son fonctionnement -et donc maintenance nécessaire en permanence. Et à la base du programme il y a les bases de données = ce regroupements en tables de données

_Des tables cohérentes c'est cohérente pour le programme et le fonctionnement informatique. Donc aucunement en rapport avec la logique humaine, beaucoup plus simple que la logique humaine car si un ordinateur sait faire des opérations rapidement(en tout cas si l'ensemble du programme est cohérent), voire plus rapidement que le cerveau humain il est très loin de l'intelligence que peut avoir une sauterelle par exemple. Une machine à calculer restant une machine à calculer le but des analyses et conception informatique est de reporter des concepts humains parfois(souvent) complexes à une logique informatique (donc limitée).

Dans l'état actuel de ce que vous présenter il n'y a aucune utilité à avoir votre propre système, d'autres solutions existent et ne nécessitent aucun développement ou mise en œuvre. Le rôle de l'ordinateur étant de se simplifier la vie et pas l'inverse ce que vous voulez faire me semble une hérésie à ce point de vue.

SEULEMENT vous n'avez pas pensé en termes de systèmes d'informations et cela peut se justifier éventuellement: par vos besoins.

Commencez donc par faire un cahier des charges(pas besoin d'analyse et de conception et sans cahier des charges aucune analyse ou conception n'est possible), c'est à dire la liste de vos besoins et spécificités à prendre en compte. Bien sûr non limités à des besoins purement fonctionnels/techniques ou en rapport avec vos connaissances informatiques mais aussi de temps, de budget de connaissances à apprendre et toute autre considération en rapport avec un but/nécessité donnée.

Vous verrez rapidement à partir de cela quelle solution s'impose, ce que doit vous fournir le système d'information = et bien sûr en fonction les solutions à utiliser (et celles à rejeter);
l'informatique c'est très bien mais ça remplacera pas le cerveau humain. Sans besoin exprimé, sans la présence d'un concept aucune tâche 'informelle' n'est nécessaire.
Première étapes = lister les besoins.

Bon travail pour votre projet, qui consiste à définir le plus précisément et exhaustivement ce qui constitue le projet: Le cahier des charges.
0
Ceci (en plus des autres liens et bien spur de vos recherches personnelles) peut vous aider à démarrer:

https://fr.slideshare.net/MireilleBF/analyse-et-conception-des-systmes-dinformation
0
Bill-Billion Messages postés 41 Date d'inscription lundi 23 décembre 2019 Statut Membre Dernière intervention 2 septembre 2020
31 mars 2020 à 17:19
Merçi pour vos reponses,oui c'est bien ce que je veux faire un système de messagerie,est ce qu'il ne serait pas possible de me donner quelques idées juste pour regler ce problème
0