Menu

Système private chat en PHP [Résolu]

carterj 18 Messages postés lundi 4 septembre 2017Date d'inscription 23 septembre 2017 Dernière intervention - 15 sept. 2017 à 21:53 - Dernière réponse : yg_be 5607 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 24 mai 2018 Dernière intervention
- 21 sept. 2017 à 17:07
Bonjour, mais revoilà encore avec un autre problème :(
j'ai créé un système de tchat qui fonctionne très bien aucun problème..
c'est que je veut se limité a 2 personne "genre message privé"
voici mon code
if(isset($_SESSION['pseudo']) AND isset($_POST['message']) AND !empty($_POST['message'])){
  $pseudo = $_SESSION['pseudo'];
  $message = htmlspecialchars($_POST['message']);
  $req = $db->prepare('INSERT INTO [/contents/1315-chat chat] (pseudo, message) VALUES(?, ?)');
  $req->execute(array($pseudo, $message));
     $requser = $db->prepare("SELECT * FROM users WHERE id = ?");
     $requser->execute(array($_SESSION['pseudo']));
     $user = $requser->fetch();

}

?>
// Affichage des message
 <div id="message">
     	    <?php
               $allmsg = $db->query('SELECT pseudo, message, avatar FROM chat ORDER BY id DESC LIMIT 15');
                while($msg = $allmsg->fetch())
              {
            ?>
          
                <b><a href="profile.php?id=<?= find_user_by_id('user_id') ?>"><li class="list-group-item"> <img src="<?=  get_avatar_url($user->email) ?>" alt="<?= $user->pseudo ?>" class="avatar-xs"><?= $msg ['pseudo']; ?></a>: </b>     <l><?= $msg['message']; ?></l>
              <?php
              } 
          ?>
<form method="post" action="">
           	<br/>
           	<[/html/htmlform.php3 textarea] type="text" name="message" class="chat_dox"  rows="4" placeholder="Votre message" /></textarea><br/>
     	      <input type="submit" class="dox_custum" value="Envoyer" />
           </form>


Afficher la suite 

Votre réponse

6 réponses

NHenry 14179 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 23 mai 2018 Dernière intervention - 15 sept. 2017 à 21:57
+1
Utile
Dans ce cas, il te faut au moins de mettre 2 identifiants de personnes, l'emmetteur et le destinataire en plus du message et éventuellement de la date.
Cette réponse vous a-t-elle aidé ?  
carterj 18 Messages postés lundi 4 septembre 2017Date d'inscription 23 septembre 2017 Dernière intervention - 16 sept. 2017 à 22:46
certes mais le problème est que j'arrive pas a interdire a d’autre utilisateur de voir le conversation "genre seul l’expéditeur et le receveur puisse voir les messages"
Commenter la réponse de NHenry
yg_be 5607 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 24 mai 2018 Dernière intervention - Modifié par yg_be le 17/09/2017 à 11:11
+1
Utile
bonjour,
- il faut alors enregistrer l'expéditeur et le receveur de chaque message
- il faut aussi connaitre l'identité de l'utilisateur

supposant que tu aies des champs expediteur et receveur dans la table chat, et que la variable $user contienne l'identité de l'utilisateur, tu pourrais faire ainsi:
$reqallmsg = $db->prepare('SELECT pseudo, message, avatar FROM chat WHERE (receveur = :user1) OR (expediteur = :user2) ORDER BY id DESC LIMIT 15');
$allmsg = $reqallmsg->execute(array(':user1'=>$user,':user2'=>$user))

ceci suppose que tous tes messages sont privés. il est possible d'adapter la requête si certains messages sont publics.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de yg_be
jordane45 21128 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 mai 2018 Dernière intervention - 17 sept. 2017 à 18:07
+1
Utile
Bonjour,

Petites remarques en passant :


1-
!EMPTY .. vérifie déjà que la variable ISSET...
Donc :
if(isset($_SESSION['pseudo']) AND isset($_POST['message']) AND !empty($_POST['message'])){


revient tout simplement à faire :
if(isset($_SESSION['pseudo'])  && !empty($_POST['message'])){


2-
L'instruction htmlspecialchars est à utiliser UNIQUEMENT pour l'affichage. En aucun cas il faut l'utiliser lors de l'insertion des données en BDD !

3 - Si tu ne l'as pas déjà fait.... active la gestion des erreurs PDO dans ta connexion à la bdd ( voir ici : http://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs )

4 - Place CHAQUE requête dans un bloc TRY/CATCH (comme dans l'exemple du lien ci-dessus).



Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de jordane45
carterj 18 Messages postés lundi 4 septembre 2017Date d'inscription 23 septembre 2017 Dernière intervention - 18 sept. 2017 à 10:51
0
Utile
Merci pour vos aide J'ai réussi le chat privé fonctionne :), reste a avertir l'utilisateur "Boite de réception" ce loin d'être fini
yg_be 5607 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 24 mai 2018 Dernière intervention - 21 sept. 2017 à 17:07
peux-tu marquer le sujet comme résolu?
Commenter la réponse de carterj