[PHP] Laadregel/scherm tijdens uitvoeren mysql query *

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beste Tweakers.

Ik heb nogal een vrij uitgebreide query welke ook nog de nodige laadtijd met zich mee brengt.

Nu zou ik graag een laadregel willen zien, of een laadscherm zodat de bezoeker ziet dat er een opdracht word uitgevoerd. Op dit moment staat er onderin het scherm in de statusbalk "gereed".

Het script hoeft niet in procenten aan te geven hoe lang er nog gewacht moet worden. Het gaat slechts om een weergave van "Loading..." bijvoorbeeld.

Ik heb al op gathering gezocht maar kon geen antwoord op mijn vraag vinden.

Enig idee hoe ik dit het beste kan aanpakken?

Alvast bedankt voor de moeite!

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 22:34
Ik zou eerlijk gezegd eerst proberen de query te optimaliseren. Een query die enkele seconden duurt kan meestal nog wel wat geoptimaliseerd worden.

Wat directer op de vraag. Wat je kunt doen is op pagina A vanwaar je een link hebt naar de bewuste pagina B een popup openen zodra er op de link geklikt wordt. Bij het laden van pagina B sluit je de popup weer. In de popup kun je de loading tekst zetten, evt met een animated gif om de indruk te wekken dat er echt van alles gebeurt :)

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05 09:40

GX

Nee.

Met welke techniek wil je dit doen? Wat heb je al geprobeert? Wat heb je tot je beschikking? Een richting die je op wilt?

Met deze hoeveelheid informatie kunnen we je natuurlijk niet helpen..

Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
T-MOB schreef op maandag 31 oktober 2005 @ 11:26:
Wat je kunt doen is op pagina A vanwaar je een link hebt naar de bewuste pagina B een popup openen
Een popup? Alstublieft niet.
Daar moet toch wel iets beters voor te verzinnen zijn?

En Skiffle, waar gaat dit precies over? PHP? C++? Java?

[ Voor 10% gewijzigd door Olaf van der Spek op 31-10-2005 11:29 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Sorry jongens..

Het gaat om PHP in combinatie met mysql...

Acties:
  • 0 Henk 'm!

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Mjah je kan iets doen met een iframe dat om de paar secondes de status pollt.

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 22:34
OlafvdSpek schreef op maandag 31 oktober 2005 @ 11:29:
[...]
Een popup? Alstublieft niet.
Daar moet toch wel iets beters voor te verzinnen zijn?
Wat is er mis met een popupje dan?

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het moet toch gewoon mogelijk zijn om loading... op je scherm te toveren tijdens de uitvoer van een query?

Acties:
  • 0 Henk 'm!

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05 09:40

GX

Nee.

Ja, maar je moet wel een moment weten dat je weet dat de query klaar is. Als je een andere pagina wilt laten zien moet je goed gaan stunten om de juiste data op de pagina er na te toveren. Je zou ook met een iframe kunnen pollen. De laatste optie is misschien AJAX.

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 22:34
GX schreef op maandag 31 oktober 2005 @ 11:57:
Ja, maar je moet wel een moment weten dat je weet dat de query klaar is. Als je een andere pagina wilt laten zien moet je goed gaan stunten om de juiste data op de pagina er na te toveren. Je zou ook met een iframe kunnen pollen. De laatste optie is misschien AJAX.
Je kunt ook gebruik maken van het feit dat een browser de huidige pagina laat staan zolang de nieuwe niet volledig geladen is. Je kunt dus met PHP zorgen dat de query alleen wordt uitgevoerd als een GET parameter wordt geset. Wordt deze niet geset dan geef je een pagina weer met het loading gebeuren en een javascript redirect naar dezelfde pagina met GET parameter.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
if (isset($_GET['go'])) {
  //normale pagina met lange query
} else {
?>
<html>
<head>
 <script type="text/javascript">document.location='pagina.php?go=true'</script>
</head><body>
 <p>LOADING...</p>
</body>
</html>
<?php } ?>

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
T-MOB schreef op maandag 31 oktober 2005 @ 11:53:
Wat is er mis met een popupje dan?
Veel mensen houden niet van (onnodige) popups.

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
OlafvdSpek schreef op maandag 31 oktober 2005 @ 12:09:
[...]

Veel mensen houden niet van (onnodige) popups.
En worden dus ook vaak tegen gehouden door pop-up blockers

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Heel simpel.

Echo een DIVje met daarin een animated gif van een zandloper, de text "Wach tff", of wat je wilt, en knal er een flush() achteraan. Laat op de window.onload het DIVje verbergen.
Zo doe ik het zelf ook met een pagina welke een aantal minuten nodig heeft ivm uitlezen externe bestanden.

Let wel op dat dit DIVje niet binnen een tabel staat. Browsers tonen de gegevens in een tabel pas wanneer de </table> is ontvangen.

PHP:
1
2
3
4
5
6
7
echo "<div id=\"ffWachten\">Even geduld...</div>";
flush();

// Langdurige code
sleep(100);

echo "<script>document.getElementById('ffWachten').style.display = 'none';</script>";

[ Voor 35% gewijzigd door frickY op 31-10-2005 12:33 ]


Acties:
  • 0 Henk 'm!

  • _Gekkie_
  • Registratie: Oktober 2000
  • Laatst online: 24-06 20:21

_Gekkie_

And the cow said: Helloooooow?

ik zou het ook zoals frickY doen, maar dan iets netter... (imho)
bijvoorbeeld de controle of alle afbeeldingen geladen zijn:
stukje js in je head, whereever?
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function loadAllImages() {
    if (document.getElementById) {  // DOM3 = IE5, NS6
        document.getElementById('hiddenPageDiv').style.visibility = 'hidden';
        document.getElementById('loadingDiv').style.visibility = 'hidden';
    } else {
        if (document.layers) {  // Netscape 4
            document.hiddenPageDiv.visibility = 'hidden';
            document.loadingDiv.visibility ='hidden';
        }else {  // IE 4
            document.all.hiddenPageDiv.style.visibility = 'hidden';
            document.all.loadingDiv.style.visibility = 'hidden';
        }
   }
}

om dit vervolgens in je html ergens neer te zetten:
HTML:
1
2
3
4
5
<div id="hiddenPageDiv"> </div><div id="loadingDiv">
<table width="300" align=center style="z-index:104"><tr>
    <td align=center>[img]"/wait.gif"[/img]<br><b>Loading....</b><br><br>Heb ff geduld!<br><br>
            <a href="#" onClick="loadAllImages()"><font size="-2">Heb je haast, klik dan hier....</font></a></td>
</tr></table></div>

met op de <body>-tag de onLoad="loadAllImages();"

Het voordeel van deze methode is dat je netjes je html los van je output kan gooien... (en zodoende dus ook de code wat schoner kan houden)

Gekkie is a proud member of TheBenny!


Acties:
  • 0 Henk 'm!

  • Tjoekbezoer
  • Registratie: Maart 2003
  • Laatst online: 18-11-2024
Ik zou het met AJAX oplossen, omdat het een nette oplossing is. AJAX is de laatste tijd nogal een mode woord, maar de technologie erachter is voor de programmeur eenvoudig toe te passen, en levert mooie resultaten voor de gebruiker.

Er is meer dan genoeg over op het web te vinden. Om je een eind in de goede richting te helpen: het AJAX principe bestaat uit een combinatie van javascript code met XMLHTTP.

Met XMLHTTP kun je asynchrone HTTP request uitvoeren. In eenvoudig nederlands betekent het dat je, zonder de pagina te herladen, een nieuwe pagina op de server kan ophalen en de HTML die deze pagina produceert in je huidige pagina kan weergeven.

Het is zeker de moeite waard om dit principe eens goed te bestuderen. Op mijn werk maken we er in ons framework intensief gebruik van, wat de gebruikersvriendelijkheid en snelheid ten goede komt.

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Wat een hoop gedoe allemaal voor zoiets simpels...

AJAX is hier perfect voor. Laad je query via xmlHttp of een iframe (jaja de aloude iframe manier valt ook onder het magische 'AJAX') en geef bericht weer. Zodra je response terug krijgt haal je bericht weg en geef je resultaat weer... voila..

Gaan spelen op onvoorspelbaarheden van de browser zoals frickY voorstelt is echt niet meer van deze tijd. Nofi.

[ Voor 9% gewijzigd door Bosmonster op 01-11-2005 09:05 ]

Pagina: 1