Ingevulde waarde onthouden in php en doorgeven naar andere pagina.
Je zou belangrijke sessies met unset kunnen verwijderen na de foreach, of nog mooier om een array aan te maken met 'verboden veldnamen' die niet moeten worden gebruikt om tot een sessie te verwerken.
Je kunt de waarde uitlezen bij de submit en weer toekennen bij de opbouw van een pagina.
??
Zelf, en ik denk de meeste mensen hier, laat ik action='' leeg.
Dan volgt de action default de eigen pagina en blijft op de eigen pagina.
En als je dan zorgt dat aan het begin van de pagina de $_POST in de $_SESSION wordt opgeslagen heb je altijd de meest recente veldwaarden beschikbaar.
En dus ook na de doorklik naar een andere pagina.
Zelf laat ik na elke veldwaardewijziging het formulier opnieuw laden om steeds de meeste recente waarden gegarandeerd in de sessie te hebben:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# bovenaan pagina
foreach ($_POST as $key => $val)
$_SESSION[$key] = $val;
# ergens in het document bijvoorbeeld
$waarde = $_SESSION[$naam];
print "<input type='text' name='$naam' id='$naam' value='$waarde' onchange='this.form.submit()'/>";
# en dan kan er overal op de pagina een doorlink zijn zonder dat de data inconsistent wordt.
print "<a href='volgendepagina' >Verder</a>";
foreach ($_POST as $key => $val)
$_SESSION[$key] = $val;
# ergens in het document bijvoorbeeld
$waarde = $_SESSION[$naam];
print "<input type='text' name='$naam' id='$naam' value='$waarde' onchange='this.form.submit()'/>";
# en dan kan er overal op de pagina een doorlink zijn zonder dat de data inconsistent wordt.
print "<a href='volgendepagina' >Verder</a>";
Toevoeging op 16/08/2018 12:36:14:
Rob: "(even via de browser een input veldje aan het formulier toevoegen met de juiste waarde)."
Dat klinkt inderdaad eng. Ik wil dat wel even experimenteren. Hoe doe ik dat in Firefox?
Gewijzigd op 16/08/2018 12:23:19 door Paul Ulje
Je data vind je dan terug via:
Je kunt het makkelijker oplossen door de data gewoon in een eigen array in de sessie op te slaan, weet je zeker dat er nooit dingen overschreven worden:Gewijzigd op 16/08/2018 13:55:13 door Rob Doemaarwat
Ik neem aan dat de sessie hier wordt gebruikt voor een soort van bevestigingspagina zodat de invuller terug kan lezen en kan bevestigen wat deze heeft ingevuld alvorens er iets verzonden / permanent opgeslagen wordt?
Het is natuurlijk wel de bedoeling dat er eerst enige bewerking op $_POST variabelen wordt uitgevoerd, voor ze in de $_SESSION worden opgenomen. Bijvoorbeeld een veld moet worden overgeslagen, uitgefilterd, gecontroleerd of gecorrigeerd. Dus je ontkomt niet aan de foreach.
Oke thx mensen, dit is wel even stof dat ik op mijn gemak door moet lezen, maar ik ben al super blij dat jullie mij zo goed helpen en geduldig blijven, heb al eens anders meegemaakt in het verleden (wel ander forum).
Tot die tijd moet de rauwe informatie dus ook als zodanig behandeld worden: het is "user data", dus deze zou je in principe niet blindelings moeten vertrouwen.
Ja, natuurlijk.
Maar qua dataconsistentie leef ik nog met het Pascal paradigma.
Ik zie het programma als een land.
Controleer bij de grens de inkomende ($_POST) goederen uitvoerig dan hoef je verder ($_SESSION) in het hele land geen controle meer uit te voeren.
Overigens negeer ik vrij makkelijk mijn eigen uitgangspunten.
Ik gebruik voor mijzelf een formulierobject met daarin rijkelijk $_POST en $_SESSION variabelen. :-)
Zie het fragment van een zelfbedruipende radiogroep. Altijd de actuele waarde rauw in de sessie.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# maakt een radiogroep, aOpschriften is enkelvoudige lijst van opschrifen
public function radioGroep($groepNaam, $aOpschriften, $verticaal = true) {
$this->setVar($groepNaam, ''); // optioneel aanmaken sessievar
if (isset($_POST[$groepNaam]))
$_SESSION[$groepNaam] = $_POST[$groepNaam];
foreach ($aOpschriften as $tekst) {
print "<input type='radio' name='$groepNaam' value='$tekst' onchange='this.form.submit()' ";
if ($_SESSION[$groepNaam] == $tekst)
print " checked='checked' ";
print "/>$tekst";
if ($verticaal)
print "<br/>";
}
return $_SESSION[$groepNaam];
}
# aanroep
$oF=new objFormulier($dbTabel);
$oF->radioGroep('keuze',$aOpties);
# actuele waarde in $_SESSION['keuze']
public function radioGroep($groepNaam, $aOpschriften, $verticaal = true) {
$this->setVar($groepNaam, ''); // optioneel aanmaken sessievar
if (isset($_POST[$groepNaam]))
$_SESSION[$groepNaam] = $_POST[$groepNaam];
foreach ($aOpschriften as $tekst) {
print "<input type='radio' name='$groepNaam' value='$tekst' onchange='this.form.submit()' ";
if ($_SESSION[$groepNaam] == $tekst)
print " checked='checked' ";
print "/>$tekst";
if ($verticaal)
print "<br/>";
}
return $_SESSION[$groepNaam];
}
# aanroep
$oF=new objFormulier($dbTabel);
$oF->radioGroep('keuze',$aOpties);
# actuele waarde in $_SESSION['keuze']
Gewijzigd op 17/08/2018 15:41:01 door Paul Ulje
En je vult daar een sessie terwijl je al met output bezig bent? Gebruik je toevallig output buffering?
Ah well, zoals ik al zei - zolang er een duidelijk scheidslijn is tussen ongecontroleerd en schoon/veilig/gecontroleerd maakt het niet zoveel uit allemaal.