Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Problem z ob_start i ob_end_flush();
Kuscik
post
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 19.12.2012

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


Witam

Zrobiłem stronę która wygląda mniej więcej tak

index.php
  1. //ob_start();
  2. include_once 'session.php';
  3. include_once 'navi/header.php';
  4. include_once 'navi/login.php';
  5. include_once 'navi/menu.php';
  6. include_once 'navi/search.php';
  7. include_once 'navi/logo.php';
  8. include_once 'navi/banner.php';
  9. include_once 'navi/contents.php';
  10. include_once 'navi/footer.php';
  11. //ob_end_flush();


login.php w uproszczeniu wygląda tak
  1. <JAKIS KOD>
  2. <div class="loginform" id="loginform">
  3.  
  4. <?php
  5. if (isset($_SESSION[id_u])) {
  6. echo 'jestes zalogowany';
  7. } else {
  8. if (isset($_POST['email'])) {
  9. $email = $_POST['email'];
  10. $email = strip_tags($email);
  11. }
  12. if (isset($_POST['pass'])) {
  13. $pass = $_POST['pass'];
  14. $pass = strip_tags($pass);
  15. }
  16. if (isset($_POST['pamietaj'])) {
  17. $pamietaj = $_POST['pamietaj'];
  18. $pamietaj = strip_tags($pamietaj);
  19. }
  20.  
  21. if (isset($email) && isset($pass) && strlen($email) > 0 && strlen($pass) > 0) {
  22. $isSprawdzLogowanieOK = sprawdzLogowanie($email, $pass);
  23. }
  24. if ($isSprawdzLogowanieOK) {
  25.  
  26. $id = getUserIdByEmail($email_u);
  27. $_SESSION['id_u'] = $id;
  28.  
  29. if ($pamietaj == 'tak') {
  30. $hash = 'xxx';
  31. setcookie('pamietaj', $id . ': ' . $hash, time() + 60 * 60 * 24 * 2);
  32. }
  33. header(' Location: index.php');
  34. } else {
  35. ?>
  36.  
  37. <form class="loguj" name="login" action="" method="POST">
  38. <p class="login">Email</p>
  39. <input name="email" class="login" id="login" type="text"/><br/>
  40. <p class="pass">Hasło</p>
  41. <input name="pass" class="pass" id="pass" type="password" /><br/>
  42. <input type="checkbox" name="pamietaj" class="pamietaj" value="tak" /></p>
  43. <p>Pamiętaj</p><br/>
  44.  
  45. <input name="submit" class="submit" id="submit" value="Loguj" type="submit"/>
  46. </form>
  47. <?php
  48. }
  49. }
  50. ?>
  51. </div>
  52. <JAKIS KOD>


Chodzi o to że jeśli przy logowaniu użytkownik zaznaczy checkbox to po zalogowaniu jest tworzone cookie a następnie strona jest przeładowywana przez header aby wyświetli ze jesteśmy już zalogowani , jednak przed setcookie oraz przez header było już coś wyświetlone na stronie wiec postanowiłem użyć ob_start(); i ob_end_flush();
wkleiłem go w indeksie tak jak jest teraz tylko nie zakomentowany i wszystko chodziło dobrze, ciastko się dodawało strona się prze kierunkowała, dodawały się i usuwały inne ciastka których już tu nie wymieniam, strona się przeładowywała po zalogowaniu, wszystko działało ok... zacząłem zajmować się tym co ma być dokładnie wyświetlone zamiast tekstu "jesteś zalogowany", chciałem się zalogować i sprawdzić czy wszystko ok... i nagle całkiem przestało działać logowanie, po wpisaniu poprawnego hasła strona nadal ładuje się z formularzem logowania, a cookie się nie ustawia.. gdy za komentowałem ob_start(); i ob_end_flush(); wszystko wróciło do normy tzn logowanie działa ale oczywiście nie działa dodawanie ciastka i przeładowanie strony.
Co się mogło stać dlaczego wcześniej wszystko działało dobrze a nagle przestało działać mimo że tylko zmieniłem wyświetlany tekst po zalogowaniu.
Czy może źle wstawiam ob_start(); i ob_end_flush(); może trzeba to wstawić w inne miejsca żeby dobrze działało?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
zegarek84
post
Post #2





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


patrząc na kod i że wszystko działało (może efekt cache przeglądarki chwilowo i nie zauważyłeś błędu zaraz po zmianie) oraz na ifa gdzie powinno wejść po zalogowaniu to zacznę wróżyć z fusów i spytam się, czy korzystasz z jakiegoś systemu kontroli wersji?? bo jeśli nie to gdzie masz zdefiniowaną pewną zmienną stałą (a jeśli to dobra praktyka nakazuje pisać takie zmienne w PHP z dużych liter)
  1. if (isset($_SESSION[id_u])) {

ale ja tylko hobbystycznie piszę i ostatnio częściej w C++ niż w PHP ;p

ps.
a propo systemu kontroli wersji jeśli nie korzystasz to np. bez lini komend w netbeans z git'a fajnie się korzysta... a jeśli pominiesz na początek grubszy temat jak gałęzie i wspólne repozytorium a pozostaniesz przy wersjonowaniu na dysku lokalnym to nawet z linii komend nie wiele jest do zapamiętania i przeczytania jeśli chodzi o przykłady... a jeśli chodzi o szybki edytor np. bez myszki to sobie zacząłem chwalić i zgłębiam ostanio vim'a (jeśli korzystasz "normalnie" z klawiatury jak to się powinno to warto przyjrzeć się temu narzędziu... a jeśli nie to warto poświęcić czas na "normalne" pisanie na klawiaturze ]:->)

pozdro...

Ten post edytował zegarek84 25.02.2013, 22:59:48
Go to the top of the page
+Quote Post
Kuscik
post
Post #3





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 19.12.2012

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


Cytat(zegarek84 @ 25.02.2013, 22:53:28 ) *
[...] to gdzie masz zdefiniowaną pewną zmienną stałą (a jeśli to dobra praktyka nakazuje pisać takie zmienne w PHP z dużych liter)
  1. if (isset($_SESSION[id_u])) {

ale ja tylko hobbystycznie piszę i ostatnio częściej w C++ niż w PHP ;p

[...]


O którą zmienną stałą chodzi?
Kod tu pokazany jest tylko wycinką całego kodu ponieważ cały jest dość długi...

Jestem raczej początkujący i musiałem dwa razy przeczytać o czym do mnie napisałeś i wygooglować czym jest system kontroli wersji (IMG:style_emoticons/default/smile.gif) nie nie korzystam z tego... piszę w NetBeans

Co do tego że może działało przez cache przeglądarki odpada, ponieważ logowanie działa nadal tylko jeśli zakomentuje ob... wtedy nie działa tylko dodawanie ciastek i przeładowanie strony ponieważ wcześniej jest już coś wyświetlane na stronie... ale logowanie działa
Poza tym jak skończyłem z tym logowaniem i działało to sporo czasu sprawdzałem na dwóch przeglądarkach czy wszystko działa poprawnie - czy zapamiętuje użytkownika, zapisuje cookie, zmienia cookie co określony czas, zmienia odpowiednie dane w bazie, usuwa cookie, zmienia id sesji itp itd... wszystko działało ładnie dopóki nie zacząłem pisać dalej co jest własnie dziwne... no nic muszę przejrzeć cały kod linijka po linijce :/


ber32
nie jest to wina
$pamietaj = strip_tags($pamietaj);
bez tego jest to samo, poza tym zaznaczenie pola "pamiętaj" nie jest obowiązkowe i nie chce się logować ani przy zaznaczonym ani odznaczonym polu
Go to the top of the page
+Quote Post

Posty w temacie


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 Aktualny czas: 10.10.2025 - 17:15