Sessie gebruiken in formulier

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Guido  -

Guido -

18/01/2016 00:41:50
Quote Anchor link
Hallo,

Ik heb een formulier en php script(je) gemaakt die een simpele berekening doet: waarde 1 x waarde 2 / 1000.

Waarde 1 en waarde 2 zijn invoervelden en wanneer je op submit drukt wordt middels method="POST" de berekening gedaan.

Werkt prima, maar ik dacht in eerste instantie dat ik een sessie zou moeten gebruiken om de ingetypte waardes (tijdelijk) op te slaan. Maar dat blijkt niet te hoeven.

Ik vraag me af waarom? De pagina wordt immers ververst na het drukken op submit.

Guido
 
PHP hulp

PHP hulp

14/01/2025 12:20:15
 
Thomas van den Heuvel

Thomas van den Heuvel

18/01/2016 00:57:23
Quote Anchor link
De POST data is alleen beschikbaar aan de serverkant, en die kun je weer (direct) terugsturen in de response daarop via het weergeven van $_POST data. Daarna is deze informatie niet meer beschikbaar. Daar komt nog bij dat er meestal een tussenstap aan de serverkant zit waar je niets van merkt waarin het formulier wordt verwerkt. Die opzet is in principe netter (zorgt voor een betere scheiding van acties en voorkomt "dubbelposten"), maar vereist wel dat je deze data moet opslaan in een sessie om deze nog verder te onthouden aan de gebruikerskant.
 
Guido  -

Guido -

18/01/2016 09:45:27
Quote Anchor link
Duidelijk, dank je!
Direct na het drukken op submit wordt de uitkomst onder het formulier getoond (via een $_post / echo). Formulier zelf is dan weer leeg, maar dat komt dus doordat ik geen sessie gebruik.

Guido
 
Randy vsf

Randy vsf

18/01/2016 10:37:05
Quote Anchor link
Je kan het formulier ook weer vullen met de POST data.
Bij de inputs kan je het value attribute hiervoor gebruiken.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input type="text" name="data" value="<?php echo $_POST['data'] ?>">
Gewijzigd op 18/01/2016 10:37:46 door Randy vsf
 
Thomas van den Heuvel

Thomas van den Heuvel

18/01/2016 14:52:20
Quote Anchor link
@Randy, mogelijk bevat $_POST['data'] HTML, JavaScript of andere ongein. Los daarvan, dit is USER DATA, deze dien je NOOIT te vertrouwen. Daartoe dien je de mogelijk speciale betekenis van deze data binnen de HTML-context onschadelijk te maken door middel van output escaping. Denk hierbij aan htmlentities() of (wellicht beter) htmlspecialchars().

Dan heb je nog te maken met de character encoding van je data. Escaping van data kan alleen veilig gebeuren als je hierbij de juiste (en bij voorkeur overal dezelfde) character encoding gebruikt. Er vanuitgaande dat je overal UTF-8 gebruikt zou dit een veilige variant zijn:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input type="text" name="data" value="<?php echo htmlspecialchars($_POST['data'], ENT_QUOTES, 'UTF-8') ?>">

Omdat dit elke keer nogal een mondvol is zou je hier een functie voor kunnen introduceren:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
function escape($in) {
    return htmlspecialchars($in, ENT_QUOTES, 'UTF-8');
}

?>

Waarmee bovenstaande code gereduceerd wordt tot simpelweg:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input type="text" name="data" value="<?php echo escape($_POST['data']) ?>">
 
Ozzie PHP

Ozzie PHP

18/01/2016 15:01:57
Quote Anchor link
Offtopic:

@Thomas:

In een objectgeoriënteerde omgeving zie je dergelijke globale functies ook wel eens ondergebracht worden in een object, bijv. een Tools object. Dan krijg je bijvoorbeeld:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input type="text" name="data" value="<?php echo Tools::escape($_POST['data']) ?>">
Offtopic:

Ben jij hier een voorstander van? Of juist niet? Of hangt het er vanaf of je procedureel of OOP programmeert?
Gewijzigd op 18/01/2016 15:03:24 door Ozzie PHP
 
Randy vsf

Randy vsf

18/01/2016 15:08:13
Quote Anchor link
@thomas, k vertrouw nooit user input, was alleen als voorbeeld bedoeld dat het ook zonder sessies kan.
Verder vind ik het wel een mooie toevoeging van je aan dit topic ^^
 
Thomas van den Heuvel

Thomas van den Heuvel

18/01/2016 15:32:17
Quote Anchor link
@Ozzie
Zelf heb ik voor mijn systeempje een Helper class met allerhande functies die niet echt ergens anders ondergebracht kunnen worden. Op het moment dat je veel (soortgelijke) functionaliteit hebt zou je deze kunnen bundelen in een aparte class, maar tot die tijd kun je wat mij betreft prima volstaan met één helper class met static methoden, al was het maar om de functienamen uit de globale scope te halen zodat deze niet conflicteren met code van "third parties".

Ik had hier gemakshalve het object georiënteerde aspect even achterwege gelaten om het voorbeeld niet verder te compliceren dan nodig, maar het zou wel mijn voorkeur hebben ja. Hangt natuurlijk ook af van de omvang van je applicatie, als je een kleine simpele website hebt is een hybride of zelfs procedurele vorm ook niet zo'n probleem. OOP is een middel, geen doel.

/offtopic
 
Ozzie PHP

Ozzie PHP

18/01/2016 16:54:57
Quote Anchor link
Allright, thanks! ;-)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.