Als je een nieuwe pagina opent, staat die hele submit knop er niet meer op, natuurlijk. Er zijn alleen een aantal dingen waar je rekening mee moet houden.
Ten eerste moet je de script timeout op 0 zetten (ik neem aan dat dat kan bij je hosting provider), omdat anders het script vroegtijd afgebroken wordt door PHP.
Ten tweede moet je user abort uitschakelen, zodat je script doorgaat wanneer de gebruiker (of de browser) het request afbreekt of de connectie verloren gaat.
Ten derde wil je de gebruiker op de hoogte houden van wat er gebeurt en daarvoor heb je twee mechanismen nodig. Ten eerste moet je de HTML pagina zo genereren dat je afzonderlijke blokken genereert, die de browser kan renderen voordat de rest van de pagina binnenkomt. Ik geloof dat paragraph-tags dat in zowel Mozilla als Internet Explorer wel goed doen. Ten tweede moet je vanuit PHP je uitvoer naar de gebruiker sturen voordat je een intensieve berekening doet, zodat de gebruiker ziet dat je bezig bent.
Het is ook van belang dat de nieuwe pagina zo snel mogelijk weergegeven wordt, omdat de gebruiker anders in de verleiding komt om nog een keer te submitten (waardoor de mailtjes nogmaals verstuurd worden).
Samenvattend, wordt je script dus zoiets:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| <?php
ini_set('ignore_user_abort', 1);
ini_set('max_execution_time', 0);
?>
<html>
<head><title>Sending mail</title></head>
<body>
<p>Please wait while sending mail....</p>
<?php
flush();
// tijdsintensieve code komt hier
?>
<p>Done!</p>
</html> |
(Code is natuurlijk niet getest, dus er kan hier en daar een foutje in zitten.)
[
Voor 8% gewijzigd door
Soultaker op 17-07-2003 16:22
]