![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 12.06.2011 Skąd: Polska Ostrzeżenie: (0%) ![]() ![]() |
Hej.
Czytałam http://phpedia.pl/wiki/Cannot_add_header_i...rs_already_sent i parę innych stron na ten temat i wydaje mi się, że rozumiem - przed header / setcookie / paroma innymi takimi funkcjami nie może się pojawić żadnen output = żaden znacznik html ani zwykły tekst. Dziesiąty raz patrzę na swój skrypt i nie widzę, gdzie on ma niedozwolony output przed wierszem, na którym się konsekwentnie wysypuje z tym błędem, a który brzmi niewinnie Wszystkie outputy w tym pliku są albo poniżej, albo w ifach, które nie odpalają. Chętnie pokażę cały, ale zrobiło się go 100 wierszy, to bez zachęty wklejać nie będę. Miała to być strona umożliwiająca login albo rejestrację. Boję się, że nie wiem jakichś podstawowych zupełnie dla Was rzeczy o PHP. Poprawcie mnie gdzieś, proszę. Wyszło mi, że nie da się napisać przycisku, wywołującego funkcję - skoro cały kod wykonywany jest na serwerze. Da się tylko zrobić przycisk, przekierowujący: ... To może być inny plik, jakiś verifylogin.php. Ale jeśli chcę, żeby jak najwięcej działo się w jednym pliku, co mi się wydaje dobrym ćwiczeniem przed pisaniem środka aplikacji, to musi być przekierowanie na siebie. OK. To tam, gdzie kończą się definicje funkcji, a zaczyna właściwy skrypt, mam
(plik skryptu nazywa się login.php). A na samym dole taki (zerżnięty z sieci) formularz: I obok drugi do samego logowania. A po tym ifie sprawdzającym cookie, taki między innymi if:
Funkja register() ma sprawdzać, czy hasła się zgadzają, czy takiego użytkownika jeszcze nie ma, a jeśli wszystko jest w porządku, zrobić właśnie
(Obsługi formularza do samego logowania jeszcze nie robiłam. Baza jest utworzona osobnym skryptem i sprawdzona w phpMyAdmin. $username było eskejpowane wcześniej. Czas ustawiony celowo na razie tylko na 60.) Jedyne outputy wewnątrz register() to kilka różnych or die, które jednak nie odpalają, ma się rozumieć, skoro w ogóle dochodzi do tego wiersza z setcookie(). Czego nie rozumiem? Czy w momencie ponownego załadowania strony (<form id="register" method="post" action="login.php">) cały ten html jest w jakimś sensie PRZED moim setcookie, jakby zostawał sprzed przeładowania? Jak w takim razie robi się rzecz wydawałoby się najprostszą na świecie - uruchomienie kodu przyciskiem? Do samego logowania i rejestrowania mogę ostatecznie zrobić tak, jak było w tutorialu, osobny plik .php do każdej czynności. Ale czy to nie jest jakiś przerost i przesada? Gdzie tu jest ten niedozwolony output PRZED setcookie()? Może jest tak - ale błagam, niech mi to ktoś explicite potwierdzi albo wyprowadzi mnie z błędu - że wszelkie setcookie (i rzeczy związane z session) muszą być w osobnych plikach, a w tym samym pliku robi się (przy pomocy if(isset($_POST[] if potem <form action...> z przekierowaniem na samo siebie) tylko niewinne czynności typu grzebanie w bazie i wyświetlanie danych? Każdemu chętnemu podeślę całość do wglądu. Pozdrawiam, tehanu |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 778 Pomógł: 84 Dołączył: 29.07.2010 Skąd: Gliwice / Pławniowice Mistrz niezmordowanej klawiatury. Ostrzeżenie: (20%) ![]() ![]() |
hasło koduj w md5 i nie uzywaj do hasła żadnych funkcji poza md5
Każda czynność może być w jednym pliku Według tego, co napisałaś, to cookie ustala się po zalogowaniu/autoryzacji. a cookie możesz przecież zawsze wyczyścić nadając mu wartość '' setcookie ('mygame_username', '', 60); Przed header() nie może być nic ! |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 12.06.2011 Skąd: Polska Ostrzeżenie: (0%) ![]() ![]() |
Cześć. Wstępnie bardzo dziękuję. Porządnie podziękuję Ci, jak zrozumiem, jeśli do tego kiedyś dojdzie (IMG:style_emoticons/default/wink.gif) .
hasło koduj w md5 OK. Jest w md5. Cytat i nie uzywaj do hasła żadnych funkcji poza md5 = nie używaj ysql_real_escape_string? OK. Czemu? Cytat Każda czynność może być w jednym pliku Nie rozumiem. Może, ale czy powinna? Czy namawiasz mnie, żeby formularz register miał action="register.php", w którym to register.php nie będzie ani jednego taga, samo php z góry na dół? Cytat Według tego, co napisałaś, to cookie ustala się po zalogowaniu/autoryzacji. Nie rozumiem. To jest moja pierwsza przymiarka do php większa niż helloworld. Chodziło mi o taki efekt, żeby kod z pliku login.php wykonał się kilka razy, idealnie tak: - Nie są ustawione ani cookie, ani $_POST['register'], więc wyświetla się html z formularzem. Użytkownik grzecznie wypełnia formularz i wciska register, skrypt się przeładowuje; - Tym razem cookie dalej nie jest ustawione, ale $_POST['register'] już tak, więc wykonuje się funcja register, która tworzy rekord w bazie, ustawia cookie, po czym - dopiero teraz, PO setcookie, choć tego kawałka jeszcze nie napisałam - robi <a href="login.php>...</a> . Użytkownik grzecznie w to klika, więc skrypt się ponownie przeładowuje; - Tym razem nie wiem, w jakim stanie jest $_POST['register'], ale od razu na początku zaskakuje if(isset(setcookie())) i robi - znów PRZED pierwszym outputem - header z przekierowaniem na member area. Cytat a cookie możesz przecież zawsze wyczyścić nadając mu wartość '' setcookie ('mygame_username', '', 60); (IMG:style_emoticons/default/smile.gif) OK, jak będę pisała logout. Ale widziałam taką radę, żeby ustawić z ujemnym czasem wygaśnięcia. To będzie jakaś różnica czy na jedno wyjdzie? Cytat Przed header() nie może być nic ! = Żadnego echo ani ?>, prawda? Bo kodu php może być przed header ile chce? Co za sens miałoby przekierowywanie od razu w pierwszym wierszu kodu? |
|
|
![]() ![]() |
![]() |
Aktualny czas: 17.10.2025 - 04:28 |