Hallo allemaal,

Ik heb diverse tekst velden in een form staan, die na invullen onthouden moeten worden om door een andere pagina even worden uitgelezen om het af te drukken.

Nu weet ik niet of ik dat goed heb gedaan, aangezien die 2de pagina raar doet.

Ik had gelezen dat je dit moest doen met $session, dus heb ik dit gedaan.:

if (isset($_POST['submit'])){

$_SESSION['varname'] = $prodnr;

op mijn andere pagina roep ik die dan terug met

$prodnr = $_SESSION['varname'];

Nu is het zo vul ik mijn invul vakjes 1 en klik op submit zodat hij mijn andere pagina afdrukt met de ingevulde gegevens laat hij niets zien.
Sluit ik die pagina en klik ik weer op afdrukken , dan komt pas de waarden van mij erin.
Hij loopt zeg maar, altijd steeds achter, ik hoop dat ik dit een beetje goed uitleg voor jullie.

Gebruik ik nu iets fout waardoor dit gebeurd?
@Ariën:
Ik zal de boel dezelfde naam geven zodat het duidelijker word.
$_POST bevat alleen informatie als je een POST request naar de server stuurt, dus wanneer je een formulier submit. Daarna (elke daaropvolgende request) is $_POST weer leeg. Dat is ook -mede- de reden dat het verwerken van de formulier-submit in een aparte stap wordt opgenomen, waarna je direct weer wordt doorgestuurd. Dit wordt ook wel het post/redirect/get patroon genoemd.

En dan zijn er nog allerlei randgevalletjes waar waarden mogelijk niet bestaan zoals @Paul al aangaf, niet aangevinkte checkboxen (en radiobuttons? weet ik niet zeker eigenlijk maar klinkt logisch) komen na formulierverzending in het geheel niet voor in $_POST!

Om het overzicht te bewaren is het mogelijk een idee om het een en ander op te delen in verschillende acties (of zelfs aparte bestanden), bijvoorbeeld:
- een apart(e actie/) bestand voor het formulier
- een apart(e actie/) bestand voor de validatie en verwerking
op grond van het resultaat van de validatie kun je een gebruiker terugsturen naar het formulier met foutmeldingen, of het formulier verwerking in de vorm van een mailtje, entry in de database et cetera, waarna je wordt doorgestuurd naar een bedankpagina ofzo.

Elk bestand waarin je sessies wenst te gebruiken dien je te starten/te voorzien van session_start(). Vervolgens kan het ook geen kwaad om eens een en ander stap voor stap te debuggen, zodat je goed kunt volgen wat er zoals in $_SESSION en $_POST zit. Ik denk dat als je alles stap voor stap aanpakt, en je je op elk moment (uitsluitend) op de volgende stap richt, je uiteindelijk makkelijk bij je eindbestemming en -resultaat kunt geraken. Mocht je daar vragen over hebben, daar is dit forum voor.

Maar allereerst, een kleine organisatie van de deelproblemen en het opdelen in stukken kan denk ik al veel bijdragen aan het overzicht. We kunnen dan ook veel beter inzoomen op de deelproblemen en het oplossen daarvan.
Oke , snap er nog helaas niet veel van wat je uitlegt @Thomas ondanks je super goede bedoelingen.

Ik heb dit dus in mijn tabel.:

  <td><input type="text" name="prodnr"  STYLE="width: 10em" value="<?php echo $prodnr;?>"><span class="error">* <?php echo $nameErr;?></span></td> 


in mijn submit heb ik dan (namen aangepast).:

if (isset($_POST['submit'])){
     $_SESSION['prodnr'] = $prodnr;
    $_SESSION['tijd'] = $tijd;
    $_SESSION['datum'] = $datum;
    $_SESSION['prod'] = $prod;


In diezelfde pagina heb ik boven aanstaan.:

session_start(); 


Wat moet nu dan want ik kom even nu niet uit al jullie goede bedoelingen.

BTW voor ik het vergeet.
Op het laatste van de pagina heb ik staan.:

<script>$('#k1').click(function(){
    $("#k2").click();
})</script>


Om een extra button klik te krijgen naar de pagina waar dus alles ingevuld zou moeten worden om dan af te drukken.
Je hoeft niet zelf je $_SESSION klaar te stomen. Dat doet die foreach van Paultje wel.
je kan die $_SESSION['woonplaats'] gewoon in je formulier aanroepen. Controleer wel netjes met isset() of deze bestaat.
@Ariën:

Dus die sessions wat ik heb weghalen en dat van @Paultje overnem?

if (isset($_POST['submit'])){
   foreach ($_POST as $key => $val)
    $_SESSION[$key] = $val;


of moet ik daar nog iets in aanpassen?

Ondertussen heb ik wel een workaround gevonden en die doet wat ik wil, maar niet wat ik van jullie wil leren uiteraard.

Door die 2de pagina in het begin met.:
[/code]

window.onload = function() {
if(!window.location.hash) {
window.location = window.location + '#loaded';
window.location.reload();
}
}
[/code]

Eenmaal te laten refreshen krijg ik wel alles goed te zien.
Maar nogmaals ik wil snappen wat jullie mij willen leren.
Jep, die code van paultje is prima.
Sessions worden dan automatisch gemaakt.
Pascal,

Wat je wilt is alle $_POST variabelen van het formulier in de $_SESSION bewaren.

Met de foreachloop wordt voor elke $_POST variabele een gelijknamige sessievar aangemaakt met de doorgegeven waarde. Bestaat die sessievar al, dan wordt hij gewoon 'overschreven'.
Je hebt dan in één keer 'alles' bewaard en kan de sessievars verder overal opreoepen en gebruiken.
Dus:

if (isset($_POST['submit'])){
   foreach ($_POST as $key => $val)
    $_SESSION[$key] = $val; 
# overal...
print $_SESSION['artikelnr'];
print $_SESSION['userid'];
# etc...
Oke @Paultje , dit lijk ik wel te snappen, zal het eens testen en laat het daarna weten of het mij gelukt is.
Ik vind 'm wel een beetje "eng". Stel dat je in je sessie ook opslaat of iemand wel/niet ingelogd is, of wat z'n rechten zijn. Met deze constructie kun je die als "gebruiker" gewoon overschrijven (even via de browser een input veldje aan het formulier toevoegen met de juiste waarde).
Inderdaad @Paultje alle VARS worden overgenomen, scheelt een hoop werk zo :)

Alleen die refresh op die 2de pagina heb ik toch nog nodig anders loopt hij achter.
Zou kunnen zijn omdat ik de form op de eerste pagina begin met.:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" onsubmit="return checkForm(this);"> 


als ik namelijk iets anders zou gebruiken verdwijnt mijn 1ste pagina en die moet wel blijven staan.

Reageren