[PHP/JavaScript] Jumpmenu en hidden field data

Pagina: 1
Acties:

  • MrDummy
  • Registratie: April 2000
  • Laatst online: 25-07-2025

MrDummy

Nog steeds gek op anime...

Topicstarter
Ik was even bezig met een jumpmenu zodat het na kiezen meteen uitgevoerd wordt. Dat werkt met Javascript. Men moet naar andere pagina's kunnen springen, die door PHP script wordt gebouwd. Denk maar aan artikelpagina's.

Maar stel eens voor dat in dezelfde form gedeelte ook aantal hidden fields staan welke gegevens mee moeten nemen samen met de gekozen pagina jump.

Na wat prutsen blijkt het wel lastig te zijn met standaard script van de jumpmenu.
Dit is zo'n script hiervoor:
code:
1
2
3
4
5
6
function dvJumpMenu(obj)
{
/* can be replaced by if (obj.selectedIndex>1) ... */
if (obj.options[obj.selectedIndex].value!="#")
eval("window.location='" + obj.options[obj.selectedIndex].value + "'");
}


En voor jumpmenu dus, met hidden fields:
code:
1
2
3
4
5
6
7
8
9
10
11
<form name="form">
<input name="groep" type="hidden" value="<?=$groep;?>">
<input name="action" type="hidden" value="<?=$action;?>">
<input name="sleutel" type="hidden" value="<?=$sleutel;?>">
<select name="page" onChange="dvJumpMenu(this)">
<option value="#" selected>kies pagina</option>
<option value="#"></option>
<option value="1">page 1</option>
<option value="2">page 2</option>
</select>
</form>
Probleem is dat het meteen daarheen springt volgens opgegeven url uit de value field in de javascript fuction. Die is er niet eens aanwezig.
Ik probeerde zelfs met standaard
<form name="form" method="post" action="view.php">
maar dat helpt niet veel. Het geeft foutmelding omdat de pagina natuurlijk niet bestaat.

Veel sites tonen geen antwoord op mijn bijzondere geval. Of het is lastig zoeken want meeste hebben alleen over springen/linken naar andere pages. Maar hier moet het intern blijven circuleren en de extra data in hidden fields moeten meegaan. Zonder extra submit button, direct uit te voeren uit de jumpmenu.

Hoe kan ik het oplossen? Elke tip is welkom.

(Ik heb al kunnen oplossen met submit button, dus op normale manier zonder javascript, maar ik wil toch stapje hoger met dit probleem van jumpmenu. Dit is dus volgende probleem.)

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:02

Creepy

Tactical Espionage Splatterer

* Creepy haat javascript, ook al wordt het door PHP gegenereerd. :P
P&W -> W&G

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
waarom gebruik je in vredes naam eval?
code:
1
window.location.href = obj.options[obj.selectedIndex].value;

Verder kun je veel beter het formulier gewoon submitten:
code:
1
document.forms['form'].submit();

Maar dan moet je wel even method="get" en even een id="form" in je form tag zetten. Ik dacht namelijk dat forms alleen een id pakt.

[ Voor 30% gewijzigd door Michali op 03-01-2005 22:47 ]

Noushka's Magnificent Dream | Unity


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 22:08

crisp

Devver

Pixelated

het meest eenvoudig is door gewoon in je select onchange="this.form.submit()" te zetten ;)

Intentionally left blank


  • MrDummy
  • Registratie: April 2000
  • Laatst online: 25-07-2025

MrDummy

Nog steeds gek op anime...

Topicstarter
Waarom moet het GET zijn en niet POST? Omdat het insecure is?
GET is als ik goed heb achter elkaar en POST is in 1 keer....

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
Nee, post kan ook perfect. Ik dacht even gelezen te hebben dat je graag get wilde. Doe maar lekker post dan, het maakt eigenlijk niet zo veel uit.

Noushka's Magnificent Dream | Unity


  • Johnny
  • Registratie: December 2001
  • Laatst online: 20:05

Johnny

ondergewaardeerde internetguru

MrDummy schreef op maandag 03 januari 2005 @ 22:48:
Waarom moet het GET zijn en niet POST? Omdat het insecure is?
GET is als ik goed heb achter elkaar en POST is in 1 keer....
Nee, beide zijn even onveilig

Het enige verschil is dat bij GET de data in de URL wordt geplaatst, dat is handig als je het adres bijvoorbeeld wilt bookmarken.

Als je het via POST doet wordt de data los verstuurd, en als je dan de ontvangstpagina opnieuw laad (refresh) krijg je een waarschuwing van je browser dat je de data opnieuw moet versturen.

Verder heeft GET ook nog een maximumlengte waardoor het niet erg geschikt is voor grote hoeveelheden data, maar dat is hier niet van toepassing.

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


Verwijderd

Michali schreef op maandag 03 januari 2005 @ 22:44:
waarom gebruik je in vredes naam eval?
code:
1
window.location.href = obj.options[obj.selectedIndex].value;

Verder kun je veel beter het formulier gewoon submitten:
code:
1
document.forms['form'].submit();

Maar dan moet je wel even method="get" en even een id="form" in je form tag zetten. Ik dacht namelijk dat forms alleen een id pakt.
Zonder id werkt toch ook prima als de `name` tag maar goed staat?

Ik gebruik in dit soort gevallen altijd GET omdat je dan geen gek geneuzel krijgt als je op de `back` button drukt. Er worden toch geen onveilige gegevens verstuurd in dit geval toch?

[ Voor 18% gewijzigd door Verwijderd op 03-01-2005 22:56 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 22:08

crisp

Devver

Pixelated

id is preferred; name is alleen in HTML4 nog opgenomen vanwege backwards compatibility en is in XHTML niet meer toegestaan. Maar in de meeste gevallen is een name/id ook helemaal niet nodig aangezien je vanuit een eventhandler gewoon een referentie naar je formulier kan meegeven :)

Intentionally left blank


  • MrDummy
  • Registratie: April 2000
  • Laatst online: 25-07-2025

MrDummy

Nog steeds gek op anime...

Topicstarter
crisp schreef op maandag 03 januari 2005 @ 22:46:
het meest eenvoudig is door gewoon in je select onchange="this.form.submit()" te zetten ;)
Deze geeft problemen als ik twee submitknoppen toevoeg naast jumpmenu, zo blijkt het.
Ik heb twee knoppen erbijgezet link en rechts als zogenaamde bladerknoppen << en >>
Het blijft hangen op dezelfde pagina welke door de jumpmenu is bepaald.
Verder zag ik ook dat het ook misgaat met aantal hidden fields.

*pruts pruts*
Ah, ik zie het al. GET is de boosdoener. Alleen POST werkt goed naar behoren.
Dus het is POST geworden.

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
GET kan helemaal niet de boosdoener zijn. Ik denk dat je iets fout doet in je php script ($_POST ipv. $_GET)?

En waarom zou dat stukje van crisp nou weer fout gaan als je een extra button toevoegt? Je geeft ze toch niet stiekum de naam van een al bestaand element in dat formulier?

Noushka's Magnificent Dream | Unity


  • MrDummy
  • Registratie: April 2000
  • Laatst online: 25-07-2025

MrDummy

Nog steeds gek op anime...

Topicstarter
Michali schreef op dinsdag 04 januari 2005 @ 12:07:
GET kan helemaal niet de boosdoener zijn. Ik denk dat je iets fout doet in je php script ($_POST ipv. $_GET)?
En waarom zou dat stukje van crisp nou weer fout gaan als je een extra button toevoegt? Je geeft ze toch niet stiekum de naam van een al bestaand element in dat formulier?
Als ik goed heb, moet je als de form GET heeft, de global variabele $_GET gebruiken he? En bij POST gebruikt men dan $_POST...

Ik gebruik zelf al hele tijd $_POST in alle formulieren. POST wordt ihmo vaker aangeraden dan GET. Doordat ik GET neem in form, werkt het natuurlijk niet omdat ik $_POST heb gebruikt.
Alleen $_REQUEST werkt wel met GET en POST, maar is natuurlijk niet veilig omdat men ook onbedoeld in kan voeren via file.php?xxxx=abc&yyyy=abc

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
$_REQUEST is even onveilig als $_GET en $_POST. Je moet gewoon zorgen dat je bepaalde (al dan niet iedere) input controleert. Vertrouw nooit de input van de gebruiker. En men kan ook onbedoeld file.php?xxxx=abc&yyyy=abc opgeven als je puur met de GET methode werkt, en ook met POST kunnen custom waardes worden doorgestuurt. Doe gewoon wat je het gemakkelijkst lijkt. Als je slechts enkele variabelen hebt en je geen gezeur het de history wilt kun je imo beter GET gebruiken. Als je maar de input controlleert en filtert.

Noushka's Magnificent Dream | Unity

Pagina: 1