Ga naar inhoud


Hoe option keuze bewaren als na een vergeten required veld pagina reload.


Gast Kimble

Aanbevolen berichten

Ik heb een php script waarin mensen hun naam, adres, etc etc in tekstvelden moeten schrijven. Deze velden zijn "required" Als ze vergeten 1 van de velden in te vullen dan reload de pagina zich met de opmerking dat ze nog een veld moeten invullen. Als de pagina reload dan blijven de reeds ingevulde velden netjes staan zodat ze alleen nog maar het veld hoeven in te vullen die ze vergeten zijn.

 

Er zit er in het formulier ook enkele keuze opties. De mensen kunnen bijvoorbeeld een land kiezen door deze te selecteren. Echter als ze een veld vergeten zijn en het formulier reload zich met de opmerking dat ze een veld vergeten zijn dan is het gekozen land in de option keuze gewist. Hoe kan ik het formulier zo maken dat de option keuzes ook bewaard blijven net als de ingevulde velden als de pagina reload na een vergeten tekstveld invoer?

Link naar reactie
Delen op andere sites


De mooiste oplossing is voor iedere gebruiker een session aanmaken en bij de evaluatie van je formulier de session-vars vullen met de formulier-vars.

 

De session-vars blijven bewaard zolang de gebruiker op je website blijft. Dus ook als hij van het formulier weg gaat en even wat andere pagina's bezoekt.

 

Zodra de gebruiker het formulier bezoekt vul je de "value" attributen van de form-vars met de gegevens uit de session-vars.

Link naar reactie
Delen op andere sites

Om je een idee te geven hoe ik dat heb opgelost ooit...

Code:
$sats = array ( "", "43,0 W PAS 3R", "37,5 W Telstar 11", "34,5 W Intelsat 903", "31,5 W Intelsat 801", "30,0 W Hispasat 1B",                  "27,5 W Intelsat 605", "22,0 W NSS 7", "18,0 W Intelsat 901", "15,0 W Telstar 12", "12,5 W Atlantic Bird 1",                  "11,0 W Express 3A", "08,0 W Telecom 2D", "07,0 W Nilesat 101", "05,0 W Telecom 2C", "04,0 W Amos 1",                  "01,0 W Thor 2", "03,0 E Telecom 2A", "05,0 E Astra 1A", "07,0 E Eutelsat W3", "10,0 E Eutelsat W1",                  "13.0 E Hot Bird", "16,0 E Eutelsat W2", "19.2 E Astra", "21,5 E Eutelsat II f3", "23,5 E Astra 3A",                  "26,0 E Arabsat 2C", "28,2 E Eurobird 1", "31,3 E Turksat 1B", "36,0 E Eutelsat Sesat", "39,0 E Hellas Sat 2",                  "40,0 E Express A1R", "42,0 E Turksat 1C", "45,0 E Europe*Star 1", "60,0 E Intelsat 904",                  "64,0 E Intelsat 906", "66,0 E Intelsat 704", "68,5 E PAS 7" );

En dan verder in de code:

Code:
  print("<select name=\"satellite\" class=\"select\">\n");  for ($i=0; $i<count($sats); $i++){    if ($satellite == $sats[$i]){      print("  <option value=\"$sats[$i]\" selected>$sats[$i]</option>\n");    } else {      print("  <option value=\"$sats[$i]\">$sats[$i]</option>\n");    }  }  print("</select>\n");

 

$satellite bevat uiteraard de geselecteerde satelliet. (Dus het aangegeven land uit het form in jou geval....)

 

Nu alleen nog even verbouwen voor je landen in plaats van satellieten...

 

Big fellow

“Success is not final, failure is not fatal: it is the courage to continue that counts.” ~ Winston Churchill

Link naar reactie
Delen op andere sites

Voor het 'wandelen' door een array is de foreach functie meer geschikt. Dan loop je ook niet de kans om ooit in een oneindige loop te geraken. Dus om dat op jouw voorbeeld los te laten zou dit IMHO beter zijn:

Code:
   print("<select name=\"satellite\" class=\"select\">\n");  foreach ($sats as $key => $sat){    if ($satellite == $sats[$key]){      print("  <option value=\"$sats[$key]\" selected>$sats[$key]</option>\n");    } else {      print("  <option value=\"$sats[$key]\">$sats[$key]</option>\n");    }  }  print("</select>\n"); 

 

Of wat korter aangezien je de array-indexen niet echt nodig hebt in dit geval:

Code:
   print("<select name=\"satellite\" class=\"select\">\n");  foreach ($sats as $val){    if ($satellite == $val){      print("  <option value=\"$val\" selected>$val</option>\n");    } else {      print("  <option value=\"$val\">$val</option>\n");    }  }  print("</select>\n"); 

 

Maar deze code is niet bestand tegen de situatie waarin er meerdere <options> geselecteerd mogen worden.

Dus als je een <select> gebruikt waar meerdere <options> mogen worden geselecteerd, zul je ze apart moeten bijhouden, of je zou ook van $satellite een array moeten maken. Dan krijg je dus zoiets:

Code:
   print("<select name=\"satellite\" class=\"select\">\n");  foreach ($sats as $val){    if (in_array($val, $satellite){      print("  <option value=\"$val\" selected>$val</option>\n");    } else {      print("  <option value=\"$val\">$val</option>\n");    }  }  print("</select>\n"); 
Link naar reactie
Delen op andere sites

Duwgati,

 

Inderdaad dat is een mooiere oplossing. Echter dit is een stukkie code van een jaar of 4 oud... Nu zou ik zelf ook de foreach functie gebruiken.

Het ging meer om een voorbeeld te geven aan AlanS hoe zoiets opgelost kon worden.. Nu heeft hij een mooie oplossing gekregen! <img src="/forums/images/graemlins/smile.gif" alt="" />

 

Big fellow

“Success is not final, failure is not fatal: it is the courage to continue that counts.” ~ Winston Churchill

Link naar reactie
Delen op andere sites

Als je niet met het resultaat van het formulier een moeilijke query-test oid moet doen, dan zou ik de controle in een - eventueel met PHP gegenereerd - Javascript doen. Hoef je de pagina helemaal niet meer opnieuw te laden.

Link naar reactie
Delen op andere sites

Een simpele oplossing is om de php pagina de http-post naar zichzelf te laten doen....

Als er wat parameters ontbreken toon je gewoon weer de oude pagina nadat je de WEL meegegeven parameters hebt verwerkt. Niks geen sessie etc. bij nodig.

 

zoiets als dit:

$age = isset($_POST['age']) ? $_POST['age'] : '';

$title = isset($_POST['title']) ? $_POST['title'] : '';

 

//en dan checken of alles geset is:

if($age == '' || $title ==''){

//toon pagina en gebruik $age en $title als standaardwaarden.

}else{

//verwerk $age en $title

}

Link naar reactie
Delen op andere sites

Maak een account aan of log in om te reageren

Je moet een lid zijn om een reactie te kunnen achterlaten

Account aanmaken

Registreer voor een nieuwe account in onze community. Het is erg gemakkelijk!

Registreer een nieuwe account

Inloggen

Heb je reeds een account? Log hier in.

Nu inloggen
  • Wie is er online   0 leden

    • Er zijn geen geregistreerde gebruikers deze pagina aan het bekijken
×
×
  • Nieuwe aanmaken...