Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Jak zastąpić wysłanie headera (przekierować na stronę) w środku kodu php ?
maniek99
post 19.04.2013, 15:16:18
Post #1





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 22.03.2013

Ostrzeżenie: (0%)
-----


  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 ?
Go to the top of the page
+Quote Post
matiit
post 19.04.2013, 15:17:55
Post #2





Grupa: Zarejestrowani
Postów: 365
Pomógł: 70
Dołączył: 5.04.2009

Ostrzeżenie: (0%)
-----


Javascript i window.location
Go to the top of the page
+Quote Post
nospor
post 19.04.2013, 15:20:09
Post #3





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
maniek99
post 19.04.2013, 15:21:57
Post #4





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 22.03.2013

Ostrzeżenie: (0%)
-----


Rozumiem, że window.location ma być podpięte do przycisku, a to gdzie kieruje ma być sprawdzane przez kod php ?
Go to the top of the page
+Quote Post
matiit
post 19.04.2013, 15:24:06
Post #5





Grupa: Zarejestrowani
Postów: 365
Pomógł: 70
Dołączył: 5.04.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
maniek99
post 19.04.2013, 15:28:08
Post #6





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 22.03.2013

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
nospor
post 19.04.2013, 15:28:17
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Przecież kod1 2 i 3 ci się wykonają zanim dojdzie do header.... coś motasz panie kolego.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
maniek99
post 19.04.2013, 15:37:43
Post #8





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 22.03.2013

Ostrzeżenie: (0%)
-----


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.

Ten post edytował maniek99 19.04.2013, 15:38:11
Go to the top of the page
+Quote Post
nospor
post 19.04.2013, 15:42:16
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




....

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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
maniek99
post 19.04.2013, 15:54:21
Post #10





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 22.03.2013

Ostrzeżenie: (0%)
-----


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. }


Ten post edytował maniek99 19.04.2013, 15:59:36
Go to the top of the page
+Quote Post
--gosciu--
post 10.09.2013, 10:53:28
Post #11





Goście







Czy umie ktoś rozwiązać ten problem?
Pozdrawiam
Go to the top of the page
+Quote Post
Turson
post 10.09.2013, 12:47:49
Post #12





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


Daj normalnie header, a do tego buforowanie koniecznie jak nospor powiedział...
ob_start()
ob_end_flush()
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.07.2025 - 12:41