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
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[/edit]
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']
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?
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:
<?php echo (isset($_SESSION['POST']['name']) ? $_SESSION['POST']['name'] : ''); ?>

Jop
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:
<?php
if(isset($_SESSION['POST']['name']))
echo $_SESSION['POST']['name'];
else
echo '';
?>
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
<?php
session_start();

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

pagina 2
<?php
session_start();

echo $_SESSION['groet']; // Hallo Wereld
?>
Duidelijk antwoord Frank en Michael! Dank.

nog een vraagje: is een Post automatisch een SESSION variabele of moet ik die toekennen?
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()


    /* 
     * 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; 
    } 
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?
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

<input type="radio" name="sex" value="male" />
<input type="radio" name="sex" value="female" />


En jij slaat dit op

"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.

Reageren