WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Visa resultat direkt i WHILE-loop i PHP ? (https://www.wn.se/forum/showthread.php?t=28858)

Bergman 2008-04-23 12:03

Någon som har nåt bra tips på hur man visar resultat direkt i en WHILE-loop i PHP? Jag har problem med att sidan en sida tar väldigt lång tid att ladda pga av en loop i scriptet. i WHILE-loopen så är det lite ECHO:s så det är inget komplicerat. Däremot så vill jag visa varje ECHO rad för rad lixom ... hoppas ni förstår vad jag menar och har nåt bra tips hur jag ska lösa det.

while($row = mysql_fetch_array($quer)) {
echo "Text".$row['Data'];
}

Mvh Bergman

coredev 2008-04-23 12:06

Kort svar: http://se2.php.net/flush

Fast du är nog ute på hal is. Dito loopar äter CPU.

Bergman 2008-04-23 12:09

Tack för snabbt svar!

Har du något bra tips på hur man kan visa att något händer bortsett från flush?

Det är ett admin-script som inte användarna ser men risken är att administratörerna kör en "Reload" mitt i för att dom tror att det hängt sig.

coredev 2008-04-23 12:29

Finns flera sätt..

A: http://se2.php.net/ignore_user_abort

B: Starta ett bakgrundsjobb via CURL

etc.. :)

Good luck!

Bergman 2008-04-23 12:46

En annan variant kanske är att man minskar antalet steg i loopen och sedan laddar om sidan och fortsätter. Kanske är det smidigaste när jag tänker efter

martine 2008-04-23 15:41

Om du behöver skriva ut så mycket data så att det tar för lång tid så dela upp det på flera sidor med 25 eller 50 poster på varje - sedan får användaren bläddra. Det är det vanliga sättet att lösa det på.

Annars om det är nödvändigt av någon anledning att alla poster kommer på "ett blad" så gör en download-knapp och låt användaren ladda ner listan (då har man förståelse för att det tar tid).

Du kan ju också förstås göra något med ajax, t.ex. "Hämtar rad 1…", "Hämtar rad 2…", osv. då är det nog ingen som avbryter om det nu inte är så att de inte alls vill/orkar se allt innehåll.

Om innehållet i databasen är någorlunda statiskt så kan du ju spara det i en textfil som du inkluderar (och uppdaterar då och då på något lämpligt sätt, t.ex CRON).

Vad är det för data som är så omfattande att den inte vill ladda ner snabbare? Eller är det så stora mängder?

Magnus_A 2008-04-23 15:52

Citat:

Originally posted by Bergman@Apr 23 2008, 12:03
Någon som har nåt bra tips på hur man visar resultat direkt i en WHILE-loop i PHP? Jag har problem med att sidan en sida tar väldigt lång tid att ladda pga av en loop i scriptet. i WHILE-loopen så är det lite ECHO:s så det är inget komplicerat. Däremot så vill jag visa varje ECHO rad för rad lixom ... hoppas ni förstår vad jag menar och har nåt bra tips hur jag ska lösa det.

while($row = mysql_fetch_array($quer)) {
echo "Text".$row['Data'];
}

Mvh Bergman

Dela upp hämtningen

Kod:

$result=array();

while($row = mysql_fetch_array($quer)) {
$result[]="Text".$row['Data'];
}


foreach($result as $value){

echo $value;
}

Eller skapa en textsträng direkt:
$result='';
Kod:


while($row = mysql_fetch_array($quer)) {
$result .= "Text {$row['Data']} <br>";
}
echo $result;

Bäst är nog ändå göra som martine föreslår, dela upp resultatet i bitar och bläddra dig framåt och bakåt.

Bergman 2008-04-23 18:23

Det blir nog att dela upp datat i mindre bitar samt försöka optimera MySQL-tabellerna för att snabba upp hanteringen. Det är alltså en massa prisinformation till PrisCentralen.com som uppdateras ganska ofta.

Tack för all hjälp iallafall!

Jonathan P 2008-04-23 20:57

Citat:

Originally posted by Magnus_A@Apr 23 2008, 15:52
Dela upp hämtningen
Kan du förklara för mig hur...
Kod:

$result=array();

while($row = mysql_fetch_array($quer)) {
$result[]="Text".$row['Data'];
}


foreach($result as $value){

echo $value;
}

... skulle kunna gå snabbare än...
Kod:

while($row = mysql_fetch_array($quer)) {
 echo "Text".$row['Data'];
}

?

;)

Magnus_A 2008-04-23 21:39

Nej, det kan jag inte, men tro det eller ej, det går fortare när det är väldigt många rader.


Alla tider är GMT +2. Klockan är nu 05:18.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson