header ("Location: ...) Nie działa poprawnie

0

Hej.

Chciałbym aby po dodaniu komentarza na stronie po odświeżeniu jej nie dodawało go jeszcze raz do BD.
Po dodaniu komentarza wykonuje się:

header ("Location: http://".$_SERVER['HTTP_HOST'].$adres);

gdzie:

$adres = $_SERVER['REQUEST_URI'];

Czyli całość:
np. Location: http://modelarstworc.aq.pl/index.php?view=film&mov=20
Ale nic się nie dzieje. Tak jakby ten header w ogóle nie działał.

0

Poczytaj sobie o protokole HTTP i przekierowaniach. Bodajże obowiązkiem przeglądarki jest powtórzyć dane POST w przypadku wystąpienia przekierowania w nagłówkach. Przekieruj sobie np. na ...&comment=1 i wtedy ignoruj dodawanie komentarza (tą metodą od razu sprawdzisz czy przekierowanie "działa"). Ew zostaje generowanie losowego hasha i wpisywanie go w ukryte pole formularza - i przy dodawaniu komentarza sprawdzanie czy taki hash został już (niedawno) użyty.

0

Dorzuć odpowiedni kod statusu HTTP:

http://en.wikipedia.org/wiki/HTTP_303

This response indicates that the correct response can be found under a different URI and should be retrieved using a GET method. The specified URI is not a substitute reference for the original resource.

W tym wypadku:

header('Status: 303 See Other');
header("Location: http://".$_SERVER['HTTP_HOST'].$adres);
0

Zrobiłem tak jak napisałeś i kod wygląda mniej więcej tak:

if ($rezultat = mysql_query ($zapytanie)) {
	   echo '
	  <script type="text/javascript">
	  	alert("Jestem tutaj !");
	  </script>';
		header('Status: 303 See Other');
		header("Location: http://".$_SERVER['HTTP_HOST'].$adres/"&comment=1");
      //exit();
    } else {
      $komunikat = 'Przepraszamy za chwilowe usterki. Wysłanie komentarza nie było możliwe. Spróbuj później.';
    }

Jednak adres nie zmienia się na:
http://modelarstworc.aq.pl/index.php?view=film&mov=20$comment=1
A alert z napisem "jestem tutaj" się pokazuje.

0

Bo nagłówki trzeba wysłać zanim prześlesz jakąkolwiek treść?
http://lv.php.net/manual/pl/function.header.php

0

$_SERVER['HTTP_HOST'].$adres/"&comment=1" - slash zamiast kropki. ale przede wszystkim to, co napisał Monk. włącz sobie w ustawieniach php wyświetlanie warningów i notice'ów.

0
Demonical Monk napisał(a)

Bo nagłówki trzeba wysłać zanim prześlesz jakąkolwiek treść?
http://lv.php.net/manual/pl/function.header.php

Sorka za pewnie głupie pytanie:). Ale co to dokładnie znaczy? Że nie może być to w sekcji body?

0

Poczytaj o HTTP, nagłówki są wysyłane przed całym dokumentem, nawet przed tagiem <html>.

0

To jak mogę to zrobić skoro mój header() jest używany w includowanym pliku? Który includuje w jednym z kontenerów strony.

1

Zbuforuj wszystko. http://php.net/ob_start
Wrzucasz ob_start() na początku wszystkiego, potem generalnie nic nie musisz robić, bo jak skrypt się zakończy to cały bufor zostanie ciurkiem przekazany do klienta.

2

masz źle zaprojektowany kod strony. taki redirect powinien zrobić kontroler, zanim dojdzie do parsowania szablonu (view). szablon nigdy nie powinien wykonywać akcji biznesowych!

0

poczytaj o 'ob_start' itd.

1 użytkowników online, w tym zalogowanych: 0, gości: 1