Hallo,
Nadat op de verzendknop van een webform wordt geklikt, wordt, vóór het uiteindelijke verzenden, eerst een tekst vermeld. Na het verzenden wordt het resultaat van die verzending onder eerdergenoemde tekst vermeld.
Echter bewuste tekst + resultaat worden pas getoond nádat de verzending heeft plaatsgevonden.
Is hier een oplossing voor?
Controleren of een formulier is verstuurd, en dan de tekst tonen?

<?php
if($_SERVER['REQUEST_METHOD']=="POST") {
	// Je formulier is via POST verstuurd.
} else {
	// je formulier is niet via POST verstuurd.
}
?>

Dank voor je reactie.
Nadat een formulier is bevestigd, wordt het gepersonaliseerd naar verschillende e-mailadressen gestuurd. Ik verstuur met phpmailer via smtp. Omdat het verzenden enkele seconden duurt, blijft het webform in beeld.
Ik wil daarom eerst de melding 'Heb even geduld...' tonen. Pas daarna moet de verzending plaatsvinden.
Dan zou ik persoonlijk voor een AJAX-request gaan, waarmee een uitvoer a-synchroon wordt uitgevoerd.
Dat kan heel makkelijk met jQuery's $.ajax()-functie. Je kan dan ook het formulier meteen weghalen.

Ook raad ik aan om per mail-adres op te slaan of diegene al in de ronde is gemaild. Dit om te voorkomen dat je mensen dubbel gaat mailen als de browser wordt beëindigd.
Snelle reactie. Dank je wel voor de tips.
Ik ben niet zo bekend met AJAX, maar zal het eens gaan bestuderen.
Swaenie - op 31/12/2014 13:06:50

Dank voor je reactie.
Nadat een formulier is bevestigd, wordt het gepersonaliseerd naar verschillende e-mailadressen gestuurd. Ik verstuur met phpmailer via smtp. Omdat het verzenden enkele seconden een duizendste seconde duurt, blijft het webform in beeld.
Ik wil daarom eerst de melding 'Heb even geduld...' tonen. Pas daarna moet de verzending plaatsvinden.


Het versturen van mail duurt echt net niets... hooguit 2 á 3 milliseconden. Zo lang kunnen mensen nog wel wachten. Dus geen extra pagina: gewoon versturen en (als dat gelukt is) tonen dat de bestelling klaar is.

Ik raad wel aan om er een na een aantal mails sleep() er tussen te gooien, om te voorkomen dat mailservers het kerkennen als spam.
@Eddy E: als ik gewoon met mail() verstuur duurt het verzenden inderdaad zeer kort. Maar maak ik gebruik van de class phpmailer en van gmail-smtp dan duurt het toch echt langer... Ook bij een enkele mail.
Als ik echter mail() gebruik, dan ontvangen de geadresseerden als afzender het afzenderadres met als toevoeging dat deze loopt via <naamwebhost>.
Bovendien viel het me op dat ie dan vaak in het spamvak terecht kwam. Vandaar mijn keuze. Die langzame verzending vind ik echter ook niet acceptabel.
Je bent niet verplicht met PHPMailer een SMTP server te gebruiken. Je kunt ook gewoon de mailserver gebruiken net als dat de mail() functie dat doet.

Hoe? Gewoon door alle SMTP instellingen er uit te halen.
Geweldig. Bedankt voor jullie reacties.
Ik ben nog steeds niet uitgeleerd ;-) Ga 't allemaal bestuderen en uitproberen.

Reageren