formulier met variabele

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Theo Huitema

Theo Huitema

06/07/2018 23:34:58
Quote Anchor link
Ik haal een jaartal uit een opgeslagen tabel.
Deze heeft de naam $Std_jaar
Deze wil ik als standaard in een invul formulier, maar ik krijg de naam van de variabele maar niet de inhoud van de variabele.
Wat moet dit zijn?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<td><input type="text" name="ZJaar" value="$Std_jaar"></td>
 
PHP hulp

PHP hulp

15/11/2024 05:39:25
 
Ben van Velzen

Ben van Velzen

06/07/2018 23:37:51
Quote Anchor link
Als je variabelen wil echoën zul je dat ook moeten doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<td><input type="text" name="ZJaar" value="<?= $Std_jaar; ?>"></td>
 
Theo Huitema

Theo Huitema

06/07/2018 23:43:33
Quote Anchor link
Oh natuurlijk ik zit in html en moet variabele in php formaat. Bedankt.
 
Thomas van den Heuvel

Thomas van den Heuvel

07/07/2018 14:23:49
Quote Anchor link
Het bovenstaande voorbeeld volstaat prima voor wat je wilt bereiken, maar het is ook verstandig om de waarde van $Std_jaar te ontdoen van enige mogelijke speciale betekenis die deze in de HTML-context heeft. Dit heet ook wel het escapen van output.

Nu is een jaartal nou niet bepaald zo spannend, maar wat als er andere invoer zit, bijvoorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
"></div>

Of
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
"><script>while(1) alert('irritant he?')</script>

Of een JavaScript snippet die je cookies steelt.

Ook wil je waarschijnlijk niet elk individueel geval gaan inspecteren en op grond daarvan bepalen of er wel of geen escaping nodig is, want dat plaatst je ook voor een andere dilemma: als escaping niet aanwezig was, betekent dit dan dat het niet nodig was of was dit per ongeluk vergeten? Je zult je dat dan ook elke keer dat je iets met die code/HTML doet moeten afvragen en dat lijkt mij niet de bedoeling.

Het makkelijkste is dus om gewoon alles (alle DATA die uit een externe bron komt) te escapen.

Alle tekst (code, HTML etc.) heeft een character encoding, dat wil zeggen heeft een specifiek formaat (in het geheugen) van nullen en enen die groepsgewijs om worden gezet in de daarbij behorende grafische iconen (de karakters die je nu leest).

Om DATA fatsoenlijk te kunnen escapen, en dus in wezen om te kunnen detecteren welke context-specifieke speciale karakters onschadelijk gemaakt dienen te worden, moet je:
- overal consequent dezelfde character encoding in je applicatie toepassen
- de escaping-functionaliteit laten werken met deze zelfde character encoding, anders is niet gegarandeerd dat deze detectie-en-conversie goed verloopt, waarmee het dus ook niet gegarandeerd is dat de escaping goed verloopt, met alle mogelijke (veilgheids)implicaties van dien

In PHP kun je DATA die op een veilige manier in HTML moet worden weergegeven het beste escapen met de functie htmlspecialchars(). Deze functie heeft naast een parameter voor de invoer ook andere parameters, waaronder één voor de character encoding (waarvan de default waarde tussen PHP-versies is veranderd, dus wellicht is het verstandig om deze altijd expliciet in te stellen).

Omdat dit elke keer nogal een riedel is om in te typen loont het wellicht de moeite om hier een aparte functie omheen te schrijven. Een ander voordeel van zo'n hulpfunctie is dat je de escaping indirect regelt (hiermee voorkom je dus tevens hard coding), dus mocht je ooit besluiten om escaping anders te regelen, dan hoef je enkel de functie aan te passen, en hoef je niet alle hard coded instanties in al je code aan te passen.

Aangenomen dat je de UTF-8 character encoding gebruikt, zou dit bijvoorbeeld een zinnige default zijn:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
function escape($in) { // of eventueel escapeHTML, om specifieker te zijn over de context
    return htmlspecialchars($in, ENT_QUOTES, 'UTF-8');
}

?>


En dit kun je dan toepassen op jouw code-snippet, waarbij het wellicht ook handig/verstandig is uit overweging van compatibiliteit om geen short tags te gebruiken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<td><input type="text" name="ZJaar" value="<?php echo escape($Std_jaar); ?>"></td>


Als je dit overal consequent toepast (escape output) dan ben je al een flinke stap in de goede richting op weg naar veiligere applicaties.

Het kan natuurlijk altijd zijn dat je de DATA niet wilt escapen, bijvoorbeeld omdat dit HTML is. In het formulier waarin je deze DATA dan beheert zul je nog altijd moeten escapen (want anders breekt dit mogelijk je formulier / het document) en op de plek waar je deze dan (als HTML) gebruikt doe je er verstandig aan om expliciet in code(commentaar) te documenteren dat het inderdaad niet de bedoeling is dat deze ge-escaped wordt. Maar dit is dan dus een gedocumenteerde uitzondering. Op die manier is er altijd duidelijkheid over wat nu precies de bedoeling is.
Gewijzigd op 07/07/2018 14:28:26 door Thomas van den Heuvel
 



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.