Na het inloggen..
Dit is mijn eerste bericht op dit forum, maar kende de site al een tijdje. Ik ben op zoek naar tips om een probleem op te lossen waar ik al een tijdje mee zit.
Wanneer ik een inlogsysteem maak, doe ik dat op een vrij eenvoudige manier. Een login form met de nodige inputvelden, waarna door de submit button te gebruiken naar dezelfde pagina verwezen wordt (PHP_SELF). Dan volgt natuurlijk de controle als de gegevens juist zijn, en indien dit het geval is geef ik een bericht dat er succesvol is ingelogd. Maar dan wil ik graag dat er een andere pagina opent, met een nieuwe menu e.d. Momenteel doe ik dit door in het bericht mee te geven dat ze worden doorverwezen, en na 4 seconden gebeurt dat ook, maar vind dit toch een beetje omslachtig werken.
Hoe kan ik dus, indien ze succesvol zijn ingelogd, ze direct naar de volgende pagina brengen, dus zonder die irritante redirect?
Bedankt!
Je kunt de gebruiker direct vanuit PHP redirecten. Dat gaat veel sneller :-)
De enigste voorwaarde is dat je geen enkele output gegenereerd hebt. (geen HTML, geen echo's)
Met andere worden moet je pagina beginnen met een blok PHP code waarin je de redirect uitvoert.
In deze code staan geen echo, print_f etc.
Gewijzigd op 20/07/2014 19:56:46 door Frank Nietbelangrijk
Bedankt voor je snelle antwoord! Is dat de meest gebruikelijke manier die gehanteerd wordt wanneer een dergelijk systeem wordt opgebouwd?
Ja, deze manier wordt vaak gebruikt.
zoals hier maar gewoon het attribuut action leeg te laten:
Kijk wat mij betreft begin je goed. Je blijft namelijk op de pagina van het formulier zolang alle velden niet goed ingevuld zijn. Dat is wel zo logisch. Soms lees je het advies om geen PHP_SELF te gebruiken Quote:
Na deze redirect wordt je script tevens direct beëindigd.
Dit is niet waar. De header functie is alleen een functie die PHP vertelt wat voor extra headers hij moet meezenden bij de response. De rest van het script wordt hierna nog steeds uitgevoerd.
PHP zorgt er wel voor dat de content gegenereerd door het script dat volgt niet meer wordt uitgevoerd. Maar eventuele acties die andere (third party) services beinvloeden (zoals een curl call of een database call) worden alsnog uitgevoerd.
Daarom wordt er aangeraden na een header('Location: ...') call altijd een exit() call te plaatsen.
Oke, ik dacht dat het niet veel uitmaakte maar je uitleg is helder Wouter.