Avatar billede kawzzz Nybegynder
01. marts 2003 - 17:43 Der er 17 kommentarer

Chat med fast opdatering (ligesom www.bioalice.dk/chat )

Hej!
jeg er igang med en chat.
Nu fik jeg læst om en opdaterings metode via en while og en flush ( http://www.eksperten.dk/spm/219775 )

Derinde kan man se et eksempel:

$id = 0;
while(1) {
  $query = mysql_query("SELECT * FROM tabel WHERE id > $id");
  while($vis = mysql_fetch_array($query)) {
    print "$vis[tekst]<br>\n";
  $id = $id+1;
  }
flush;
sleep(2);
}

hvordan kan jeg få den til KUN at opdatere når der er nye meddelser på chatten?

200 points
Avatar billede Slettet bruger
01. marts 2003 - 17:46 #1
lav en skjult frame der opdaterer hele tiden (1 sekund) som tjekker om der er nye beskeder.. og hvis der er.. send dem til besked framen :)

med den metode skal chatten nok ombygges en del
Avatar billede olebole Juniormester
01. marts 2003 - 18:11 #2
<ole>

Glem alt om sleep/flush-metoden ... det er en elendig metode, der hurtigt lægger serveren ned. Prøv evt. at kikke her i stedet:

http://www.eksperten.dk/spm/320350
http://tjenester.dk/x-codes.dk/eksperten/chat/

/mvh
</bole>
Avatar billede kawzzz Nybegynder
01. marts 2003 - 18:20 #3
Fik set chat.php:

<?
include ( "config.php" );

if ( !isset($s) || $s=="" ) $s = 0;

$sql = "select * from messages where stamp>'$s' order by stamp";
$res = mysql_query( $sql ) or die (mysql_error());
$num_rows = mysql_num_rows( $res );

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<script type="text/JavaScript">
var a = new Array();

<?
if ($num_rows>0) {
    while ( $row=mysql_fetch_array($res) ) {
        $arr_str .= "a[a.length] = \"".stripslashes($row["user"])."\";\n";
        $arr_str .= "a[a.length] = \"".date( "H:i:s", $row["stamp"] )."\";\n";
        $arr_str .= "a[a.length] = \"".stripslashes($row["msg"])."\";\n";
        $s = $row["stamp"];
    }
       
    print $arr_str;
}
?>

parent.writeChat( a );
setTimeout( "location.href='chat.php?s=<?=$s?>'", 5000 );
</script>
</html>

Men skal jeg være helt ærlig forstår jeg ikke så meget af den...
min nuværende opdatering:

Mysql

CREATE TABLE chatbeskeder (
  id bigint(11) NOT NULL auto_increment,
  fra varchar(50) NOT NULL default '',
  til varchar(50) NOT NULL default '',
  besked mediumtext NOT NULL,
  rum tinyint(4) NOT NULL default '0',
  smil varchar(25) NOT NULL default 'tomt',
  PRIMARY KEY  (id)
) TYPE=MyISAM;


og kode som så er sat sammen med en session_start(); og en setTimeout("self.location.reload(true)",3500);

Hele:
<?php

  include("config.php");
  mysql_connect($host,$user,$pass);
  mysql_select_db($db);
  $hent_dem = mysql_query("SELECT * FROM chatusers WHERE navn = '$s_navn'");
  while ($rowz = mysql_fetch_array ($hent_dem)) {
$rum123 = "$rowz[online_rum]";
$hent = mysql_query ("SELECT * FROM chatbeskeder WHERE rum='$rum123' AND (til='alle' OR til='$s_navn' OR fra='$s_navn') ORDER BY id DESC LIMIT 0,17");
while ($row = mysql_fetch_array ($hent)) {

if ($row[fra] == "<font color=\"#0099FF\">Chatten</font>") {
echo "<font color=\"$color\" face=\"Verdana\" size=\"2\"><img src=\"gfx/smil/$row[smil].gif\"><b>$row[fra]</b> $row[besked]</font><br>";
}
elseif ($row[til] == "alle") {
$color = "#000000";
echo "<font color=\"$color\" face=\"Verdana\" size=\"2\"><img src=\"gfx/smil/$row[smil].gif\"><b><a href=\"menu.php?link=showinfo&&navn=$row[fra]\" target=\"menu\">$row[fra]</a>:</b> $row[besked]</font><br>";

}
elseif($row[til] == "$s_navn") {
$color = "#ff0000";
echo"<font color=\"$color\" face=\"Verdana\" size=\"2\"><b>Privat fra $row[fra]:</b> $row[besked]</font><br>";
}
elseif($row[fra] == "$s_navn") {
$color = "#ff0000";
echo "<font color=\"$color\" face=\"Verdana\" size=\"2\"><b>Privat til $row[til]:</b> $row[besked]</font><br>";
}
}
}
?>

kan man ombygge det mindst 'smertefrit' ?
Avatar billede olebole Juniormester
01. marts 2003 - 18:22 #4
Jeg forstår ikke, hvad du vil
Avatar billede kawzzz Nybegynder
01. marts 2003 - 18:29 #5
lave samme opdatering som på OleBole chat men skal virke på 'samme' måde som den tidligere
Avatar billede olebole Juniormester
01. marts 2003 - 18:31 #6
Har du overhovedet prøvet den? Ellers ville det måske være en meget god start  :)
Avatar billede kawzzz Nybegynder
01. marts 2003 - 18:34 #7
kørte den på min localhost men... den skriver når man logger på ikke ens beskeder...
Den klikker...
men det kan vel undgås med den js kode jeg har?
men kan en While flush ikke køre med en 10 brugere online?
Avatar billede olebole Juniormester
01. marts 2003 - 18:42 #8
Så har du gjort noget forkert ... den er ellers meget ligetil at sætte op.

Ja, den klikker ... det vil en chat altid gøre, hvis den er skrevet i et script-sprog og afvikles over en standard web-server. Undtagelsen er, hvis den er lavet med flush/sleep.

Om web-serveren kan bære 10 simultane brugere ved jeg ikke. Det svarer til at 10 sider 'hænger' og loader i én uendelighed.
Hvis du ligger på et webhotel, bliver den lukket, så snart din udbyder opdager det.
/mvh
Avatar billede kawzzz Nybegynder
01. marts 2003 - 18:51 #9
hm ja... det er jo ligesom download...

Er det det samme som
<SCRIPT LANGUAGE=javascript>

setTimeout("self.location.reload(true)",3500);
</script>
kan man blive opsagt af det?
Avatar billede bacce.dk Nybegynder
01. marts 2003 - 18:53 #10
ya det er rigtigt at olebole's chat klikker. det er lige et lille minus ved den. hvis klik lyden også forsvandt kunne det blive rigtig cool, meeen vil også helt klart sige at den der løsning med while flush den holder bestemt heller ikke ret længe.... Jeg at selv haft bygget en chat engang med denne metode, og dahmm den stakkels server kunne ik li det :-(
Avatar billede olebole Juniormester
01. marts 2003 - 18:54 #11
Du har helt misforstået flush/sleep-metoden ... der reloades siden ikke
Avatar billede olebole Juniormester
01. marts 2003 - 18:55 #12
Hvad er det præcist, du vil opnå?
Avatar billede olebole Juniormester
01. marts 2003 - 18:57 #13
bacce.dk >> Mine seneste kommentarer var ikke til dig  ;o)
Avatar billede kawzzz Nybegynder
01. marts 2003 - 18:58 #14
en mere fast måde at 'blinke' sin chat på.
Fik afvide at det kunne lade sig gøre via. while/flush.

det der med at loade i en iframe vil jeg gerne have hjælp til.
Skal der ændre MEGET i koden?
Avatar billede bacce.dk Nybegynder
01. marts 2003 - 18:58 #15
olebole>> det regnede jeg da heller ikke med.
meen sådan lige. min kommentar er skrevet til spm ---> 01/03-2003 18:34:49
havde ikke set de andre efter denne :-)
Avatar billede bacce.dk Nybegynder
01. marts 2003 - 19:01 #16
ref:
"Fik afvide at det kunne lade sig gøre via. while/flush."

ja det kan godt lade sig gøre med sådan en sleep metode, meen den er utrolig dårlig dels pga den smadrer serverens stabilitet.
men den vil også nemt kunne skabe en konflikt hvis du også vil have mulighed for at liste de brugere der er online på selve chatten da du pludselig vil stoppe denne sleep ved reload af anden vindue for at opdatere bruger dimsen
Avatar billede olebole Juniormester
01. marts 2003 - 19:07 #17
kawezzz >> Du kan se i min kode, hvordan det er lavet. Det burde ikke kunne volde problemer, hvis du samtidig læser README-filen - men du må selv lave det.
Kan du ikke finde ud af det, må du få en anden til at hjælpe, da det så ikke er så meget, du selv kan skrive - og så skal man jo skrive en helt ny chat til dig.
Det er ikke noget personligt, men det har jeg ikke tid til  :)
/mvh
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester