Toon posts:

[PHP] While loop werkt niet goed

Pagina: 1
Acties:
  • 62 views sinds 30-01-2008

Verwijderd

Topicstarter
Dit is wat ik momenteel heb, hij moet eerst de gewone posts weergeven en dan pas de loop starten om te kijken of er nieuwe berichten zijn... Zo ja? ff refreshen, zo niet, dan nog maals controleren. En dat 1 keer per seconde. Enigste dat ik krijg is een witte pagina en onderin de balk staat nog dat ie aan het laden is...

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?
include("info.php");
$q = mysql_query("SELECT * FROM message ORDER BY id DESC");
$c = mysql_num_rows($q);
while ($l = mysql_fetch_object($q)) {
    if ($l->private=="") {
        echo"<a class=private>$l->poster</a><a class=text> » $l->message</a><BR>";
    }
    if ($l->private!="" && $l->poster==$chat_user) {
        echo"<a class=text>$l->poster</a><a class=private> » $l->message</a><BR>";
    }
}

set_time_limit(0);
while (TRUE) {
    $b = mysql_num_rows(mysql_query("SELECT * FROM message ORDER BY id DESC"));
    if ($b!=$c) {
        header("location: $PHP_SELF");
    }
    sleep(1);
}
?>


Wie oh wie kan mij helpen, alvast bedankt.

- Frag

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Maarre: waar checkt die tweede while op? TRUE??? Dan blijft ie toch altijd loopen?

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 26-08 16:09
eeeh, zet je error level wat hoger :D

Je zit eerst een zooi te echo-en en daarna doe je pas de header() call.
Dat kan wel maar dan moet je met ob_start e.d. in de weer.

En doe ook een exit() na die header call anders blijft je while() loop gewoon doorlopen.

[ Voor 22% gewijzigd door bartvb op 16-12-2002 16:02 ]


Verwijderd

Topicstarter
bartvb schreef op 16 december 2002 @ 16:01:
eeeh, zet je error level wat hoger :D

Je zit eerst een zooi te echo-en en daarna doe je pas de header() call.
Dat kan wel maar dan moet je met ob_start e.d. in de weer.

En doe ook een exit() na die header call anders blijft je while() loop gewoon doorlopen.
Dat heb ik al...helemaal boven aan de pagina staat ob_start();

En hij moet ook eindeloos door blijven lopen, lees anders eerst even het stukje text dat er boven staat :(
BtM909 schreef op 16 December 2002 @ 16:01:
Maarre: waar checkt die tweede while op? TRUE??? Dan blijft ie toch altijd loopen?
Hetzelfde verhaal.... Lees eerst de text die er boven staat :(

[ Voor 31% gewijzigd door Verwijderd op 16-12-2002 16:04 ]


Verwijderd

Topicstarter
okey, nu ff met wat verduidelijking......


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?
// info van gebruiken ophalen, niet belangrijk
include("info.php");

// de berichten ophalen
$q = mysql_query("SELECT * FROM message ORDER BY id DESC");

// tellen hoeveel het erzijn
$c = mysql_num_rows($q);

// berichten weergeven niet belangrijk
while ($l = mysql_fetch_object($q)) {
    if ($l->private=="") {
        echo"<a class=private>$l->poster</a><a class=text> » $l->message</a><BR>";
    }
    if ($l->private!="" && $l->poster==$chat_user) {
        echo"<a class=text>$l->poster</a><a class=private> » $l->message</a><BR>";
    }
}

// zorg dat ie altijd door kan blijven gaan
set_time_limit(0);

// TRUE = voor altijd
while (TRUE) {
    // tellen hoeveel het er nou zijn
    $b = mysql_num_rows(mysql_query("SELECT * FROM message ORDER BY id DESC"));
    // is het niet gelijk, dus zijn er meer posts?? vernieuwen zodat de nieuwste posts weergegeven worden
    if ($b!=$c) {
        header("location: $PHP_SELF");
    }
    // wacht een seconde voor de volgende controle
    sleep(1);
}
// nu begint hij weet bij 'while (TRUE)' om de controle weer uit te voeren, een keer per seconde
?>

Verwijderd

Verwijderd schreef op 16 december 2002 @ 16:09:
okey, nu ff met wat verduidelijking......


PHP:
1
2
// TRUE = voor altijd
while (TRUE) {
:+


edit:
Okay, nu ff wél helpen:

Kan dit
PHP:
1
2
3
4
5
6
7
8
9
// berichten weergeven niet belangrijk 
while ($l = mysql_fetch_object($q)) { 
    if ($l->private=="") { 
        echo"<a class=private>$l->poster</a><a class=text> » $l->message</a><BR>"; 
    } 
    if ($l->private!="" && $l->poster==$chat_user) { 
        echo"<a class=text>$l->poster</a><a class=private> » $l->message</a><BR>"; 
    } 
}

niet beter zo?
PHP:
1
2
3
4
5
6
7
8
9
// berichten weergeven niet belangrijk 
while ($l = mysql_fetch_object($q)) { 
    if ($l->private=="") { 
        echo"<a class=private>$l->poster</a><a class=text> » $l->message</a><BR>"; 
    } 
    elseif ($l->poster==$chat_user) { 
        echo"<a class=text>$l->poster</a><a class=private> » $l->message</a><BR>"; 
    } 
}

[ Voor 99% gewijzigd door Verwijderd op 16-12-2002 16:13 ]


  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 26-08 16:09
*zucht*
Hoezo eigenwijs :P

Je while loop blijft doorlopen tot je browser of je server het opgeeft.. Je browser zal dus altijd 'laden' laten zien. Je browser ontvangt die header misschien wel maar doet er geen bal mee tot PHP heeft gezegd dat dit alles was (met exit() dus). Nu blijf je browser heel de tijd op nieuwe data wachten.

Denk de volgende keer ff na voor je iemand die probeert te helpen afkat. |o

Verwijderd

Topicstarter
Verwijderd schreef op 16 december 2002 @ 16:11:
[...]

:+


edit:
Okay, nu ff wél helpen:

Kan dit
PHP:
1
2
3
4
5
6
7
8
9
// berichten weergeven niet belangrijk 
while ($l = mysql_fetch_object($q)) { 
    if ($l->private=="") { 
        echo"<a class=private>$l->poster</a><a class=text> » $l->message</a><BR>"; 
    } 
    if ($l->private!="" && $l->poster==$chat_user) { 
        echo"<a class=text>$l->poster</a><a class=private> » $l->message</a><BR>"; 
    } 
}

niet beter zo?
PHP:
1
2
3
4
5
6
7
8
9
// berichten weergeven niet belangrijk 
while ($l = mysql_fetch_object($q)) { 
    if ($l->private=="") { 
        echo"<a class=private>$l->poster</a><a class=text> » $l->message</a><BR>"; 
    } 
    elseif ($l->poster==$chat_user) { 
        echo"<a class=text>$l->poster</a><a class=private> » $l->message</a><BR>"; 
    } 
}
Zoals jij dat zij werkte nog slechter :D sorry... Dat krijg ik ongeveer het ongekeerde van wat ik had. Enne, waar sloeg dat eerste gedeelte op??? :P

Verwijderd

Topicstarter
Ik heb hem ff van mn localhost op mn eigen host gezet:
spam

Ff aanmelden dan kan je het zelf zien :/

[ Voor 16% gewijzigd door D2k op 16-12-2002 16:50 ]


Verwijderd

Topicstarter
wie heeft zich aangemeld als test????

Verwijderd

Verwijderd schreef op 16 december 2002 @ 16:21:
Enne, waar sloeg dat eerste gedeelte op???
Ik ga er van uit dat dit niet serieus is.

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Hoezo eigenwijs :?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
// TRUE = voor altijd
while (TRUE) {
    // tellen hoeveel het er nou zijn
    $b = mysql_num_rows(mysql_query("SELECT * FROM message ORDER BY id DESC"));
    // is het niet gelijk, dus zijn er meer posts?? vernieuwen zodat de nieuwste posts weergegeven worden
    if ($b!=$c) {
        header("location: $PHP_SELF");
    }
    // wacht een seconde voor de volgende controle
    sleep(1);
}
?>
bartvb schreef op 16 December 2002 @ 16:13:
Je while loop blijft doorlopen tot je browser of je server het opgeeft.. Je browser zal dus altijd 'laden' laten zien. Je browser ontvangt die header misschien wel maar doet er geen bal mee tot PHP heeft gezegd dat dit alles was (met exit() dus). Nu blijf je browser heel de tijd op nieuwe data wachten.

Denk de volgende keer ff na voor je iemand die probeert te helpen afkat. |o

[ Voor 4% gewijzigd door BtM909 op 16-12-2002 16:29 ]

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Verwijderd

Verwijderd schreef op 16 december 2002 @ 16:28:
wie heeft zich aangemeld als test????
IK!

Verwijderd

BtM909 schreef op 16 december 2002 @ 16:29:
Hoezo eigenwijs :?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
// TRUE = voor altijd
while (TRUE) {
    // tellen hoeveel het er nou zijn
    $b = mysql_num_rows(mysql_query("SELECT * FROM message ORDER BY id DESC"));
    // is het niet gelijk, dus zijn er meer posts?? vernieuwen zodat de nieuwste posts weergegeven worden
    if ($b!=$c) {
        header("location: $PHP_SELF");
    }
    // wacht een seconde voor de volgende controle
    sleep(1);
}
?>



[...]
Wat bedoel je te zeggen?

Verwijderd

Volgens mij kan je beter iets anders gebruiken dan php...
Java kan wel een connectie open houden volgens mij...
en Flash remoting ook
en waarschijnlijk met heel veel andere ook... maar ik denk niet dat dit 1,2,3 gaat werken(ja beetje pessimistisch vandaag)
pietertje

Verwijderd

Topicstarter
Ik heb het al behoorlijk vaak eerder voor elkaar gekregen.. maar nu lukket gewoon niet. En javascript is slecht (vind ik, heb zo mn redenen) en het KAN wel met PHP dus ik wil het ook...

Verwijderd

ok,ok maar ik bedoelde java niet javascript...

Verwijderd

Topicstarter
oh...dat kan ook, eigenlijk nooi gehad :D

Verwijderd

Verwijderd schreef op 16 december 2002 @ 16:33:
Ik heb het al behoorlijk vaak eerder voor elkaar gekregen.. maar nu lukket gewoon niet. En javascript is slecht (vind ik, heb zo mn redenen) en het KAN wel met PHP dus ik wil het ook...
Maar jij wilt dus met php een chat-applicatie bouwen die de verbinding naar de client open houdt dmv een while-loop met een header.
Als er iets nieuws is moet ie dat in het scherm zetten.

Lijkt me nou niet echt de beste oplossing voor een chat-applicatie.
Java kan dat inderdaad beter.
Wat je wel kunt doen is een automatisch-refresh ding inbouwen (met javascript of zoals je in de post hieronder al zet met een refresh), zodat ie bijvoorbeeld elke 10 seconden het berichtenvenster (oid) refreshed.

edit:
Maar of je dat wilt is de vraag. Ik zou het niet willen iig :)

[ Voor 11% gewijzigd door Verwijderd op 16-12-2002 16:39 ]


Verwijderd

Topicstarter
nu werk ik tijdelijk met http-equiv=refresh
niet echt optimaal maar het werkt. en ook nog eens om de 3 seconden

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15:51

Janoz

Moderator Devschuur®

!litemod

Maar het kan NIET op de manier zoals je het nu in je hoofd hebt. Ik denk dat je eens ff goed moet nadenken hoe php, en uberhaupt html werken.

Het kan ook idd wel, maar absoluut niet op de manier zoals jij het nu doet, en al helemaal niet waneer je bovenaan begint met ob_start. Waneer dacht jij nu dat de browser gegevens zou krijgen?? Je hebt toch nergens ob_end staan dat aangeeft dat de data klaar is om verstuurd te worden???

Maar als je graag eigenwijs wilt blijven mag dat natuurlijk ook, dan wens ik je veel success :+

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Janoz schreef op 16 December 2002 @ 16:39:
Maar het kan NIET op de manier zoals je het nu in je hoofd hebt. Ik denk dat je eens ff goed moet nadenken hoe php, en uberhaupt html werken.

Het kan ook idd wel, maar absoluut niet op de manier zoals jij het nu doet, en al helemaal niet waneer je bovenaan begint met ob_start. Waneer dacht jij nu dat de browser gegevens zou krijgen?? Je hebt toch nergens ob_end staan dat aangeeft dat de data klaar is om verstuurd te worden???

Maar als je graag eigenwijs wilt blijven mag dat natuurlijk ook, dan wens ik je veel success :+
Als je hiermee probeert te zeggen dat ik nog een beginner ben >:) try this asshole :D spam

Ik heb een webbased spel gemaakt zonder enige hulp, alleen ideeen zijn deels gekregen. :*)

[ Voor 4% gewijzigd door D2k op 16-12-2002 16:51 ]


Verwijderd

Verwijderd schreef op 16 december 2002 @ 16:44:
[...]


Als je hiermee probeert te zeggen dat ik nog een beginner ben >:) try this asshole :D spam

Ik heb een webbased spel gemaakt zonder enige hulp, alleen ideeen zijn deels gekregen. :*)
Ik zou maar een beetje rustig doen tegen de gevestigde orde, als ik jou was.

[ Voor 6% gewijzigd door D2k op 16-12-2002 16:51 ]


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 09-01 11:25

D2k

mjah als je het beter weet, zoek je het toch zelf uit?

Doet iets met Cloud (MS/IBM)


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15:51

Janoz

Moderator Devschuur®

!litemod

Ook al had je de nobelprijs gewonnen, het maakt mij niet uit hoor. Alleen de manier zoals je nu je chat probeert aan te pakken laat duidelijk zien dat je bepaalde dingen mbt HTTP nog niet helemaal begrepen hebt. Er zijn nu al enkele mensen geweest die je hierop hebben geprobeert te wijzen, maar als jij eigenwijs blijft verkondigen dat je zelf gelijk hebt moet je dat helemaal zelf weten.....

[edit]

Owh, d2k heeft 'm al dicht gegooid.....

[ Voor 7% gewijzigd door Janoz op 16-12-2002 16:50 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1

Dit topic is gesloten.