Signaler

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

Posez votre question carterj 14Messages postés lundi 4 septembre 2017Date d'inscription 21 septembre 2017 Dernière intervention - Dernière réponse le 21 sept. 2017 à 17:07 par yg_be
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>


Utile
+1
plus moins
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.
carterj 14Messages postés lundi 4 septembre 2017Date d'inscription 21 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"
Répondre
Donnez votre avis
Utile
+1
plus moins
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.
Donnez votre avis
Utile
+1
plus moins
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).



Donnez votre avis
Utile
+0
plus moins
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 3356Messages postés lundi 9 juin 2008Date d'inscription ContributeurStatut 21 septembre 2017 Dernière intervention - 21 sept. 2017 à 17:07
peux-tu marquer le sujet comme résolu?
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !