Avatar billede 123maka Nybegynder
23. februar 2003 - 02:52 Der er 16 kommentarer og
2 løsninger

while - hvordan?

jeg har fået afvide (fra http://www.eksperten.dk/spm/164392) at en chat kan opdatere via. en while.

Min kode som jeg har nu er her http://www.pastebin.com/3395

Hvordan kan man gøre det?
Avatar billede 123maka Nybegynder
23. februar 2003 - 03:47 #1
har fået bøffet mig denne kode :0)

$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);
}

Kan man få den til at virke hurtigere?
Jeg tænkte på at smide en limit ind men det virker vist ikke...
Avatar billede mufoxe Nybegynder
23. februar 2003 - 08:44 #2
Du kunne f.eks. gemme det største id i en var og så kun hente de nyeste rækker ud. Noget i retning af:
$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 = $query["id"];
  }
flush;
sleep(2);
}
Avatar billede 123maka Nybegynder
23. februar 2003 - 10:04 #3
Den ignorerer min LIMIT 0.15 og skriver:
Warning: Supplied argument is not a valid MySQL result resource in c:\apache\htdocs\site\projekter\chat\test\chat_ny\besked_show2.php on line 14

Hvordan kan jeg få sat den limit på?
Avatar billede jakoba Nybegynder
23. februar 2003 - 10:54 #4
det er et komma, og ikke et punktum (amerikanerne brug . (punktum) som decimaltegn)

    LIMIT 0, 15
betyder fra og med nr 0 og 15 frem

    LIMIT 0.15
betyder  fra den første og 0,15 (afrundes til 0) frem

mvh JakobA
Avatar billede 123maka Nybegynder
23. februar 2003 - 11:00 #5
$id = 0;
while(1) {
  $query = mysql_query("SELECT * FROM chatbeskeder WHERE id > $id LIMIT 0, 15");
  while($vis = mysql_fetch_array($query)) {
    print "$vis[besked]<br>\n";
  $id = $id+1;
  }
flush;
sleep(2);
}

Nu har jeg denne kode
Men den resulterer i at den henter 15 linier HVER gang..
Det er menignen den KUN skal vise de 15 med det højeste id, kan man det?
Avatar billede jakoba Nybegynder
23. februar 2003 - 11:12 #6
sql_kommando = "
    SELECT *
    FROM chatbeskeder
    WHERE id > $id
    ORDER BY id DESC
    LIMIT 0, 15
";

den kommando vil hente de 15 sidste (jeg går ud fra id er et autoincrement felt) og give dig dem i omvendt orden (sidste først)

mvh JakobA
Avatar billede 123maka Nybegynder
23. februar 2003 - 11:17 #7
Mener du i phpmyadmin der hvor der står mysql forespørgsel?
Prøvede lige og den siger at der er fejl der hvor der står $id
Avatar billede jakoba Nybegynder
23. februar 2003 - 11:37 #8
hele stumpen:

<?php
$id = 0;
while(1) {
    sql_kommando = "
        SELECT *
        FROM chatbeskeder
        WHERE id > $id
        ORDER BY id DESC
        LIMIT 0, 15
    ";
    $query = mysql_query($sql_kommando) or die( mysql=error() );
    while($vis = mysql_fetch_array($query)) {
        print "$vis[besked]<br>\n";
        $id = $id+1;
    }
    flush;
    sleep(2);
}
?>

PS: du vil nok næppe få det til at virke andre steder end på en server der er din egen. det holder en connection permanent åben, og det er der ikke mange udbydere der har råd til at tillade at du har.

mvh JakobA
Avatar billede jakoba Nybegynder
23. februar 2003 - 11:38 #9
Ups. jeg kom til at skrive = istedet for _
    $query = mysql_query($sql_kommando) or die( mysql_error() );
Avatar billede 123maka Nybegynder
23. februar 2003 - 11:45 #10
se her:
http://80.63.241.213/exp.php
Den skal jo KUN vise 15 ialt også vise de nye linier hvis der kommer nogle.
Altså dem med højest id
Avatar billede jakoba Nybegynder
23. februar 2003 - 11:48 #11
det vil nok nytte mere hvis du viser den php-kode du bruger :-)

mvh JakobA
Avatar billede jakoba Nybegynder
23. februar 2003 - 11:52 #12
PS: du skulle vel aldrig have fået et tåbeligt råd om at sætte error_level til none ?
Hvis man overhovedet gør det så er det ihvertfald først efter man har debugget sin kode.
Avatar billede 123maka Nybegynder
23. februar 2003 - 12:26 #13
error_code?
Naa?

Koden:
<?php
$id = 0;
while(1) {
$host = "localhost"; // Host
$pass = ""; // Kodeord
$user = "root"; // Bruger
$db = "kaw"; // Database
  mysql_connect($host,$user,$pass);
  mysql_select_db($db);
$sql_kommando = "
        SELECT *
        FROM chatbeskeder
        WHERE id > $id
        ORDER BY id DESC
        LIMIT 0, 15
";
    $query = mysql_query($sql_kommando) or die(mysql_error());
    while($vis = mysql_fetch_array($query)) {
        print "$vis[besked]<br>\n";
        $id = $id+1;
    }
    flush;
    sleep(2);
}
?>
Avatar billede 123maka Nybegynder
23. februar 2003 - 20:02 #14
Nu har jeg fået mig denne kode:

<?php
$i = 0;
while ($i < 5) {
$host = "localhost"; // Host
$pass = "response"; // Kodeord
$user = "root"; // Bruger
$db = "kawzhotel"; // Database
  mysql_connect($host,$user,$pass);
  mysql_select_db($db);

  $query = mysql_query("SELECT * FROM chatbeskeder ORDER BY ID DESC LIMIT 0, 15");
  while($vis = mysql_fetch_array($query)) {
    print "$vis[besked]<br>\n";
  $i = $i + 1;
  }
flush;
sleep(2);
}
?>
Den virker med limit...
Nu skal den tjekke om der er kommet nye beskeder siden den er blevet vist...
HVORDAN gør man det?
Avatar billede jakoba Nybegynder
24. februar 2003 - 01:37 #15
Det gør du allerede. ny meddelelser får et nyt (højere) id og bliver så vist næste gang igennem løkken.

men det er lidt fjollet at connecte til din databade hvergang igennem løkken. Gør det udenfor:

<?php

$host = "localhost"; // Host
$pass = "response"; // Kodeord
        // når du engang lægger siden på nettet så husk at bruge et andet
        // kodeord, nu hvor vi har fået dette at vide.
$user = "root"; // Bruger
$db = "kawzhotel"; // Database
mysql_connect($host,$user,$pass);
mysql_select_db($db);

$i = 0;
while ($i < 5) {

    $query = mysql_query("SELECT * FROM chatbeskeder ORDER BY ID DESC LIMIT 0, 15");
    while($vis = mysql_fetch_array($query)) {
        print "$vis[besked]<br>\n";
        $i = $i + 1;
    }
    flush;
    sleep(2);
}
?>

mvh JakobA
Avatar billede jakoba Nybegynder
24. februar 2003 - 01:39 #16
nåe nej, du har jo fjernet testen med id > $id, så gør du det ikke mere. og hvad pokker er det for en tællevariabel $i du har introduceret.

Hvad er meningen med den ?
Avatar billede 123maka Nybegynder
24. februar 2003 - 10:15 #17
Det var noget jeg læste i en artikel som jeg lige prøvede af!

Kan man hvis man har id > $id?
Avatar billede 123maka Nybegynder
04. marts 2003 - 20:24 #18
Jakoba vil du have points så sig lige til
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