Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[php] header location werkt alleen eerste keer

Pagina: 1
Acties:

  • Saven
  • Registratie: December 2006
  • Laatst online: 20:24

Saven

Administrator

Topicstarter
Hola,

Ik heb een probleem waarbij ik het redelijk kort kan houden. Ik heb een zoekformuliertje op een site, en zodra je op enter drukt word je naar de volledige zoekpagina gestuurd. Dit doe ik met een header location, omdat ik mooie url's wil houden.

Code komt dus neer op:
PHP:
1
2
3
4
5
if( isset($_POST['search']) )
{
    // location is een verkorting van header location:xxx
    location(url.'zoeken/'.$_POST['search']);
}

Nou dit doet het dus de eerste keer goed, ik word vanaf de index netjes naar die site.nl/zoeken/xxx gestuurd.

Alleen als ik vanaf daar nog een keer een zoekterm invul en op enter douw, gebeurt er niet zo veel. Hij verzend het form, hij stuurt zelfs de header location in de http header, maar hij blijft gewoon op dezelfde url staan. Op zoeken/xxx en niet op zoeken/yyy

http headers van de 1e poging (xxx)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
Cache-Control   no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection  Keep-Alive
Content-Encoding    gzip
Content-Type    text/html; charset=utf-8
Date    Fri, 22 Feb 2013 15:42:04 GMT
Expires Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive  timeout=1, max=99
Location    http://zzzzz.nl/zoeken/xxx
Pragma  no-cache
Server  Apache/2
Transfer-Encoding   chunked
Vary    Accept-Encoding,User-Agent
X-Powered-By    PHP/5.3.21


Als ik dan vanaf die pagina weer wil zoeken, naar yyy bijv. krijg ik wel deze headers:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
Cache-Control   no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection  Keep-Alive
Content-Encoding    gzip
Content-Type    text/html; charset=utf-8
Date    Fri, 22 Feb 2013 15:42:48 GMT
Expires Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive  timeout=1, max=100
Location    http://zzzzz.nl/zoeken/yyy
Pragma  no-cache
Server  Apache/2
Transfer-Encoding   chunked
Vary    Accept-Encoding,User-Agent
X-Powered-By    PHP/5.3.21


Kan iemand mij hierbij helpen? Heb gezocht op internet maar kom niks tegen wat mij op het juiste spoor kan brengen. Enige wat ik kan vinden is dat mensen zeuren over de output already send melding :P

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

De belangrijkste header ben je vergeten, namelijk de response code.

All my posts are provided as-is. They come with NO WARRANTY at all.


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Waarom zit je überhaupt GET-functionaliteit te simuleren met POST? Doe dat bouwen van mooie URLs dan gewoon in javascript?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Saven
  • Registratie: December 2006
  • Laatst online: 20:24

Saven

Administrator

Topicstarter
NMe schreef op vrijdag 22 februari 2013 @ 16:50:
Waarom zit je überhaupt GET-functionaliteit te simuleren met POST? Doe dat bouwen van mooie URLs dan gewoon in javascript?
Moet ook goed zijn voor de zoekmachines, en die lezen de javascript niet
CyBeR schreef op vrijdag 22 februari 2013 @ 16:47:
De belangrijkste header ben je vergeten, namelijk de response code.
Hmm, ik moet eerlijk toegeven dat ik dat nog nooit heb gebruikt (my bad denk ik dan) en het altijd heeft gewerkt. Ik ga even testen :)

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Saven schreef op vrijdag 22 februari 2013 @ 16:52:
[...]

Moet ook goed zijn voor de zoekmachines, en die lezen de javascript niet
Zoekmachines vullen sowieso geen formulieren dus dat is geen argument. Daarnaast lezen ze wel degelijk bepaalde stukken javascript, en met name redirects. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Saven
  • Registratie: December 2006
  • Laatst online: 20:24

Saven

Administrator

Topicstarter
NMe schreef op vrijdag 22 februari 2013 @ 16:53:
[...]

Zoekmachines vullen sowieso geen formulieren dus dat is geen argument. Daarnaast lezen ze wel degelijk bepaalde stukken javascript, en met name redirects. :)
Goed punt :)

Maar toch zou ik nog graag willen weten waarom het niet werkt. Een response code meegeven heeft ook geen nut gehad:

PHP:
1
2
3
4
5
if( isset($_POST['search']) )
{
    header('HTTP/1.0 301 Moved Permanently', true, 301);
    location(url.'zoeken/'.$_POST['search']);
}


edit: zo snel als ik was met dit bericht plaatsen zo snel heb ik het ook 'opgelost'. Ik had geen die(); onder de header gezet. Toch vind ik dit nog steeds vreemd omdat ik dit niet altijd heb gedaan en het toen wel werkte :P

[ Voor 18% gewijzigd door Saven op 22-02-2013 16:59 ]


  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

301 is de verkeerde. Je moet 302 hebben. Maar wat ik bedoelde is, die vergeet je te posten ;)

All my posts are provided as-is. They come with NO WARRANTY at all.


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:38

crisp

Devver

Pixelated

en gebruik wel de juiste encoding/escaping als je een url samensteld met user-input...

Verder vind ik dit wel een overdreven 'oplossing' (want: wat is het probleem precies?) Een simpel GET-formulier waar dan een /zoeken?keyword=blaat uit komt is imo niet veel minder 'mooi' dan /zoeken/blaat

[ Voor 59% gewijzigd door crisp op 22-02-2013 17:10 ]

Intentionally left blank


  • Saven
  • Registratie: December 2006
  • Laatst online: 20:24

Saven

Administrator

Topicstarter
crisp schreef op vrijdag 22 februari 2013 @ 17:07:
en gebruik wel de juiste encoding/escaping als je een url samensteld met user-input...

Verder vind ik dit wel een overdreven 'oplossing' (want: wat is het probleem precies?) Een simpel GET-formulier waar dan een /zoeken?keyword=blaat uit komt is imo niet veel minder 'mooi' dan /zoeken/blaat
je bedoelt url encoding neem ik aan?

tja blijft toch kwestie van smaak. als 't makkelijk kan waarom niet :)

  • Arjan90
  • Registratie: September 2005
  • Laatst online: 22:37
Maar waarom doe je dit dan niet via Javascript? Als je een "onsubmit" event gebruikt op het formulier ben je zo klaar, m.i. een nettere oplossing omdat je dan niet nog een extra pagina in moet lezen.

"Everybody is a genius. But if you judge a fish by its ability to climb a tree, it will live its whole life believing that it is stupid."


  • Saven
  • Registratie: December 2006
  • Laatst online: 20:24

Saven

Administrator

Topicstarter
Heb ik inmiddels ook gedaan :)

JavaScript:
1
2
3
4
5
6
7
8
    $('#searchbox').keypress(function(e)
    {
        if(e.keyCode == 13)
        {
            document.location = url + 'zoeken/' +$(this).val();
            return false;
        }
    });

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
En alsnog dus crisp's encoding/escaping tip in de wind geslagen ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • sky-
  • Registratie: November 2005
  • Niet online

sky-

qn nna 👌

Ik neem aan dat location() een zelf gedefinieerde methode is? Want correct is het eigenlijk:

[php]
<?php
header('http ding');
header('location:http://...');
[/php]

Geen probleem wanneer je zelf een methode hebt geknutseld natuurlijk.

[ Voor 1% gewijzigd door sky- op 22-02-2013 20:13 . Reden: Niet goed gelezen, foei. ]

don't be afraid of machines, be afraid of the people who build and train them.


  • Saven
  • Registratie: December 2006
  • Laatst online: 20:24

Saven

Administrator

Topicstarter
RobIII schreef op vrijdag 22 februari 2013 @ 19:59:
[...]

En alsnog dus crisp's encoding/escaping tip in de wind geslagen ;)
Oeps, die had ik wel al toegepast, alleen nadat ik de post al half had getypt. Thanks iig voor de heads up :)
sky- schreef op vrijdag 22 februari 2013 @ 20:05:
Ik neem aan dat location() een zelf gedefinieerde methode is? Want correct is het eigenlijk:

PHP:
1
2
3
<?php
header('http ding');
header('location:http://...');


Geen probleem wanneer je zelf een methode hebt geknutseld natuurlijk.
Jup, stond ook in een comment in de code :P

[ Voor 40% gewijzigd door Saven op 22-02-2013 20:06 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Saven schreef op vrijdag 22 februari 2013 @ 17:35:
Heb ik inmiddels ook gedaan :)

JavaScript:
1
2
3
4
5
6
7
8
    $('#searchbox').keypress(function(e)
    {
        if(e.keyCode == 13)
        {
            document.location = url + 'zoeken/' +$(this).val();
            return false;
        }
    });
Waarom zit je met keypresses te kloten als een formulier gewoon een submit event heeft? :?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1