Avatar billede charlie3000 Nybegynder
27. januar 2004 - 02:40 Der er 10 kommentarer og
1 løsning

Hjælp til at hente data ud realtime!

Jeg har denne kode (som ikke virker), som skal hive data ud fra en database i realtime til en chat!

Er der nogen som kan se hvad jeg gør galt eller nogen som måske har en bedre idé:

---------- kode ----------

<?php ob_end_clean(); ?>
<html>

<head>
<title>edilo.com</title>
<link href="css/chat_stylesheet.css" rel="stylesheet" type="text/css">
</head>

<body style="background-color: #CDDCE1;">

<?php
for ($i = 0; $i < 3000; $i++) print (" ");
print ("\n");

ignore_user_abort();

$query = mysql_query("select id from chat where chat_room = '$_session[chat_room]'");
$countOld = mysql_num_rows($query);
$countOldTemporary = $countOld - 5;

$query = mysql_query("select id from chat where chat_room = '$_session[chat_room]' limit $countOldTemporary, $countOld");
$lastId = mysql_fetch_row($query);
$lastId = $lastId[0];

while (true) {
$query = mysql_query("select * from chat where id > '$lastId' and chat_room = '$_session[chat_room]'");
$count = mysql_num_rows($query);

if ($count != $countOld) {
$countOld = $count;

while ($row = mysql_fetch_row($query)) {

if ($row[0] > $lastId) {
flush();
$lastId = $row[0]; }}
} else {
sleep (1); }}
?>

</body>

</html>
Avatar billede charlie3000 Nybegynder
27. januar 2004 - 02:41 #1
Koden er "inspireret" fra PHP-Chat.org, men ændret drastisk til mit site!
Avatar billede human Nybegynder
27. januar 2004 - 03:24 #2
Kommer der nogle fejlbeskder? Prøv forklar bedre hvad det er der ikke virker, så kan vi meget hurtigere fortælle dig hvad fejlen er.
Avatar billede lobster Nybegynder
27. januar 2004 - 03:42 #3
Hvis det er chat som skal bære mange brugere af gangen, vil fraråde dig at lave det i scripts - den kommer til at kræve rigtig mange ressourcer.

Ville blot nævne det.

//Lobster
Avatar billede likeaprayer Nybegynder
27. januar 2004 - 10:54 #4
hvis det er fordi der ikke sker ngoet når du åbner siden at den bare står og loader er det fordi du skal give den nogen bytes i starten

f.eks sådan her


<!--

0000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000

-->

og så din kode!..
håber det hjælper!
Avatar billede charlie3000 Nybegynder
27. januar 2004 - 12:18 #5
Det ser ikke som det er problemet, med der skal gives nogen bytes i starten.
Men den står simpelthen og loader hele tiden.

Nedenstående script er fra PHP-Chat.org (håber det er i orden at jeg poster det her, så man kan smammenligne).

----- chat_main -----

<?php
if (!get_magic_quotes_gpc())
{
    ini_set("magic_quotes_gpc",1);
}

// Connect to the database server
require ('chatconfig.inc.php');

mysql_pconnect($dbserver,$chatdbuser,$pass) or die("Unable to connect to dbserver $dbserver!");
mysql_select_db($db) or die("Unable to select database $db!");

require ('chat.class.php');
require ('functions.inc.php');
require ('db_functions.inc.php');
require ('chat_layout.inc.php');

$chatter = new Chatter;
$chatter->GiveLoginMessage();

ob_end_clean();

# Skeeve Dec,24th 2002: change from Gaylen to fix problem with output buffer. In some environments
# there was a problem with scrolling down the chat window. The JavaScript needs to be below the
# ob_end_clean call.

echo "<HTML><HEAD>";
echo "<SCRIPT LANGUAGE=JavaScript>";
echo "setInterval('window.scrollTo(1,300000)',100);";
echo "</SCRIPT>";
echo "</HEAD>";
echo "<BODY BGCOLOR=$bgcolor_main TEXT=$fgcolor_main>";


// fill Browser Cache
for ($i=0; $i<3000; $i++) print (" ");
print ("\n");

ignore_user_abort();

chat();

echo "</BODY>";
echo "</HTML>";
?>


----- funktionen chat() -----

function chat()
{
    global $table_prefix, $chatter, $font_main, $font_main_size;

    $chatter = new Chatter;
    $chatroom = $chatter->GetVar(room);

    $query = "SELECT * FROM `" . $table_prefix . "chat` WHERE `chatroom` = '$chatroom'";
    $result = mysql_query($query) or die("$query failed!");
    $countold = mysql_num_rows($result);
    $countold_tmp = $countold - 5;

    $query = "SELECT * FROM `" . $table_prefix . "chat` WHERE `chatroom` = '$chatroom' LIMIT " . $countold_tmp . "," . $countold;
    $result = mysql_query($query) or die("$query failed!");
    $lastid = mysql_fetch_row($result);
    $last_id = $lastid[0];

    while (true)
    {
      $chatter = new Chatter;
      $chatroom = $chatter->GetVar(room);
   
      $query = "SELECT * FROM `" . $table_prefix . "chat` WHERE `id` > '$last_id' AND `chatroom` = '$chatroom'";
      $result = mysql_query($query) or die("$query failed!");
      $count = mysql_num_rows($result);

      if ($count <> $count_old)
      {
        $count_old = $count;
           
        while ($row = mysql_fetch_row($result))
        {
            if ($row[0] > $last_id)
            {
                if ($row[2] == "")   
                {
                    // public message
                    if ($row[1] == "System")
                    {
                        // it's a system message
                        $chat = "<FONT FACE=\"$font_main\" SIZE=\"$font_main_size\">[$row[1]]: " . HTMLEncode($row[4]) . "</font><br>";
                    } else
                    {
                        // user message
                          $chat = "<font FACE=\"$font_main\" SIZE=\"$font_main_size\" color=" . $row[7] . ">[$row[1]]: " . HTMLEncode($row[3]) . "</font><br>";
                    }
                    echo ReplaceSmilies($chat) . "\n";
                } else
                {
                    // private message
                    if ($chatter->GetVar(alias) == $row[2] || $chatter->GetVar(alias) == $row[1])
                    {
                        // ok, this instance is the adressed user or the sender
                        if ($row[1] == "System")
                        {
                            // it's a private system message
                            $chat = "<font FACE=\"$font_main\" SIZE=\"$font_main_size\">[$row[1] to $row[2]]: " . $row[4] . "<br>";
                        } else
                        {
                            // it's a private message
                              $chat = "<font FACE=\"$font_main\" SIZE=\"$font_main_size\" color=" . $chatter->GetVar('color') . ">[$row[1] to $row[2]]: " . HTMLEncode($row[3]) . "</font><br>";
                        }
                    echo ReplaceSmilies($chat) . "\n";
                    }
                }
                flush();
                $last_id = $row[0];
            }
        }
      } else
      {
          sleep (1);

          if ($chatter->GetVar(banned) == 1) {
              break;
          }

            if ($chatter->GetVar(kicked) == 1) {
              break;
          }

          if ($chatter->GetVar(is_chatting) == 0) {
              break;
          }

          if (!$chatter->CheckInactive()) {
              break;
          }

      }
    }
}
Avatar billede charlie3000 Nybegynder
27. januar 2004 - 12:20 #6
lobster --> har du nogen forslag til bedre scripts. For jeg er VIRKELIG newbee til det med sådan noget realtime chat.
Det eneste er at det ikke skal være en Java Applet eller lign., men i noget ala PHP sammen med HTML.

I hvert fald i starten!
Avatar billede charlie3000 Nybegynder
27. januar 2004 - 12:47 #7
Det jeg i princippet skal ha' lavet som virker er:

Jeg har en database med cellerne:
user, reciever, content, chat_room.

Når man er logget ind i chatten har man to sessions, ['user'] og ['chat_room']

Nu vil jeg have hevet data ud fra databasen i realtime, passende til de to sessions man har. Så man altså kun modtager det som skrives i ens rum og det som skrives personligt til en, vises selvfølgelig kun for vedkommende. Hvis det er offentlig chat er reciever lig 0, ellers skal det svare til en bruger således at vedkommendes ['user']-session passer til reciever i cellen.

Jeg har lavet hele chatten, pånær lige at få hevet dataerne ud ordentligt!

Problemet for mig ligger egentlig ikke i det med at hive private beskeder ud osv., man generelt at hive dataerne ud realtime!

Håber nogen kan hjælpe, da jeg skal have chatten færdig i dag!
Avatar billede charlie3000 Nybegynder
27. januar 2004 - 13:32 #8
Jeg føler mig lidt Palle alene i verden.

Er det fordi der ikke er nogen som kan finde ud af hvordan man gør det, eller blot fordi ingen gider svare?

Jeg har arbejdet med dette problem i næsten en uge. Siddet og prøvet mig frem og tilbage, fået min computer til at gå ned flere gange pga. uendelige løkker el. lign.

Det kan godt være at jeg lyder lidt irriterende eller desperat, men jeg ville blive så lykkelig hvis nogen lige kunne komme med løsningen.

Jeg tror virkelig ikke det er specielt svært, når man ser på de få linjers kode som der findes i de forskellige chats som benytter det jeg søger. Jeg kan bare ikke lige lure det pt.
Avatar billede charlie3000 Nybegynder
27. januar 2004 - 14:04 #9
Jeg har fundet ud af hvordan jeg konstant hiver data ud fra databasen.
Men den bliver altså bare ved og ved og ved. Den skal nu kun hive de nye data ud.

Nogen der kan hjælpe.

min kode indtil videre:

<?php
for ($i = 0; $i < 3000; $i++) print (" ");
print ("\n");

set_time_limit(0);
ignore_user_abort();

while(connection_status() === 0){

$query = mysql_query("select id, user, reciever, content from chat limit 0,30");

while ($array = mysql_fetch_array($query)) {

echo $array['content']."<br>";
flush(); }}
sleep(1);
?>
Avatar billede charlie3000 Nybegynder
27. januar 2004 - 15:37 #10
Nå!

Lukker min monolog!
Avatar billede lobster Nybegynder
27. januar 2004 - 19:23 #11
Well, om du laver den i PHP eller ASP etc, er lidt af en smagssag vil jeg mene..

Jeg ved bare af erfaring at en chat lavet i scripts, køre rigtig dårligt hvis der er mange brugere på. Alt afhængig af hvor belastede serveren er i forvejen selvfølgelig.

Jeg havde en chat lavet i scripts, som jeg har måtte skifte ud fordi den var for langsom. Og har fået fat i (købt) en chat udviklet i c++. Som performa 100 gange bedre.

Men hvis du bare vil have noget enkelt op at stå her og nu, findes der en del på nettet, som burde være nemme og implementere, når først vejledningen er læst.
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