Avatar billede krummel Juniormester
03. februar 2009 - 21:35 Der er 12 kommentarer og
1 løsning

onclick submit select form

Når en bruger vælger et navn i nedenstående menu, så føres han automatisk videre til en anden side. Jeg henter url'en fra mysql db. Desværre bliver f=3&t=8 i databasen til f=f%3D3%26t%3D8 i url'en og så kan siden ikke findes. Hvordan undgår jeg, at = og & bliver omdannet når den hentes til form tag'et?

Det er kun i denne form tag at url'en går i stykker. Når jeg henter url'en til et fx et alm <a href> tag, så skrives urlen rigtig.

<form name="f" method="GET" action="view.php">   
<select onchange="document.f.submit();" name="f" >
  <option selected="selected">---- Find ----</option>
  <option value="<? echo $q[url_short]; ?>">Navn1</option>
</select>
</form>

Ved ikke lige om det er den rigtige kategori spørgsmålet vedrører
Avatar billede olebole Juniormester
04. februar 2009 - 10:10 #1
<ole>

Prøv at vise os HTML-koden. Ikke mindst, hvad der faktisk står i value attributten

/mvh
</bole>
Avatar billede olebole Juniormester
04. februar 2009 - 10:11 #2
- og så er der da også noget ged i din navngivning. Kald din form og din select noget forskelligt
Avatar billede tjens Nybegynder
04. februar 2009 - 20:54 #3
Din value hedder "f=3&t=8"
Dit felt hedder "f"

Så skulle din get-action blive til view.php?f=f=3&t=8    ??
Det kan din PHP-side ikke fortolke med et rimeligt resultat.

Jeg vil mene at f=f%3D3%26t%3D8 er ganske fornuftigt. Du skal bare bruge http://dk.php.net/urldecode til at få teksten med de 2 lighedstegn tilbage.
Avatar billede olebole Juniormester
04. februar 2009 - 21:14 #4
tjens >> Nej, det giver ikke mening. For det første kan jeg ikke på nogen somhelst måde genskabe problemet med en form. For det andet giver din forklaring ikke mening. Hvorfor skulle dét ske? Og nej, urldecode bør ikke kunne klare en forkert encoded streng  =)

Den viste streng 'f=f%3D3%26t%3D8' kan umuligt fremkomme i en alm. form i en gængs browser. I så fald skal browseren øjeblikkeligt kasseres!

Det ligner en fejl-encoding, fremkommet ved:

<script type="text/javascript">
var s = "f=" + encodeURIComponent("f=3&t=8");
alert(s);
</script>

- hvilket er langt ude i hegnet!

En form som:

<form name="f" method="GET" action="">   
<select onchange="document.f.submit();" name="f" >
  <option selected="selected">---- Find ----</option>
  <option value="3">Navn1</option>
</select>
<input type="text" name="t" value="8">
</form>

- kan jeg ikke i nogen somhelst browser få til at opføre sig på en måde, så den viste query fremkommer. Der er helt sikkert noget, vi ikke får at vide  =)
Avatar billede tjens Nybegynder
04. februar 2009 - 22:32 #5
Ja OK Ole: Vi ved ikke om value allerede er encoded, men hvis den er passer min teori.

HTML:
<html><head></head>
<body>
<div>
<form name="f" method="GET" action="view.php">   
<select onchange="document.f.submit();" name="f" >
  <option selected="selected">---- Find ----</option>
  <option value="f%3D3%26t%3D8">Navn1</option>
</select>
</form>
</div>
</body>
</html>

PHP:
<html><head></head>
<body>
<p>
Get parameter f: <b><?php echo $_GET["f"]; ?></b><br>
urldecode parameter f: <b><?php echo urldecode($_GET["f"]); ?></b>
</p>
</body>
</html>

Giver output:
Get parameter f: f%3D3%26t%3D8
urldecode parameter f: f=3&t=8
Avatar billede olebole Juniormester
04. februar 2009 - 22:46 #6
*LoL* - du har ret! End ikke de mest utænkelige forsøg bør udelukkes!  :D

Så behøver værdien faktisk ikke engang være encoded. Dette vil give samme resultat:
    <option value="f=3&t=8">Navn1</option>

Men jeg må indrømme, det overgik min ellers frodige fantasi  =)
Avatar billede olebole Juniormester
04. februar 2009 - 22:48 #7
Men urldecode giver ikke to variabler på serveren. Det returnerede skal efterfølgende parses.

Hvis virkelig der står value="f=3&t=8", er der tale om en designfejl  =)
Avatar billede tjens Nybegynder
04. februar 2009 - 22:54 #8
Som jeg læser det originale spørgsmål forventer krummel et felt med indholdet "f=3&t=8".
Avatar billede olebole Juniormester
04. februar 2009 - 23:09 #9
Det bliver bedre og bedre  =)
Avatar billede krummel Juniormester
05. februar 2009 - 23:45 #10
Jeg er en fritidskoder, så jeg indrømmer gerne at jeg er en amatør til dette. Efter at have set jeres svar, så kan jeg fornemme jeg griber dette "problem" forkert an :)

#3 Det er korrekt, at det er den første fejl. f= er med 2 gange. Jeg har nu slettet f= i databasen, så det ikke sker.

Så nu står der i databasen url_short 3&t=8 (den kan fx også hedde 4&t=12 og andre tal)
Når den hentes ind i formen ser det således ud
<option value="3&t=8">Navn1</option>

Når en bruger vælger Navn1 i menuen, skulle han gerne sendes videre til siden:
view.php?f=3&t=8

Men i browseren vises
viewtopic.php?f=3%26t%3D8

Jeg kan næsten fornemme, at det er den forkerte måde at gøre det på. Hvordan gør man det så?
Avatar billede tjens Nybegynder
06. februar 2009 - 10:13 #11
Din database bør ikke lagre URL brudstykker.
Lav i stedet 2 felter i databasen til henholdsvis 3 og 8.

Når du så gerne vil have begge felter gemt i 1 select-value, må du pakke dem sammen til en værdi der kan sendes som get-variabel.

Jeg kunne foreslå at du lader PHP danne værdien "3#8" sådan her
<option value="<? echo $q[feltf] . '#' . $q[feltt] ; ?>">Navn1</option>

I view.php skal du så danne de 2 variable ved at at klippe get-variaben op i 2:
$fA = explode( "#", $_GET["f"]);
$feltf = fA[0];
$feltt = fA[1];
Avatar billede krummel Juniormester
13. februar 2009 - 23:39 #12
tak for forklaringen tjens. giv svar og få point
Avatar billede tjens Nybegynder
14. februar 2009 - 10:16 #13
Godt du fik en løsning.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester