Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Jak zastąpić wysłanie headera (przekierować na stronę) w środku kodu php ?
Forum PHP.pl > Forum > Przedszkole
maniek99
  1. if (!isset($_COOKIE['ActiveCode']))
  2. {
  3. header("Location: dostep.php");
  4. unset($_COOKIE[session_name()]);
  5. }


Kod chcę wstawić nie na początku, ale wewnątrz kodu php co powoduje wyświetlenie warninga: nie można wysłać nagłówka.
Można to obejśc stosując buforowanie, ale wtedy ten nagłówek i tak jest wysyłany od razu, a ja chcę aby przekierowanie nastąpiło dopiero w pewnym momencie.

Wygląda to tak, zę jest powiedzmy quiz, osoba odpowiada na pytania i po udzieleniu wszystkich odpowiedzi system sprawdza, czy osoba ma ustawione ActiveCode (ciasteczko), jeśli ma
to skrypt wykonuje się dalej, a jeśli nie ma zostaje przekierowana na stronę rejestracji/logowania.

Jak to zrobić, skoro nie da się za pomocą header location ?
matiit
Javascript i window.location
nospor
Cytat
Można to obejśc stosując buforowanie, ale wtedy ten nagłówek i tak jest wysyłany od razu, a ja chcę aby przekierowanie nastąpiło dopiero w pewnym momencie.
Jeśli użyjesz buforowanie, jak rzekomo piszesz, to wówczas HEADER może używać gdzie ci się zywnie podoba.
maniek99
Rozumiem, że window.location ma być podpięte do przycisku, a to gdzie kieruje ma być sprawdzane przez kod php ?
matiit
kurcze, można to zrobić na tyle sposobów.
Wiem, że średnio pomagam pisząc to, ale: wpisz w google cokolwiek z php header location redirect after echo
Wpisz jakąś kombinacje, tego jest OD GROMA na necie.
maniek99
Cytat(nospor @ 19.04.2013, 16:20:09 ) *
Jeśli użyjesz buforowanie, jak rzekomo piszesz, to wówczas HEADER może używać gdzie ci się zywnie podoba.


No tak, ale on i tak zostanie wysłany od razu, przy wywołaniu danej strony.

Czyli mam:

< kod1 php >
< kod2 php >
< kod3 php >
<header location>
<kod4 php >

To chce, żeby wykonał mi się kod 1-3 a potem nastąpiło przekierowanie (ewentualne), a jak używam ob_start i ob_end_flush to bez względu na wszystko przekierowanie wykonuje się od razu, a nie dopiero po wykonaniu początkowych instrukcji, co ma sens bo jednak headera się nie wyśle jeśli coś jusz wcześniej zostało wysłane, więc tak czy inaczej ten sposób nic mi nie daje.

Cytat(matiit @ 19.04.2013, 16:24:06 ) *
kurcze, można to zrobić na tyle sposobów.
Wiem, że średnio pomagam pisząc to, ale: wpisz w google cokolwiek z php header location redirect after echo
Wpisz jakąś kombinacje, tego jest OD GROMA na necie.


No właśnie tak próbowalem, czyli sposób z buforowaniem, ale to nie działa tak jak chce.
nospor
Przecież kod1 2 i 3 ci się wykonają zanim dojdzie do header.... coś motasz panie kolego.
maniek99
To pewnie dlatego, że próbowałem to wywołać jakby wewnątrz odwołań do klasy.
Wrzuciłem kod tutaj:
http://wklej.se/f92b

Po ostatnim pytaniu wstawiłem ten header, jednak jak mówię on wykonuje się od razu po załadowaniu strony, a chciałbym, żeby dopiero był aktywny po odpowiedzi na ostatnie pytanie.
nospor
....

A na czym polega odpowiedź na ostatnie pytanie? Idzie wówczas submit forma czy coś takiego? Jak tak, to przecież w tym submicie w php będziesz wiedizał czy to było ostatnie pytanie czy nie i wówczas rob ten HEADER.
maniek99
No właśnie tam nie ma typowego submita.
Są pytania, po każdym można kliknąć 'dalej' i mamy kolejne pytanie (wszystko w index.php) po ostanim pytaniu znowu mamy 'dalej'(NextPageButtonName) po którym dostajemy wynik quizui tutaj chciałbym wstawić to przekierowanie.

Ten formularz to tak naprawdę funkcja i dlatego mam problem jak to ugryźć:

  1. function ViewTest() {
  2.  
  3. $this->TakePost();
  4.  
  5. if (isset($_POST['Check'])) {
  6.  
  7. # formularz wyników
  8.  
  9. $this->CheckAnswers();
  10.  
  11. $out = '<form id ="test" action="" method="post">'.BR;
  12. $out .= '<fieldset>'.BR;
  13. $out .= '<legend>'.$this->TestName.' ['.$this->ResultsName.']</legend>'.BR;
  14. $out .= '<ul id="results">'.BR;
  15.  
  16. $CorrectAnswersLenght = round($this->AnswersPercentLenght*$this->CorrectAnswersPercent/100) + 1;
  17. $WrongAnswersLenght = round($this->AnswersPercentLenght*$this->WrongAnswersPercent/100) + 1;
  18. $BlankAnswersLenght = round($this->AnswersPercentLenght*$this->BlankAnswersPercent/100) + 1;
  19.  
  20. $out .= '<li id="CorrectAnswers" style="border-left:'.$CorrectAnswersLenght.'px solid '.$this->CorrectAnswersColor.'">'.$this->CorrectAnswers.' '.$this->CorrectAnswersName.' ('.$this->CorrectAnswersPercent.'%)</li>'.BR;
  21. $out .= '<li id="WrongAnswers" style="border-left:'.$WrongAnswersLenght.'px solid '.$this->WrongAnswersColor.'">'.$this->WrongAnswers.' '.$this->WrongAnswersName.' ('.$this->WrongAnswersPercent.'%)</li>'.BR;
  22. $out .= '<li id="BlankAnswers" style="border-left:'.$BlankAnswersLenght.'px solid '.$this->BlankAnswersColor.'">'.$this->BlankAnswers.' '.$this->BlankAnswersName.' ('.$this->BlankAnswersPercent.'%)</li>'.BR;
  23. $out .= '</ul>'.BR;
  24. $out .= '<input type="hidden" name="TmpAnswers" value="'.$this->TmpAnswers.'" />'.BR;
  25. $out .= '<input type="hidden" name="Answers" value="Check" />'.BR;
  26. $out .= '<div id="buttons">'.BR;
  27. $out .= '<input type="submit" id="ShowAnswers" name="ShowAnswers" value="'.$this->ShowAnswersButtonName.'" />'.BR;
  28. $out .= '</div>'.BR;
  29. $out .= '</fieldset>'.BR;
  30. $out .= '</form>'.BR;
  31.  
  32. } else {
  33.  
  34. #formularz pytań i odpowiedzi
  35.  
  36. $out = '<form id ="test" action="" method="post">'.BR;
  37. $out .= '<fieldset>'.BR;
  38. $out .= '<legend>'.$this->TestName.' ['.$this->PageName.' '.$this->PageNr.'/'.$this->CountPages().']</legend>'.BR;
  39. $out .= '<ul>'.BR;
  40. $out .= $this->ViewCustomList(($this->PageNr - 1) * $this->PointsPerPage + 1, $this->PointsPerPage);
  41. $out .= '</ul>'.BR;
  42. $out .= '<input type="hidden" name="TmpAnswers" value="'.$this->TmpAnswers.'" />'.BR;
  43. if ($this->Answers != '') $out .= '<input type="hidden" name="Answers" value="'.$this->Answers.'" />'.BR;
  44. $out .= '<input type="hidden" name="PageNr" value="'.$this->PageNr.'" />'.BR;
  45. $out .= '<div id="buttons">'.BR;
  46. if ($this->PageNr > 1) $out .= '<input type="submit" id="PrevPage" name="PrevPage" value="'.$this->PrevPageButtonName.'" />'.BR;
  47. if ($this->PageNr < $this->CountPages()) $out .= '<input type="submit" id="NextPage" name="NextPage" value="'.$this->NextPageButtonName.'" />'.BR;
  48. if (($this->PageNr == $this->CountPages()) && ($this->Answers == '')) $out .= '<input type="submit" id="Check" name="Check" value="'.$this->CheckButtonName.'" />'.BR;
  49. $out .= '</div>'.BR;
  50. $out .= '</fieldset>'.BR;
  51. $out .= '</form>'.BR;
  52. }
  53.  
  54. return $out;
  55. }
  56. }
-gosciu-
Czy umie ktoś rozwiązać ten problem?
Pozdrawiam
Turson
Daj normalnie header, a do tego buforowanie koniecznie jak nospor powiedział...
ob_start()
ob_end_flush()
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.