[JS/PHP] pagina cachen bij onSubmit

Pagina: 1
Acties:

  • Acolyte
  • Registratie: Oktober 2002
  • Laatst online: 28-08-2024
Helahola, zijn we weer.
Volgend probleem is vooral complex door het aantal 'maaren' wat er aan vast zit.
Concreet is mijn vraag:
"Hoe kan ik, zodra iemand klikt op Submit van een form, ervoor zorgen dat de inhoud van dit form, inclusief de html die daarin is geplaatst, wordt gecached in een sessievariable d.m.v. javascript of php?"

Ik wil dus eigenlijk (een deel van) een pagina letterlijk opslaan zoals die op moment van submitten is. Dus niet zoals ie is zodra de pagina geladen is, want dan staat er al allemaal data in het formulier. Ik wil de wijzigingen bewaren die de user toepast op het formulier om, als het formulier de validatie niet doorkomt, het formulier weer tevoorschijn te tonen met de door de user ingevoerde gegevens.

Nou zal je zeggen, makkelijk, doe een paar echo's van POST variabelen in de value's van velden en je hebt de informatie weer terug. Het is een beetje te ingewikkeld om het nu helemaal uit de doeken te doen, maar laten we stellen dat de structuur van mijn postvariabelen veel te complex is om weer terug erin te zetten.

Ik zoek dus naar een alternatief, en caching leek mij de meest voor de hand liggende. Wie kan mij hierin helpen?

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
een optie is om een hidden variable te maken en deze op de onSubmit te vullen met document.body.innerHTML.....
als dat is wat je bedoelt tenminste...

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 11:17

Janoz

Moderator Devschuur®

!litemod

Ten eerste is de complete pagina meezenden nogal zwaar en het lijkt me een beetje overdreven. Persoonlijk zou ik me richten op het minder complex maken van he postvariabelen zodat het niet meer een probleem is. Ik kan me lastig voorstelen dat het moeilijker wordt dan het ombouwen van de opgeslagen html zodat daarin de eventuele foutmeldingen kunnen worden verwerkt.

Caching is helemaal niet voor de hand liggend eigenlijk. Hierbij onthoud je gegevens die van een trage bron komen zodat je deze niet nogmaals bij de trage bron hoeft op te vragen. Dat is hier in het geheel niet van toepassing. Waarschijnlijk bedoel je dat ook niet, maar gebruik je de term gewoon verkeerd ;).

[ Voor 13% gewijzigd door Janoz op 04-04-2007 13:25 ]

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


  • Cavorka
  • Registratie: April 2003
  • Laatst online: 27-03-2018

Cavorka

Internet Entrepreneur

Acolyte schreef op woensdag 04 april 2007 @ 12:25:
... maar laten we stellen dat de structuur van mijn postvariabelen veel te complex is om weer terug erin te zetten. ...
Hm... hier twijfel ik aan.

Is het niet zo dat het niet een heel groot form is, waar je geen zin hebt om handmatig alles te checken en weer alles in te vullen / option boxess te selecten? NOFI, natuurlijk, maar volgens mij is de simpele maar 'domme' manier wel de juist in dit geval.

Want je form is ook een keer gemaakt, dynamisch of niet, maar hoe zou je ook alleen met originele HTML het form weer in willen vullen?

Heb je een voorbeeld van hoe complex het is? :) Of een form online?

[ Voor 5% gewijzigd door Cavorka op 04-04-2007 14:00 ]

the-blueprints.com - The largest free blueprint collection on the internet: 50000+ drawings.


  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
Janoz schreef op woensdag 04 april 2007 @ 13:24:
Ten eerste is de complete pagina meezenden nogal zwaar en het lijkt me een beetje overdreven. Persoonlijk zou ik me richten op het minder complex maken van he postvariabelen zodat het niet meer een probleem is. Ik kan me lastig voorstelen dat het moeilijker wordt dan het ombouwen van de opgeslagen html zodat daarin de eventuele foutmeldingen kunnen worden verwerkt.
Daar ben ik het helemaal mee eens... mijn oplossing was ook slechts "een" optie...

  • Blackbird-ce
  • Registratie: September 2005
  • Laatst online: 06-10 23:35
Is dit uberhaupt mogelijk? Uit je vraag begrijp ik dat er wellicht wat afhankelijkheden zit tussen de verschillende formulier-velden, wat het lastig maakt om het formulier weer op te bouwen zoals de gebruiker die verstuurd heeft.
Is het niet mogelijk om vlak voor de submit oid met behulp van javascript alle veldwaarden uit te lezen en op te slaan (client-side) en die bij een eventuele fout weer terug te zetten? Alternatief is wellicht alle acties op te slaan in een record & playback manier?

Allemaal lelijke oplossingen, maar als jouw datamodel al zo ingewikkeld is om zelf niet het formulier te kunnen reconstrueren aan de hand van de input van de gebruiker, hoe verwacht je dan dat de gebruiker je formulier compleet kan doorgronden? :|

  • Acolyte
  • Registratie: Oktober 2002
  • Laatst online: 28-08-2024
Het is inmiddels op een redelijk makkelijke manier opgelost :P
Een simpel javascriptje dat onSubmit checkt of -welk veld dan ook- leeg is of niet. Geen geklooi met terugkoppeling meer.

Hier kan je het form zien wat ik gebruik (basicly 1 grote edit)

Hier kan je de POST opbouw zien van hoe het eruit ziet zodra je op submit klikt. Het was dus zeker niet een kwestie van laksheid dat ik geen zin had bij veel velden een echo POST te doen, de layout van POST is heel anders dan hoe het uit de database getrokken wordt. Om de doodsimpele reden dat ik voor het updaten van de database niet alle gegevens nodig heb; alle items staan in 1 tabel, dus ik hoef bijv. geen rekening meer te houden met parents oid.

Beide even met view source bekijken, zo html bakt ie er niets van

Laatste struikelblok is nog dat ik 1 ding nog wel controleer mbv PHP: of de volgorde van fora niet op hetzelfde is gezet. Binnen een forum en onder forums onderling mogen natuurlijk niet twee items op dezelfde plek komen te staan. Dus:

Forum 1 | positie 2
Forum 2 | positie 2

Kan dus niet. Ik moet dus controleren of 2 waardes in een select hetzelfde zijn. In PHP lukt dit mij prima, maar dan zit je dus weer met het verversen van de pagina en het verliezen van gegevens. Als dit ook met javascript kan zou dat natuurlijk alle problemen oplossen.

  • jeroen84
  • Registratie: Februari 2002
  • Laatst online: 13-09 12:42
Blackbird-ce schreef op woensdag 04 april 2007 @ 14:56:
Is het niet mogelijk om vlak voor de submit oid met behulp van javascript alle veldwaarden uit te lezen en op te slaan (client-side) en die bij een eventuele fout weer terug te zetten? Alternatief is wellicht alle acties op te slaan in een record & playback manier?
Dit is inderdaad mogelijk door de Submit knop een JS functie te laten uitvoeren en in de functie pas op het eind naar de volgende pagina te gaan. JS kan dit zonder probleem in een cookie opslaan.

Wel imho inderdaad een lelijke oplossing. Mooie simpele oplossing is simpelweg:
<input type="text" name="variableName1" size="10" maxlength="20" value="<?php echo $variableName1; ?>" id="variableName">
(Of met templates ipv php tags)

  • Martinspire
  • Registratie: Januari 2003
  • Laatst online: 11:04

Martinspire

Awesomeness

Volgens mij is het toch makkelijker dat als het formulier niet klopt dat je dan door middel van javascript de backbutton simuleerd.( history.go(-1) )
Als het goed is wordt je informatie dan behouden.

Wat je anders kan doen is de variabelen door middel van php opnieuwe erin zetten door de value op die waarde te zetten.

Martinspire - PC, PS5, XSX


  • Acolyte
  • Registratie: Oktober 2002
  • Laatst online: 28-08-2024
djmantri schreef op woensdag 04 april 2007 @ 15:24:
Volgens mij is het toch makkelijker dat als het formulier niet klopt dat je dan door middel van javascript de backbutton simuleerd.( history.go(-1) )
Als het goed is wordt je informatie dan behouden.
Nee, want als het form wordt opgebouwd worden de values gezet door de informatie uit de database. In zo'n geval overschrijft die informatie de informatie die door de user ingevuld is, ook bij gebruik van de back button.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 11:17

Janoz

Moderator Devschuur®

!litemod

Ik zie juist een heel gestructureerde POST opbouw die in een paar regeltjes omgezet kan worden in een formulier.

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


  • Blackbird-ce
  • Registratie: September 2005
  • Laatst online: 06-10 23:35
jeroen84 schreef op woensdag 04 april 2007 @ 15:11:
[...]

Dit is inderdaad mogelijk door de Submit knop een JS functie te laten uitvoeren en in de functie pas op het eind naar de volgende pagina te gaan. JS kan dit zonder probleem in een cookie opslaan.
Lijkt me ook geen fijne oplkossing, want stuur je niet standaard alle cookies voor dat domein mee met elke request?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 11:17

Janoz

Moderator Devschuur®

!litemod

Inderdaad stuur je altijd die cookies mee, daarnaast zit er een maximum aan de beschikbare ruimte en tot slot hoeven cookies niet altijd beschikbaar te zijn.

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


  • Suepahfly
  • Registratie: Juni 2001
  • Laatst online: 16-10 13:42
Ik zet normaal gesproken form info in een sessie, is de sessie niet leeg dan field values daar mee vullen anders met info uit database.

  • Acolyte
  • Registratie: Oktober 2002
  • Laatst online: 28-08-2024
Janoz schreef op woensdag 04 april 2007 @ 16:18:
Ik zie juist een heel gestructureerde POST opbouw die in een paar regeltjes omgezet kan worden in een formulier.
Het ligt ook niet aan de geordendheid oid. Dat zit wel goed. Maar de manier waarop ik de data uit de database trek en de manier waarop ik ze in post opsla verschillen: vanuit de database moet ik ook onthouden welke subfora bij welke fora horen en er dus een dimensie bij maken ( forum -> forums -> subforums -> data ) terwijl ik dat bij het opslaan niet hoef te doen ( forum -> forums -> data (met daarin nog wel een key sParent om de posities mee te controleren) ).
Nou kan ik dit oplossen door ook bij mijn POST deze extra dimensie toe te voegen, maar voor het invoeren in de database is dat totaal overbodig en heb daar dan ook geen rekening mee gehouden tijdens het scripten.

Ik ben gewoon benieuwd of er een andere manier is om dit goed op te lossen.

[ Voor 3% gewijzigd door Acolyte op 04-04-2007 23:15 ]

Pagina: 1