Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]header / przyciski / redirect / funkcje / nie wiem co
tehanu
post
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

  1. setcookie ('my_app_username', '$username', 60);


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:

  1. <form action="plik.php">
...

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


  1. if(isset($_COOKIE["my_app_username"])) {
  2. header('Location: main.php');
  3. }


(plik skryptu nazywa się login.php).

A na samym dole taki (zerżnięty z sieci) formularz:

  1. <form id="register" method="post" action="login.php">
  2. <table cellpadding="3">
  3. <tr><td colspan="2" align="center">Got no account yet? Create it now.</td></tr>
  4. <tr><td>Username:</td><td><input type="text" name="registername" maxlength="12"></td></tr>
  5. <tr><td>Password:</td><td><input type="password" name="password1" maxlength="12"></td></tr>
  6. <tr><td>Confirm password:</td><td><input type="password" name="password2" maxlength="12"></td></tr>
  7. <tr><td colspan="2" align="center"><input type="submit" name="register" value="Create account and log in"></td></tr>
  8. </table>
  9. </form>


I obok drugi do samego logowania.

A po tym ifie sprawdzającym cookie, taki między innymi if:

  1. if(isset($_POST['register'])) {
  2. register();
  3. }


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

  1. $password1 = mysql_real_escape_string($password1);
  2. $password1 = md5($password1);
  3. $sql = "INSERT INTO users (UserName, Password, CharacterId) VALUES ('$username', '$password1', 0)";
  4. setcookie ('mygame_username', '$username', 60);


(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
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 19.09.2025 - 01:30