Toon posts:

Rewrites voor slashes, enz in adresbalk werken niet bij form

Pagina: 1
Acties:

Verwijderd

Topicstarter
Mocht een mod een beter subforum weten voor dit topic, graag. Ik twijfel altijd teveel aan de aard van het probleem + subforum.

Ik zit me hier toch een raar probleem bij het "Getten" van een form dat wel 'gezien' wordt maar niet 'begrepen' door de browser.

OK, een script waar een formulier in zit. Dit formulier werkt naar behoren maar ik wil hem includen in een andere pagina dus zet ik in de Form action hetvolgende:

code:
1
?pagina=directory/index.php&foo=directory/pagina.php


Wanneer ik de pagina verzend dan krijg ik mijn adresbalk het volgende:

code:
1
%3Fpagina%3Ddirectory%2Findex.php%26foo%3Ddirectory%2Fpagina.php


en op een of andere manier een Not Found pagina met deze regel:

code:
1
/directory waar alles in staat/?pagina=directory/index.php&foo=directory/pagina.php was not found on this server.


Raar denk je dan en je gaat op onderzoek uit. Wanneer ik bij de adresbalk met de "rewrites" alle stukjes als %3F vervang door de bijbehorende tekens zoals in de printout op de error-pagina eronder dan werkt het wel.

Snap de browser dit nu niet niet, of kan Apache/PHP er niet mee overweg ? (of doe ik iets verkeerd O-) )

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 08:58

Janoz

Moderator Devschuur®

!litemod

Als je die parameters nu eens als hidden fields opneemt ipv het misbruiken van het action attribuut? Zolang je net eist dat die variabelen via de get parameters binnenkomen moet dat goed gaan.

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


Verwijderd

Topicstarter
Dat is helemaal geen gek idee. Laat het nu zo zijn dat het field voor die url al hidden zijn. Ik moet dus een alternatief zoeken.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 08:58

Janoz

Moderator Devschuur®

!litemod

Ik begrijp niet wat je bedoeld.

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


  • FragFrog
  • Registratie: September 2001
  • Laatst online: 17:14
Ik gok dat'ie bedoelt dat'ie sowieso de URL al als hidden field meestuurt.?

Begrijp ook niet helemaal het probleem - je hebt een form geinclude in een pagina en de action van het formulier moet diezelfde file hebben? Dan kun je toch simpelweg naar diezelfde pagina redirecten? Bijvoorbeeld:
PHP:
1
2
3
4
5
$request_url = $_SERVER['PHP_SELF'];
<<<HTM
  <form method='GET' action='$request_url'>
    etc
HTM;

Hiermee kom je altijd weer uit op de pagina waarvandaan het form geinclude is en aangezien je form daar dus in staat zou't ook altijd moeten werken als je form pagina zelf goed werkt. Uit de losse pols overigens, correct me if I'm wrong :) Mocht je het form af laten handelen door je index.php doe je hetzelfde maar dan met action='index.php' en een <input type='hidden' name='URI' value='$request_url'> (wat hierboven ookal voorgesteld werd)

Overigens gebruik ik zelf nooit GET, formulieren waarbij je data post horen met POST wat mij betreft en als je data van de server opvraagt is het een stuk netter en zoekmachine-vriendelijker om dat via een mod_rewrite te doen. Voorbeeldje:
PHP:
1
2
3
4
5
6
7
8
9
$params = array_slice(explode("/",strtolower(rtrim($_SERVER["REDIRECT_URL"],"/"))),1);
$params = array_map(htmlspecialchars, $params);

switch ($params['0']) {
  case 'index':
    default:
    todayHandler();
    break;
}

Met uiteraard een leuke switch eraan voor alle opties, werkend voorbeeld. Het comment formpje zit er daar in dankzij een Smarty template, maar het idee is hetzelfde als wanneer het geinclude zou zijn. De tweede variabele van de URI is het ID van het blogitem, het form verwijst enkel door naar /new/comment/ en krijgt als hidden variabele het ID mee (uiteraard enkel bij een geldig ID). Ik gok dat bijvoorbeeld de quickreply van GoT op niet zo'n gek andere manier werkt :)

[ Voor 87% gewijzigd door FragFrog op 29-06-2006 16:39 ]

[ Site ] [ twitch ] [ jijbuis ]