Positie op pagina na Form Post
Hallo,
ik heb een lijvig formulier online staan met een 200 tal namen die elk een "checkbox" hebben voor de aanduiding van hun aanwezigheid. Wanneer ik een selectie maak in de selectbox doe ik onmiddellijk een formulier submit waardoor de pagina reload en de pagina weer bovenaan komt te staan.
Ik heb reeds websites gezien waar de positie op de pagina blijft behouden na ieder formulier submit.
Heeft iemand enig idee hoe ik dit best kan oplossen? De pagina is gemaakt in PHP.
ik heb een lijvig formulier online staan met een 200 tal namen die elk een "checkbox" hebben voor de aanduiding van hun aanwezigheid. Wanneer ik een selectie maak in de selectbox doe ik onmiddellijk een formulier submit waardoor de pagina reload en de pagina weer bovenaan komt te staan.
Ik heb reeds websites gezien waar de positie op de pagina blijft behouden na ieder formulier submit.
Heeft iemand enig idee hoe ik dit best kan oplossen? De pagina is gemaakt in PHP.
Gewijzigd op 08/03/2020 20:22:22 door Daniel VDM
Kan je code leesbaar maken door deze tussen code-tags te plaatsen? Zie ook de Veelgestelde Vragen.
Gewijzigd op 08/03/2020 19:59:05 door - Ariën -
Arien, waar kan ik de "veel gestelde vragen" vinden?
Kijk eens naar beneden?
Ik zou dan het formulier met AJAX versturen.
Lukt niet hoor..
Gewijzigd op 08/03/2020 20:20:59 door Daniel VDM
'Wat' lukt niet?
Je code kan je tussen [code] en [/code] plaatsen.
Je code kan je tussen [code] en [/code] plaatsen.
Gewijzigd op 08/03/2020 20:25:07 door - Ariën -
zet wat je nu hebt tussen [code] en [/code]. Zie ook Welke BBcodes kan ik gebruiken?
Gewijzigd op 08/03/2020 20:24:07 door Frank Nietbelangrijk
zie volgende poging
Gewijzigd op 08/03/2020 20:30:18 door Daniel VDM
Wat ben je aan het doen, joh?
Waarom per regel? :P
Waarom per regel? :P
nieuwe poging
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<form action="<?php $_SERVER['PHP_SELF']; ?>" method="POST" name="form1">
<tr class="bg1">
<td><?php echo ($naam); ?></td>
<td align="center">
<form action="<?php $_SERVER['PHP_SELF']; ?>" method="POST" name="form2">
<input name="members_id" type="hidden" value="<?php echo($members_id); ?>">
<input name="members_ploeg" type="checkbox" id="members_ploeg" value="1" <?php if ($members_ploeg == "1") {echo ("checked"); }?> onchange='document.forms[2].action="#";submit()'>
</td>
</tr>
</form>
<tr class="bg1">
<td><?php echo ($naam); ?></td>
<td align="center">
<form action="<?php $_SERVER['PHP_SELF']; ?>" method="POST" name="form2">
<input name="members_id" type="hidden" value="<?php echo($members_id); ?>">
<input name="members_ploeg" type="checkbox" id="members_ploeg" value="1" <?php if ($members_ploeg == "1") {echo ("checked"); }?> onchange='document.forms[2].action="#";submit()'>
</td>
</tr>
</form>
Gezien je het hebt over dat je op de zelfde plaats blijft, verwacht ik niet dat je dus omlaag scrolled naar een button om de boel te versturen. Ik vermoed dat het al verstuurd en bevestigd wordt door op het formulier element te klikken? Klopt dat?
Nee ik blijf niet op dezelfde plaats. Wanneer ik de checkbox naast de 150 ste naam aanklik doe ik een submit om dit te bewaren in de database. Gezien er een submit heeft plaatsgevonden wordt de pagina herladen en kom ik opnieuw bovenaan het formulier te staan. Om verder te gaan men naam 151 of meer dan moet ik telkenmale scrollen tot in op de hoogte ben van die naam...
Ik zoek dus een oplossing om na een submit opnieuw op dezelfde hoogte te komen van mijn pagina zonder dat ik telkenmale moet gaan scrollen.
Ik zoek dus een oplossing om na een submit opnieuw op dezelfde hoogte te komen van mijn pagina zonder dat ik telkenmale moet gaan scrollen.
Via AJAX de waarde laten bij een onClick-event laten versturen naar een PHP-script. Dan wordt er op de achtergrond a-synchroon een script aangeroepen.
Gewijzigd op 08/03/2020 20:52:20 door - Ariën -
Waarschijnlijk is een aanpak met AJAX het beste. Hiermee submit je het formulier "op de achtergrond", hierdoor verlaat je nooit de huidige overzichtspagina, en verspringt deze pagina dus ook niet.
Het enige wat misschien belangrijk is om toe te voegen is een soort van visuele indicatie dat het aan- of uitvinken daadwerkelijk is doorgevoerd.
Dit zou je kunnen bewerkstelligen met een terugkoppeling vanuit het stukje code wat aangeroepen wordt middels het AJAX-request.
Het enige wat misschien belangrijk is om toe te voegen is een soort van visuele indicatie dat het aan- of uitvinken daadwerkelijk is doorgevoerd.
Dit zou je kunnen bewerkstelligen met een terugkoppeling vanuit het stukje code wat aangeroepen wordt middels het AJAX-request.
Of een low-tech oplossing: voeg een "fragment" toe aan de POST action met het id van de 151e checkbox. Dan springt ie na het herladen precies daar naar toe:
(hiermee springt ie naar de submit button, maar vervang "#members_ploeg" door "#input151_id" en hij springt naar input nummer 151).
Code (php)
1
<form action="<?php $_SERVER['PHP_SELF']; ?>#members_ploeg" method="POST" name="form1">
(hiermee springt ie naar de submit button, maar vervang "#members_ploeg" door "#input151_id" en hij springt naar input nummer 151).
Ik wil nog even wijzen op het gebruik van PHP_SELF. Deze is/was bestempeld als onveilig. Zie ook klik.
Als het niet nodig is gebruik dan $_SERVER['SCRIPT_NAME']. Let erop dat deze geen argumenten mee stuurt itt PHP_SELF.
Als het niet nodig is gebruik dan $_SERVER['SCRIPT_NAME']. Let erop dat deze geen argumenten mee stuurt itt PHP_SELF.
Je kan misschien met ankers werken en na de post naar dat anker springen
Sorry niet gezien dat rob dit ook al voorstelde
Sorry niet gezien dat rob dit ook al voorstelde
Gewijzigd op 10/03/2020 07:11:42 door Jan R
@Michael, als je gewoon zaken escaped in een HTML-context die niet als HTML geïnterpreteerd dienen te worden dan speelt dit probleem uberhaupt niet? Het makkelijkste is sowieso om dit overal consequent te doen.
Als je dan toch aangewezen bent op $_SERVER dan is SCRIPT_NAME misschien beter inderdaad, maarrrr... nog beter is wellicht gewoon expliciet vastleggen (bestandsnaam.php indien het een standalone PHP-bestand is) of als je een wat geavanceerde systeem hebt een centrale aanpak voor het genereren van applicatie-links, die je vervolgens escaped voor gebruikmaking in een specifieke context.
Als je dan toch aangewezen bent op $_SERVER dan is SCRIPT_NAME misschien beter inderdaad, maarrrr... nog beter is wellicht gewoon expliciet vastleggen (bestandsnaam.php indien het een standalone PHP-bestand is) of als je een wat geavanceerde systeem hebt een centrale aanpak voor het genereren van applicatie-links, die je vervolgens escaped voor gebruikmaking in een specifieke context.
Ja dat kan. Ik gebruik gewoon standaard altijd SCRIPT_NAME. Lijkt me makkelijker dan htmlspecialchars($_SERVER['PHP_SELF']). Wat in dit geval dus ook niet gebeurt.
We dwalen af ... maar als je dan toch naar hetzelfde bestand wilt POST-en kun je de action ook gewoon helemaal weglaten. Gaat ie vanzelf naar jezelf.
Of in mijn eigen oplossing/voorbeeld alleen een fragment:
Maar idem dito voor een query string (action="?foo=bar).
Of in mijn eigen oplossing/voorbeeld alleen een fragment:
Maar idem dito voor een query string (action="?foo=bar).




