Ingevulde waarde onthouden in php en doorgeven naar andere pagina.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2

- Ariën  -
Beheerder

- Ariën -

15/08/2018 21:31:03
Quote Anchor link
@Rob: Daar heb je gelijk ik, maar een recht hoort niet in een sessie. Stel je voor dat die wordt ingetrokken. Dan moet eerst die sessie verlopen voordat diegene zijn recht kwijt is. Maar ik snap je ernst.
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.
 
PHP hulp

PHP hulp

29/03/2024 14:33:18
 
Pipo Clown

Pipo Clown

16/08/2018 09:39:38
Quote Anchor link
Data overbrengen van pagina naar pagina kan vrij simpel met hidden input velden.
Je kunt de waarde uitlezen bij de submit en weer toekennen bij de opbouw van een pagina.
 
Paul Ulje

Paul Ulje

16/08/2018 12:08:12
Quote Anchor link
"Alleen die refresh op die 2de pagina heb ik toch nog nodig anders loopt hij achter."
??

Zelf, en ik denk de meeste mensen hier, laat ik action='' leeg.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<form method='post' action='' target='_top'>

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)
PHP script in nieuw venster Selecteer het PHP script
1
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>";


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
 
Rob Doemaarwat

Rob Doemaarwat

16/08/2018 13:54:07
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$_SESSION['data'] = $_POST;
Je data vind je dan terug via:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$x = $_SESSION['data']['varname'];
Gewijzigd op 16/08/2018 13:55:13 door Rob Doemaarwat
 
Thomas van den Heuvel

Thomas van den Heuvel

16/08/2018 15:40:30
Quote Anchor link
Een sessie is in ieder geval niet bedoeld om informatie permanent op te slaan.

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?
 
Paul Ulje

Paul Ulje

16/08/2018 16:42:48
Quote Anchor link
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.
 
Pascal Schuffelers

Pascal Schuffelers

16/08/2018 23:03:10
Quote Anchor link
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).
 
Thomas van den Heuvel

Thomas van den Heuvel

17/08/2018 13:50:12
Quote Anchor link
@Paul, het mag best "rauw" de sessie in (waarbij je deze het beste in een apart straatje (subarray) kunt parkeren, zodat je deze kunt onderscheiden van mogelijke andere informatie die reeds in de sessie aanwezig is, zoals @Rob aangeeft), zolang er maar een voorgeschreven moment is dat alles wordt gevalideerd voordat het definitief wordt verwerkt.

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.
 
Paul Ulje

Paul Ulje

17/08/2018 15:14:51
Quote Anchor link
@Thomas,

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)
PHP script in nieuw venster Selecteer het PHP script
1
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']
Gewijzigd op 17/08/2018 15:41:01 door Paul Ulje
 
Thomas van den Heuvel

Thomas van den Heuvel

17/08/2018 16:16:59
Quote Anchor link
Dat is toch een beetje escape-on-input ergens? Wat nu als formulierinvoer fout is en je deze terug wilt plaatsen in het formulier, lijkt mij het beste dat deze dan ongewijzigd is?

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.
 

Pagina: « vorige 1 2



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.