[php - html] $_SESSION <-> reset knop bug?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Kapoen
  • Registratie: Mei 2002
  • Laatst online: 10:51
Voor het invoegen van nieuws items op mijn website gebruik ik een formulier
dat elk element valideert. Is de inhoud van een veld niet naar wens ingevuld
dan zal er geen record in de bijhorende MySQL databank geduwt worden.

Wat er wel gebeurt:
1) elke variabele van het formulier wordt in de $_SESSION array geduwt.
2) via een header(Location: ...) instructie wordt er teruggegaan naar het formulier.
3) met volgende code vul ik dan elk veldje terug in met de oude inhoud (omdat alles opnieuw typen toch wel vrij vervelend is denk ik ;) )

het invullen gebeurt met volgende code (deze is quasi identiek voor elk veld dus paste ik het maar 1x):
PHP:
1
2
3
4
5
6
7
8
9
// inschrijvingsveld
$c = "";

if(isset($_SESSION['contact'])) {
   $c = $_SESSION['contact'];
   session_unregister('contact');
}  

print("Contact adres: <INPUT type=\"text\" name=\"contact\" size=\"39\" value=\"" . $c "\">");


Dit werkt prima. Het rare is echter dat als ik op de reset knop duw van dit formuliertje, de waarden opnieuw uit de sessie worden gehaald (althans dat denk ik toch) en dus weer opnieuw ingevuld in de verschillende velden.
Nochtans doe ik meteen na het inlezen van de $_SESSION array een session_unregister() instructie.

De reset knop wordt met volgende code aangemaakt:
PHP:
1
print(<input type=\"reset\" class=\"button\" value=\"wissen\">);


Een work-around voor het probleem is het volgende:
- ik maak van de reset knop een submit knopje
- in de verwerkende php file kijk ik eerst op welke knop er geduwt om
vervolgens al dan niet met een gewone header(Location:...) instructie meteen
terug te keren zonder in $_SESSION te schrijven.

Deze oplossing is bruikbaar ware het niet dat ik met een javascriptje
verplicht alle velden van het formulier in te vullen. Hierdoor moet
je dus elk veld invullen voor je kan resetten. Dat is gewoon niet netjes
(en dit systeem is uiteindelijk niet voor mij bedoeld maar voor het bedrijf
waar ik stage loop).

Zie ik hier iets over het hoofd? Overigens is heel dit verhaal enkel waar als
er een foutmelding moet getoont worden aan de gebruiker,
voor de rest werkt het formulier (en reset knop) prima in normale omstandigheden.

Clowns to the left of me, Jokers to the right


Acties:
  • 0 Henk 'm!

Verwijderd

De reset knop hersteld de waarde die in de box'jes stonden na het laden.
Hij wist de velden dus *niet*.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

De reset knop brengt de waarde van de velden terug naar de staat die het had toen de pagina werd ingeladen. In dit geval is dat dus de vulling die uit de session gehaald is. Had je soms verwacht dat de browser slim genoeg was om mbv de reset knop de waardes van de vorige pagina terug te halen?

Je kunt in javascript de waardes opslaan die je graag wilt hebben waneer er wordt gereset en dan vervolgens een knop een javascript functie aan laten roepen die alle formulier velden terugzet op de door jou gedefinieerde reset waarde. Maar daarvoor moet je in /13 (aka W&G zijn) Geef maar een gil waneer ik 'm over de schutting moet gooien.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Kapoen schreef op 14 April 2003 @ 10:49: Het rare is echter dat als ik op de reset knop duw van dit formuliertje, de waarden opnieuw uit de sessie worden gehaald (althans dat denk ik toch) en dus weer opnieuw ingevuld in de verschillende velden.
Nochtans doe ik meteen na het inlezen van de $_SESSION array een session_unregister() instructie.

De reset knop wordt met volgende code aangemaakt:
PHP:
1
print(<input type=\"reset\" class=\"button\" value=\"wissen\">);
Nee, dat heeft niets met php of sessies te maken. Da's gewoon een html functie die er voor zorgt dat alle originele waardes weer terugkomen in het formulier. dat doet de browser voor je

wat wil je nu eigenlijk precies met de resetknop bereiken? Als je wil dat het formulier leeggemaakt wordt moet je dat gewoon met een javascript functietje doen denk ik. maar daarvoor met je bij de buren in /13 zijn

Acties:
  • 0 Henk 'm!

  • Kapoen
  • Registratie: Mei 2002
  • Laatst online: 10:51
Het maken van dat javascriptje zal wel lukken :)

Blijkbaar had ik een andere interpretatie van de reset functie :)

Voor mijn part mag deze op slot.

*feels dumb* |:(

[ Voor 3% gewijzigd door Kapoen op 14-04-2003 11:05 ]

Clowns to the left of me, Jokers to the right


Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Je kunt natuurlijk een javascript scriptje maken. Met daarin iets van window.form.contact.value = "";
Nu wis je dus de waarde in het vak.

p.s. Waarom gebruik je sessievariabelen? Het kan toch ook gewoon met post of get?

[ Voor 7% gewijzigd door Noork op 14-04-2003 11:08 ]


Acties:
  • 0 Henk 'm!

  • Kapoen
  • Registratie: Mei 2002
  • Laatst online: 10:51
Noork schreef op 14 April 2003 @ 11:08:
Je kunt natuurlijk een javascript scriptje maken. Met daarin iets van window.form.contact.value = "";
Nu wis je dus de waarde in het vak.

p.s. Waarom gebruik je sessievariabelen? Het kan toch ook gewoon met post of get?
Ja dat javascriptje is inmiddels zo opgesteld :)

waarom ik sessie vars gebruik: gewoon voor de leesbaarheid van de code in feite
(ja dat klinkt raar, maar als je code reeds volstaat met $_POST arrays dan weet je niet meer hoe of wat er bepaalde variabelen binnen komen :) )

[ Voor 15% gewijzigd door Kapoen op 14-04-2003 11:13 ]

Clowns to the left of me, Jokers to the right


Acties:
  • 0 Henk 'm!

  • Rotjeknor
  • Registratie: April 2001
  • Laatst online: 01-04-2023
Sessions op php.net
With $_SESSION, there is no need to use the session_register(), session_unregister(), session_is_registered() functions.
Oftewel je session_unregister kan je beter ff ombouwen.

Wat me ook opvalt is:
PHP:
1
print("Contact adres: <INPUT type=\"text\" name=\"contact\" size=\"39\" value=\"" . $c "\">");

Waarom concenate je die $c? Als je " gebruikt, kan je een variabele ertussen pleuren, gebruik anders een ' .
Dus:
PHP:
1
print("Contact adres: <INPUT type=\"text\" name=\"contact\" size=\"39\" value=\"$c\">");

Of:
PHP:
1
print('Contact adres: <INPUT type="text" name="contact" size="39" value="' . $c . '">');

Ook Knor is aangestoken met het ligfietsvirus!


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Rotjeknor schreef op 14 April 2003 @ 11:43:

Wat me ook opvalt is:
PHP:
1
print("Contact adres: <INPUT type=\"text\" name=\"contact\" size=\"39\" value=\"" . $c ."\">");

Waarom concenate je die $c?
Omdat dat eigenlijk veel netter en overzichtelijker is.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Kapoen
  • Registratie: Mei 2002
  • Laatst online: 10:51
inderdaad, probeer je variabelen maar eens terug te vinden als alles in 1 lange string wordt opgenomen.

ik meen hier ooit op GoT eens een lijst gezien te hebben (een soort
van 10 geboden bij het PHP coden) waarop stond vermeld dat
het beter is om scallars niet op te nemen tussen 2 ".

[ Voor 21% gewijzigd door Kapoen op 14-04-2003 12:23 ]

Clowns to the left of me, Jokers to the right


Acties:
  • 0 Henk 'm!

  • Rotjeknor
  • Registratie: April 2001
  • Laatst online: 01-04-2023
Janoz schreef op 14 April 2003 @ 12:00:
[...]

Omdat dat eigenlijk veel netter en overzichtelijker is.
Snap ik, maar waar het me om ging, is dat alles wat je binnen " " zet, 'doorzocht' wordt door php, of er geen variabelen in staan. Wat je dus beter kan doen is single quotes gebruiken, met een concatenate van je variabele.

Ook Knor is aangestoken met het ligfietsvirus!


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Met single-quotes kun je weer geen unprintable characters maken dmv escape-codes (zoals \r, \n, \t, etc.)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1