Probleme d'affichage de requête

Signaler
Messages postés
229
Date d'inscription
lundi 2 août 2010
Statut
Membre
Dernière intervention
25 juillet 2013
-
Messages postés
229
Date d'inscription
lundi 2 août 2010
Statut
Membre
Dernière intervention
25 juillet 2013
-
salut à tous . je conçois un minitchat en php . j'aimerai que 2 interlocuteurs puis voir que leurs discutions mais ma requête affiche tous les message de tous les les interlocuteurs .

par exemple quand toto et titi cause toto doit voir afficher que lui ses message envoyés à titi et les message que titi lui envoie.

voici mes tables :



CREATE TABLE IF NOT EXISTS 'users' (
'id' bigint(20) NOT NULL,
'username' varchar(255) NOT NULL,
'password' varchar(255) NOT NULL,
'email' varchar(255) NOT NULL,
'pays' varchar(80) NOT NULL,
'ville' varchar(80) NOT NULL,
'sexe' varchar(10) NOT NULL,
'signup_date' int(10) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


CREATE TABLE IF NOT EXISTS 'msg' (
'id' int(15) NOT NULL AUTO_INCREMENT,
'mess' text COLLATE utf8_unicode_ci NOT NULL,
'date' datetime NOT NULL,
'id_msg' int(15) NOT NULL,
'ip' varchar(50) COLLATE utf8_unicode_ci NOT NULL,
'UserID' int(11) NOT NULL,
PRIMARY KEY ('id')
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=230 ;


voici mon code php :
<?php
        
 


$sql = "SELECT a.username , b.mess, b.date  FROM users a , msg b ORDER BY date DESC LIMIT 5";

// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());

$total = mysql_num_rows($req);


// si on a récupéré un résultat on l'affiche.
if($total) {
    // début du tableau
echo'';
    echo '<center>'.\"\n\";
// première ligne on affiche les titres prénom et surnom dans 2 colonnes
echo '----
';

echo ''.\"\n\";
// lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne.
$d = array();
while($data = mysql_fetch_array($req)) {
$d[] = $data ;
}
for ($i = count($d)-1;$i>0;$i--){
?>
<?php
echo '----
';
echo ''.htmlentities($d[$i]['username']).' --'.$d[$i]['date'].', ';
echo '';
echo '----
';
echo ''.htmlentities($d[$i]['mess']).', ';
echo '';

echo ''.\"\n\";
}
    echo '
</center>'."\n";
    // fin du tableau.
}
else //echo 'Pas d\'enregistrements dans cette table...';

// on libère le résultat
mysql_free_result($req);

?>

4 réponses

Messages postés
240
Date d'inscription
jeudi 1 mai 2008
Statut
Membre
Dernière intervention
19 juillet 2012
2
Bonjour,

Alors par ou commencer...
Premièrement : Il faut distinguer le "chat public" du "chat privé"
Ici dans ta base tu ne fait pas la différence. Comment savoir si un message est privé ou public ?
une solution : ajouté un champ destinataire. renseigné a NULL si chat public ou avec l'identifiant du destinataire sur un chat privé.

Deuxièmement : Il faut qu'ils est leur espace privé. Donc que tu gère le "multi div" chaque div étant une fenêtre de discutions. Donc ajouté un peut d'AJAX afin d'ouvrir une nouvelle "fenêtre" , recevoir les notifications de nouvelles discutions et mettre à jours les messages.




Sans maitrise, la puissance n'est rien
Il ne faut pas vendre la peau de l'ours, non il ne faut pas.
Messages postés
229
Date d'inscription
lundi 2 août 2010
Statut
Membre
Dernière intervention
25 juillet 2013

merci @Lyle56 pour ta disponibilité .
1. la solution du champ destinataire me semble intéressant mais comment le renseigner et comment l'utiliser dans la requête pour afficher .

2. AJAX ja maitrise pas . est-ce que je peux contourner ca avec que du PHP

si vous avez un tuto qui pourrai m'aider
Messages postés
240
Date d'inscription
jeudi 1 mai 2008
Statut
Membre
Dernière intervention
19 juillet 2012
2
Bonjour,

1-> Pour faire simple : En session tu garde les infos qui concernent les discutions ouvertes
SESSION['NBFENTRE'] = 2
SESSION['FENETRE'][0] = CHATGLOBAL
SESSION['FENETRE'][1] = XXXX
ou XXXX est le nom de la personne avec qui tu discute.

Sur ta page tu créer donc autant de mini chat que tu as de variable en session qui correspondent, dans chaque mini chat tu as donc ton formulaire avec un champ caché destinataire.

Pour le chat Public
$sql "SELECT a.username , b.mess, b.date FROM users a , msg b WHERE b.destinataire 'NULL' ORDER BY date DESC LIMIT 5";
Pour le chat Privée
$sql "SELECT a.username , b.mess, b.date FROM users a , msg b WHERE b.destinataire nom de ton User ORDER BY date DESC LIMIT 5";

La en regardant ta requéte je remarque aussi que tu ne fait pas de jointure sur entre tes tables, c'est aussi un manque.

2-> Oui tu peut le contourner, en actualisant ta page régulièrement. mais cela veut dire recharger tout les messages à chaque fois, cela risque être assez lourd.


Sans maitrise, la puissance n'est rien
Il ne faut pas vendre la peau de l'ours, non il ne faut pas.
Messages postés
229
Date d'inscription
lundi 2 août 2010
Statut
Membre
Dernière intervention
25 juillet 2013

je comprend absolument rien dans ta reponse . s'il te plait soit plus clair .
les sessions comment je les utilisent .
ensuite dans la requète privée : WHERE b.destinataire = nom de ton User
je compren pas nom de ton nom de ton User