msi079
Messages postés212Date d'inscriptionlundi 2 août 2010StatutMembreDernière intervention25 juillet 2013
-
16 juil. 2012 à 10:08
msi079
Messages postés212Date d'inscriptionlundi 2 août 2010StatutMembreDernière intervention25 juillet 2013
-
12 août 2012 à 11:11
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);
?>
Lyle56
Messages postés240Date d'inscriptionjeudi 1 mai 2008StatutMembreDernière intervention19 juillet 20122 16 juil. 2012 à 10:20
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.
msi079
Messages postés212Date d'inscriptionlundi 2 août 2010StatutMembreDernière intervention25 juillet 2013 16 juil. 2012 à 20:00
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
Lyle56
Messages postés240Date d'inscriptionjeudi 1 mai 2008StatutMembreDernière intervention19 juillet 20122 19 juil. 2012 à 10:41
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.
msi079
Messages postés212Date d'inscriptionlundi 2 août 2010StatutMembreDernière intervention25 juillet 2013 12 août 2012 à 11:11
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