Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> session_start();
waqmaz
post 1.02.2011, 20:07:59
Post #1





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 22.01.2011
Skąd: Murowana Goślina

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


Wiem, że już było to milion, razy, dlatego nie proszę o rozwiązanie tego, a jedynie o sposób w jaki inaczej mogę wysłać session start.

Powiedzmy, że mój index.php wygląda tak:

  1. <div class="kontener_glowny">
  2. <?php if($_GET['action']!=NULL) { require $_GET['action'] . ".php"; } else { require "jakis_tam_plik.php"; } ?>
  3. </div>

Teraz w index.php powiedzmy klikam sobie w link o nazwie rejestracja, którego kod wygląda tak:
  1. <a href="index.php?action=kontener_rejestracji">Rejestracja</a>

No i teraz formularz rejestracji zostaje wyświetlony w index.php w oknie głównym.
Kiedy wypełnię formularz i wduszę submit, to przesyłają się dane do pliku, w którym jest sesia - tak wygląda przesłanie zawartych w text-boxach informacji po naciśnięciu submit:
  1. <form action="index.php?action=rejestracja" method="post">

I wszystko się udało: w index.php w kontener_glowny zostało wyświetlone: Rejestracja pomyślna!, do bazy danych mySQL został dodany nowy użytkownik, tylko jeden upierdliwy błąd powstaje, z którym nie mogę sobie poradzić już od 3 dni i strasznie mnie to denerwuje worriedsmiley.gif ;<.
  1. Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\index.php:86) in C:\xampp\htdocs\nowa_rejestracja.php on line 2

Odrazu powiem, że ten błąd pojawia się mimo, że wszystko działa - użytkownik został dodany do bazy i w ogóle cały skrypt zadziałał jak należy.
Teraz chcę się zapytać jak to można naprawić, bo już nie mam nerwów. Jak naprawdę działa funkcja ob_start(); i ob_clean(); i czy one po prostu ukrywają błąd, czy usuwają?
Wiem, że poprzez dodanie
  1. @
przed session_start(); wtedy błąd zostanie stłumiony (niewidoczny), ale ja nie chcę ich tłumić, tylko eliminować. Nie mam spacji przed session_start ani po <?php. Specjalnie zmieniłem zapis z UTF-8 na ANSI, ale błąd nadal istnieje. Czy może mi ktoś powiedzieć jakie są skutki tego błędu i czy ewentualnie można go usunąć? Rozdaję punkciki ( heh... na taką małą zachętę), ale na prawde będę bardziej wdzięczny za pomoc i proszę niech nie usuwają tego tematu admini, gdyż, żadna z innych odpowiedzi w podobnych tematach nie były mi pomocne ;<

Ten post edytował waqmaz 1.02.2011, 20:09:42
Go to the top of the page
+Quote Post
Piogola
post 1.02.2011, 20:11:43
Post #2





Grupa: Zarejestrowani
Postów: 151
Pomógł: 36
Dołączył: 1.02.2011
Skąd: Warszawa

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


Sprawdź czy nie masz żadnych znaków przed zainicjowaniem sesji

  1. <?php
  2. // dobrze
  3. ?>


  1. <?php
  2. // źle, ponieważ spacja jest
  3. ?>


Jeśli to nie to, wklej tutaj plik rejestracja.php

Ten post edytował Piogola 1.02.2011, 20:13:10


--------------------
Google Manual
Go to the top of the page
+Quote Post
waqmaz
post 1.02.2011, 20:13:27
Post #3





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 22.01.2011
Skąd: Murowana Goślina

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


Cytat(Piogola @ 1.02.2011, 20:11:43 ) *
Sprawdź czy nie masz żadnych znaków przed zainicjowaniem sesji

Przecież napisałem, że nie mam blinksmiley.gif
Dodam jeszcze, że te 3 warunki są spełnione:
  1. 1. session_start() na samiuteńkim pocz. skryptu/strony
  2. 2. ob_start(); zaraz po session_start(); i na końcu ob_end_flush();
  3. 3. Kodowanie UTF-8 bez BOM


Właściwie to chcę się dowiedzieć czym grozi ten error ( co on objaśnia (jakie są jego skutki)), bo naprawić się tego raczej nie da.
Po co ci mój plik rejestracji? Napisałem, że zadziałał skrypt, że w bazie są nowi użytkownicy, tylko przy tym jest błąd, a ja chcę poznać jakie mogą wystąpić przez to skutki, że ten błąd się pojawił.

Ten post edytował waqmaz 1.02.2011, 20:19:29
Go to the top of the page
+Quote Post
Noidea
post 1.02.2011, 22:28:11
Post #4





Grupa: Zarejestrowani
Postów: 226
Pomógł: 61
Dołączył: 20.08.2010

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


Cytat
Kod
headers already sent (output started at C:\xampp\htdocs\index.php:86) in C:\xampp\htdocs\nowa_rejestracja.php on line 2


Błąd objaśnia, że najpierw w linii 86 pliku index.php wysłałeś do przeglądarki jakieś dane, a potem w zaincludowanym pliku nowa_rejestracja.php w linii 2 próbowałeś wysłać nagłówki wykonując session_start.
Poczytaj o podstawach protokołu HTTP (wszystkie nagłówki muszą zostać wysłane zanim zacznie sie wysyłać treść strony).

Włączenie buforowania wyjścia załatwia sprawę, bo treść tak na prawdę nie jest na bieżąco wysyłana do przeglądarki, tylko gromadzona jest w pamięci na serwerze. Wysyłana jest dopiero na samym końcu skryptu, albo po wywołaniu funkcji typu ob_end_flush.
Ty buforowanie wyjścia włączyłeś zbyt późno.


--------------------
Go to the top of the page
+Quote Post
waqmaz
post 2.02.2011, 00:57:47
Post #5





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 22.01.2011
Skąd: Murowana Goślina

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


Linia 86 pliku index:
<?php if($_GET['action']!=NULL) { require $_GET['action'] . ".php"; } else { require "jakis_tam_plik.php"; } ?>

Dzięki stary, o mniej więcej taką odpowiedź mi chodziło. A słuchaj to jakim cudem mogę zrobić linki używając action, aby inne pliki zawierające session mogły być odpalane w pliku, w którym był zawarty link?
SCHEMAT:
s=strona
ss=strona z session start90;
l=link

s+l=ss
a potem ss przeslane do s.
czyli np. w index.php klikam rejestruj i to mnie przenosi do rejestracja.php w ktorym jest sessionstart();, a ta rejestracja.php wyswietla sie windex.php. z kolei po wykonaniu skryptu w rejestracja.php tresc typu: zalogowany! zostaje wyswietlone tez w index.php ale bez tego blędu, który dot. session start can't sent session blah blah blah? smile.gif o mi to dziala,tylko jest ten blad(warning) w dodaku ;/

Ten post edytował waqmaz 2.02.2011, 02:54:33
Go to the top of the page
+Quote Post
bleblok
post 2.02.2011, 08:52:49
Post #6





Grupa: Zarejestrowani
Postów: 18
Pomógł: 6
Dołączył: 15.09.2009

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


Może wystarczy, że odpalisz session_start na początku index.php?
Go to the top of the page
+Quote Post
waqmaz
post 2.02.2011, 11:16:49
Post #7





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 22.01.2011
Skąd: Murowana Goślina

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


ale ja chciałbym je wywołać z innego pliku. btw. co znaczy na początku? Czyli pod:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  3. <head>
? a moiże pod head?

a moge wywołać session start z innego pliku w index.ph za pomocą require? czy uzna, że to require zostało wysłane przed session_start i znów będzie ten error? ; <

Ten post edytował waqmaz 2.02.2011, 11:18:38
Go to the top of the page
+Quote Post
Noidea
post 2.02.2011, 11:46:01
Post #8





Grupa: Zarejestrowani
Postów: 226
Pomógł: 61
Dołączył: 20.08.2010

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


1.session_start wysyła do przeglądarki nagłówki
2.
Cytat("Noidea")
Poczytaj o podstawach protokołu HTTP (wszystkie nagłówki muszą zostać wysłane zanim zacznie sie wysyłać treść strony).

3. To:
Cytat("waqmaz")
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
również jest treść strony


widzisz już rozwiązanie?


--------------------
Go to the top of the page
+Quote Post
waqmaz
post 2.02.2011, 13:03:14
Post #9





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 22.01.2011
Skąd: Murowana Goślina

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


1. Chodzi o header('location: strona.php'); zamiast require, czy o to, aby session_start(); po prostu było na samiutkim początku?
2. przeczytałem, ale nie zbyt rozumiem ; /
3.
  1. <?php
  2. header('location: index.php?action=kontener_rejestracji');
  3. ..kod..
  4. ?>
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  6. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  7. <head>
czyż tak?
Dzięki stary, już i tak wiele mi pomogłeś. Jednak nadal nie mam pojęcia jak zrobić, aby wszystkie sesje był wyświetlane w index.php w tym samym oknie po kliknięciu na różne linki ; /
Nie zbyt obczajam to http ;/

DOBRA TO MOŻE INACZEJ: NAPISAŁEM NA POTRZEBY NAPRAWIENIA MOJEGO PROBLEMU KRÓCIUTKI PRZYKŁAD REJESTRACJI. Mam nadzieję, że znajdzie się ktoś kto przetestuje to i pomoże mi, albo chociaż zechce heh... Naprawdę mi na tym zależy. Zacznijmy:

Index.php:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  3. <head>
  4. <link rel="stylesheet" href="style.css" type="text/css" />
  5. </head>
  6. <body>
  7.  
  8. <div class="kontener_glowny">
  9. <a href="index.php?action=kontener_rejestracji">Rejestracja</a>
  10. <?php if($_GET['action']!=NULL) { require $_GET['action'] . ".php"; } else { require "tekst_kontener_glowny.php"; } ?>
  11. </div>
  12.  
  13. </body>
  14. </html>


tekst_kontener_glowny.php:
  1. <h1>Kliknij w link Rejestracja!</h1>


kontener_rejestracji.php:
  1. <form action="index.php?action=nowa_rejestracja" method="post">
  2.  
  3. <p>Nazwa użytkownika:</p>
  4. <input type="text" name="nazwa_uz" size="16" maxlength="16" />
  5.  
  6. <p>Hasło:</p>
  7. <input type="password" name="haslo" size="16" maxlength="16" />
  8.  
  9. <p>Wprowadź hasło ponownie:</p>
  10. <input type="password" name="haslo2" size="16" maxlength="16" />
  11.  
  12. <input type="submit" value="Rejestruj">
  13. </form>


nowa_rejestracja.php
  1. <?php
  2.  
  3. echo '<h1>Rejestracja zakonczona pomyslnie jednak z tym Warning:</h1>';
  4. ?>


style.css:
  1. .kontener_glowny{
  2. margin: auto;
  3. width: 850px;
  4. height: 545px;
  5. background: yellow;
  6. }


No i wyskakuje ten błąd ; / Wie ktoś jak inaczej przesłać sesję do index.php? =/
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\index.php:10) in C:\xampp\htdocs\nowa_rejestracja.php on line 2

Ten post edytował waqmaz 2.02.2011, 14:14:10
Go to the top of the page
+Quote Post
Piogola
post 2.02.2011, 15:53:56
Post #10





Grupa: Zarejestrowani
Postów: 151
Pomógł: 36
Dołączył: 1.02.2011
Skąd: Warszawa

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


Ustaw session_start na samym początku pliku index.php! Połącze twoje dwa pliki w jeden i zobacz jak on wygląda

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  3. <head>
  4. <link rel="stylesheet" href="style.css" type="text/css" />
  5. </head>
  6. <body>
  7.  
  8. <div class="kontener_glowny">
  9. <a href="index.php?action=kontener_rejestracji">Rejestracja</a>
  10. <?php
  11.  
  12. echo '<h1>Rejestracja zakonczona pomyslnie jednak z tym Warning:</h1>';
  13. ?>
  14. </div>
  15.  
  16. </body>
  17. </html>


--------------------
Google Manual
Go to the top of the page
+Quote Post
waqmaz
post 2.02.2011, 16:42:23
Post #11





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 22.01.2011
Skąd: Murowana Goślina

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


Nie działa, też to samo. Warning blah blah blah : (
Go to the top of the page
+Quote Post
osl
post 2.02.2011, 16:51:26
Post #12





Grupa: Zarejestrowani
Postów: 260
Pomógł: 41
Dołączył: 6.04.2009
Skąd: Gdańsk/okolice

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


Myślę, że Piogola chciał Ci zaprezentować, jak Twoje pliki wyglądają z punktu widzenia interpretera PHP, a nie gotowe rozwiązanie.
Jak zapewne widzisz, session_start nie jest na początku index.php, tylko w środku. Po wysłaniu danych do przeglądarki.
Go to the top of the page
+Quote Post
waqmaz
post 2.02.2011, 17:09:37
Post #13





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 22.01.2011
Skąd: Murowana Goślina

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


W ten sposób nigdy to nie zadziała, gdyż jest to logicznie sprzeczne. Trzeba inaczej jakoś to zrobić (zapewne za pomocą java script, lub ajax), których to dobrze nie znam. Btw. nawet jak dam na samej górze <?php session_start(); ?> to nie działa.
Go to the top of the page
+Quote Post
osl
post 2.02.2011, 17:17:10
Post #14





Grupa: Zarejestrowani
Postów: 260
Pomógł: 41
Dołączył: 6.04.2009
Skąd: Gdańsk/okolice

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


Nie bardzo widzę, gdzie to jest sprzeczne.
Cytat
Btw. nawet jak dam na samej górze <?php session_start(); ?> to nie działa.
czyli co się dzieje? albo inaczej - co oczekujesz żeby się działo? żaden ajax czy tym bardziej javascript nie ma tu nic do rzeczy.
Go to the top of the page
+Quote Post
waqmaz
post 2.02.2011, 18:18:20
Post #15





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 22.01.2011
Skąd: Murowana Goślina

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


Osl jesteś moim bogiem!!!

Ten post edytował waqmaz 2.02.2011, 18:18:37
Go to the top of the page
+Quote Post
osl
post 2.02.2011, 18:20:28
Post #16





Grupa: Zarejestrowani
Postów: 260
Pomógł: 41
Dołączył: 6.04.2009
Skąd: Gdańsk/okolice

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


Eeee.... nie bardzo wiem dlaczego winksmiley.jpg
Wszelkie thanks należą się moim przedmówcom, może powiedziałem innymi słowami ale jednak to samo smile.gif

Pozdrawiam
Go to the top of the page
+Quote Post
waqmaz
post 3.02.2011, 12:15:47
Post #17





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 22.01.2011
Skąd: Murowana Goślina

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


session_start(); musi byc na samym poczatku indexu dlatego poniewaz korzysta ze skryptu action umieszczonym w index.php, ktory odwoluje skrypt rejestracji do innego pliku, ktory z kolei pobiera action z index, ktory z kolei musi pierw pobrac session_start(); a przy okazji rejestracje, a w dodatku z rejestracji musi byc session_start(); usuniete gdyz pobiera je z index.php : ) Prościej się tego nie da wytłumaczyć, dziękuję wszystkim. dostałęś pomógł, bo najprościej mi to pokazałeś.

Ten post edytował waqmaz 3.02.2011, 12:16:43
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: 18.07.2025 - 06:04