variabele gebruiken in meerdere pagina's

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

17/04/2014 10:58:34
Quote Anchor link
Beste mensen,

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
 
PHP hulp

PHP hulp

24/04/2024 19:26:14
 
Michael -

Michael -

17/04/2014 11:03:51
Quote Anchor link
Ik denk dat het makkelijkste is om inderdaad de variabelen van pagina 1 mee te sturen als 'hidden' in pagina2, etc.
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 -
 

17/04/2014 11:12:27
Quote Anchor link
Dank je voor je snelle reactie. Ik ben niet thuis in javascript, dus zou het bij php willen houden. Klopt het dat ik als volgt de variabelen mee stuur?:

<input type="hidden" naam="hiddenvar" value="testver">

en oproep met:
$hiddenvar = $_POST['hiddenvar']
 
Michael -

Michael -

17/04/2014 12:13:16
Quote Anchor link
Jop,
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?
 

21/04/2014 20:34:36
Quote Anchor link
Beste Michael,

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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo (isset($_SESSION['POST']['name']) ? $_SESSION['POST']['name'] : ''); ?>


Jop
Gewijzigd op 21/04/2014 20:35:35 door
 
Frank Nietbelangrijk

Frank Nietbelangrijk

21/04/2014 21:48:38
Quote Anchor link
sessions blijven bestaan zolang je de browser niet afsluit en ze niet verlopen zijn.

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
if(isset($_SESSION['POST']['name']))
    echo $_SESSION['POST']['name'];
else
    echo '';
?>
Gewijzigd op 21/04/2014 21:49:41 door Frank Nietbelangrijk
 
Michael -

Michael -

22/04/2014 08:13:45
Quote Anchor link
Door een action toe te voegen aan de 'form' en op de volgende pagina (form2) te beginnen met session_start kun je alle sessies die op je website zijn gemaakt weer opvragen.

pagina 1
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
session_start();

$_SESSION['groet'] = 'Hallo Wereld';
?>


pagina 2
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
session_start();

echo $_SESSION['groet']; // Hallo Wereld
?>
 

22/04/2014 10:31:20
Quote Anchor link
Duidelijk antwoord Frank en Michael! Dank.

nog een vraagje: is een Post automatisch een SESSION variabele of moet ik die toekennen?
Gewijzigd op 22/04/2014 10:31:42 door
 
Michael -

Michael -

22/04/2014 11:07:31
Quote Anchor link
Post is geen session.
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)
PHP script in nieuw venster Selecteer het PHP script
1
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;
    }
 

22/04/2014 11:15:38
Quote Anchor link
Beste Michael,

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?
 
Michael -

Michael -

22/04/2014 11:22:11
Quote Anchor link
Alles dat binnenkomt via POST, GET, SERVER, SESSION (en misschien nog wat vergeten) kan door de gebruiker worden aangepast.
Als jij een website hebt met
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
<input type="radio" name="sex" value="male" />
<input type="radio" name="sex" value="female" />


En jij slaat dit op
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
"INSERT INTO SET sex = " . $_POST['sex'];


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.
 

22/04/2014 11:29:20
Quote Anchor link
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.
 
Ozzie PHP

Ozzie PHP

22/04/2014 11:35:16
Quote Anchor link
Als stelregel kun je aanhouden dat alles wat "van buitenaf" komt, mogelijk gevaarlijk is. Dit zul je dus altijd moeten controleren.
 
Michael -

Michael -

22/04/2014 11:38:41
Quote Anchor link
Het geldt inderdaad voor beide. Het is niet moeilijk om een POST variabele te veranderen.
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.
 

22/04/2014 11:41:24
Quote Anchor link
Dank je.
 



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.