![]() |
![]() |
![]()
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%) ![]() ![]() |
Cytat = nie używaj ysql_real_escape_string? OK. Czemu? Bo jest w md5 i usunie Ci znaki z hasła - nie zalogujesz się Cytat = Ż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? Może być, ale bez output'ów, returnów i innych wyjściowych, no i startować sesji nie powinno się. Cytat 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? Bezpieczniej dać na długi czas i value = ''; Cytat 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ół? Może, ale nie musi, wtedy nie używasz atrybutu action Ten post edytował toaspzoo 12.06.2011, 19:22:24 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 12.06.2011 Skąd: Polska Ostrzeżenie: (0%) ![]() ![]() |
Może, ale nie musi, wtedy nie używasz atrybutu action (IMG:style_emoticons/default/sad.gif) Widzisz, piszesz tak skrótowo, że nie wiem, co masz na myśli. Np. jak piszesz "wtedy". Napiszę to skrypciątko jeszcze raz od początku, żeby było czysto, i zrobię osobne pliki na te kawałki kodu, w których jest setcookie albo header. Jeśli dalej będzie robiło takie numery, zapytam Cię w pw, czy mogę Ci to wysłać. Najwcześniej za kilka dni - bawię się tym 20 minut dziennie. Tymczasem napisz mi, jeśli możesz, czy w momencie wczytania tego samego pliku po raz kolejny z rzędu (np. przez form action), html i inny output z poprzedniego załadowania tego pliku przestaje się liczyć dla setcookie i header. Bo jeśli nie przestaje się liczyć (choć się tego nie spodziewałam), to będzie jasne, dlaczego daje taki błąd. I może powiedz coś takiego: jeśli chcę, żeby przycisk spowodował wykonanie jakiegoś niewinnego kawałka kodu, tj. takiego, w którym ani setcookie ani header nie ma, czy najbardziej prostolinijnym sposobem na zrobienie tego jest właśnie ponowne załadowanie tego samego pliku .php przyciskiem, a na górze zrobienie
? Czy robi się to jakoś inaczej? tehanu |
|
|
![]() ![]() |
![]() |
Aktualny czas: 11.10.2025 - 00:47 |