variabele gebruiken in meerdere pagina's
Ik het volgende probleem en misschien dat er een eenvoudige oplossing voor is:
op pagina 1 wordt er middels een formulier een $_POST variabele verstuurd naar pagina 2.
op pagina 2 kan er met een formulier weer gegevens worden aangevuld en via $_POST.
op pagina 3 wordt gecheckt of er gegevens van pagina 2 wel correct zijn ingevuld en zo niet, dan komt er een "submit" button om terug te gaan naar panina 2.
Maar als ik dan op pagina 2 ben, dan ben ik de gegevens kwijt die vanaf pagina 1 kwamen.
Kan ik ook andere gegevens met method="post" doorzetten, ook als ze niet in een formulier zijn ingevuld? Of kan ik verborgen tekstvelden maken om die gegevens steeds mee te sturen?
Alvast bedankt voor jullie gewaardeerde antwoord.
Jop
Nog makkelijker zou zijn om je formulier in javascript te maken. Dan maak je meerdere formulieren op 1 pagina. En met javascript bepaal je welke zichtbaar is. Klik op knop 1. Formulier 1 'hide' formulier 2 'show'. Druk je op terug, formulier 2 'hide', formulier 1 'show'. Voordeel hiervan is dat alles blijft staan omdat je niets direct submit.
Edit:
voorbeelden verwijdert
Gewijzigd op 17/04/2014 11:21:31 door Michael -
<input type="hidden" naam="hiddenvar" value="testver">
en oproep met:
$hiddenvar = $_POST['hiddenvar']
Als je geen javascript wilt gebruiken, zou je het beste de variabelen in een session kunnen opslaan.
Anders zou je de variabelen steeds weer moeten controleren en meegeven terwijl session ze gewoon kan onthouden.
Voorbeeldje
Broncode
Kun je hier verder mee?
Er was even Pasen tussendoor, dus een wat late reactie.
2 vragen naar aanleiding van je voorbeeld van session variabelen:
werkt het ook als je naar een andere pagina verwijst? vanuit form.php vrerwijs ik : <form action="form2.php" method="post">
wat betekent het middelste ? in deze constructie:
Jop
Wanneer ze verlopen kan per server verschillend zijn. Maar als een gebruiker een nieuwe pagina opvraagt dan begint de tijd weer opnieuw te lopen.
Dus ja het werkt ook als je naar een andere pagina verwijst.
Michael gebruikt een korte notatie voor een IF. Het onderstaande is precies hetzelfde:
Code (php)
Gewijzigd op 21/04/2014 21:49:41 door Frank Nietbelangrijk
pagina 1
pagina 2
nog een vraagje: is een Post automatisch een SESSION variabele of moet ik die toekennen?
Zoals je in mijn voorbeeld ziet die ik eerder gaf sla ik de post variabelen op in een session. Dus als volgt:
$_SESSION['naam'] = $_POST['naam'];
Natuurlijk moet je er nog wel voor zorgen dat de ingevoerde data veilig is. Een gebruiker kan immers alles invullen, dus ook kwaadaardige code. Dit doe ik met htmlentities().
$_SESSION['naam'] = htmlentities($_POST['naam']);
Als je het opslaat in een database gebruik je hiervoor *_real_escape_string (mysql) of prepared_statements (pdo).
Om $_SESSION te kunnen gebruiken (dus zowel opslaan als uitlezen) dien je altijd de pagina te beginnen met session_start()
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/*
* Sanitize post vars
*/
array_walk_recursive($_POST, function (&$val) {
$val = htmlentities(trim($val), ENT_QUOTES);
});
/*
* Sanitize post keys
* Save post vars in $_SESSION['POST']
*/
foreach($_POST AS $key=>$val) {
$key = htmlentities($key, ENT_QUOTES, "UTF-8");
$_SESSION['POST'][$key] = $val;
}
* Sanitize post vars
*/
array_walk_recursive($_POST, function (&$val) {
$val = htmlentities(trim($val), ENT_QUOTES);
});
/*
* Sanitize post keys
* Save post vars in $_SESSION['POST']
*/
foreach($_POST AS $key=>$val) {
$key = htmlentities($key, ENT_QUOTES, "UTF-8");
$_SESSION['POST'][$key] = $val;
}
Dank je. Ik begin de structuur door te krijgen denk ik. Had al eerder een keer iets met SESSION geprobeerd, maar dat liep op niets uit. Maar nu snap ik ook waarom.
Voor de beveiliging ben ik niet zo bang, omdat het alleen voor eigen gebruik is...
maar voor de toekomst: kan een hacker alleen knoeien met variabelen die via een tekstveld worden ingevuld, of ook met variabelen die via een type="radio" worden verzonden?
Als jij een website hebt met
Code (php)
1
2
2
<input type="radio" name="sex" value="male" />
<input type="radio" name="sex" value="female" />
<input type="radio" name="sex" value="female" />
En jij slaat dit op
Dan is dit kwetsbaar voor mysql injection.
Ik kan $_POST['sex'] namelijk heel makkelijk aanpassen naar 'alien' maar ook naar "' DROP TABLE".
In het eerste geval heb je verkeerde data in je database, in het 2e geval is tabel verwijdert.
Vertrouw nooit gebruikers input als POST en GET en controleer alles of het daadwerkelijk is wat je verwacht.
Ok, goed om te weten. Ik dacht dat het vooral voor GET gold, omdat dat in het url zichtbaar is. Maar een hacker kan dus ook een POST veranderen begrijp ik.
Als stelregel kun je aanhouden dat alles wat "van buitenaf" komt, mogelijk gevaarlijk is. Dit zul je dus altijd moeten controleren.
Een mogelijk is het formulier op te slaan op je pc, met als 'action' jouw website.
Of door de variabele aan te passen in de 'Developer tools' in bijvoorbeeld Chrome en Firefox (F12)
Zie je de tekst onder jouw bericht op deze afbeelding?
Zo kun je dus ook eenvoudig de POST variabelen aanpassen.
Dank je.