ďťż

[php] Bład w skrypcie logowania

       

Podstrony


telcocafe

Witam! Mam taki sam problem. Sprawdzałem kod dziesiątki razy, niczego przez "session_start()" nie ma. Wcześniej (przed zmianą kodowania na utf-8) kod działał. Po zmianie wywaliło błąd. Przestawiłem na UTF-8 bez BOM. Ostrzeżenie znikło, ale kod dalej nie działa, tak jak powinien tzn. nie mogę sie zalogować.

movie1.php
<?php session_start(); $_SESSION['username'] = $_POST['name']; $_SESSION['userpass'] = $_POST['pass']; $_SESSION['authuser'] = 0; if (($_SESSION['username'] == 'Marcin') and ($_SESSION['userpass'] == '123456')) { $_SESSION['authuser'] = 1; } else { echo "Przepraszamy, ale nie masz uprawnień do zoaczenia tej strony"; exit(); } ?> </html> <head> <title>Znajdź mój ulubiony film</title> <meta http-equiv="Content-type" content="text/html; charset=UTF-8" /> <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8"/> </head> <body> <?php include "header.php"; $myfavmovie = urlencode("Żywot Briana"); echo "<a href='moviesite.php?favmovie=$myfavmovie'>"; echo "Kliknij tutaj, aby zobaczyć informacje o moim ulubionym filmie!"; echo "</a>"; echo "<br>"; echo "<a href='moviesite.php?movienum=5'>"; echo "Kliknij tutaj, aby zobaczyć informacje o 5 moich ulubionych filmach."; echo "</a>"; echo "<br>"; echo "<a href='moviesite.php?movienum=10'>"; echo "Kliknij tutaj, aby zobaczyć informacje o 10 moich ulubionych filmach."; echo "</a>"; ?> </body> </html>

login.php
<?php session_unset(); ?> <html> <head> <title>Proszę się zalogować</title> <meta http-equiv="Content-type" content="text/html; charset=UTF-8" /> <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8"/> </head> <body> <?php include "header.php"; ?> <form method="post" action="movie1.php"> <p>Wpisz nazwę użytkownika: <input type="text" name="user"> </p> <p>Wpisz hasło: <input type="password" name="pass"> </p> <p><input type="submit" name="Submit" value="Wyślij"></p> </form> </body> </html>

moviesite.php
<?php session_start(); // Sprawdzam czy uzytkownik zalogował się podając właście hasło i nick. if ($_SESSION['authuser'] != 1) { echo "Przepraszamy, ale nie masz uprawnień do zobaczenia tej strony."; exit(); } ?> </html> <head> <title>Moje filmy</title> <meta http-equiv="Content-type" content="text/html; charset=UTF-8" /> <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8"/> </head> <body> <?php include "header.php"; function listmovies_1() { echo "1. Żywot Briana<br>"; echo "2. Szarże<br>"; echo "3. Życie biurowe<br>"; echo "4. Monty Python i Swięty Graal<br>"; echo "5. Matrix<br>"; } function lismovies_2() { echo "6. Terminator<br>"; echo "7. Gwiezdne Wojny<br>"; echo "8. Bliskie spotkania trzeciego stopnia<br>"; echo "9. Trzynaście świeczek<br>"; echo "10. Golfiarze<br>"; } if (isset($_REQUEST['favmovie'])) { echo "Witaj na stronie użytkowniku "; echo $_SESSION['username']; echo "!<br>"; echo "Mój ulubiony film to "; echo $_REQUEST['favmovie']; echo ".<br>"; $movierate = 5; echo "Moja ocena dla tego filmu wynosi: "; echo $movierate; echo".<br>"; } else { echo "Lista "; echo $_REQUEST['movienum']; echo " moich ulubionych filmów:<br>"; listmovies_1() if ($_REQUEST['movienum'] == 10) listmovies_2(); } ?> </body> </html>
Prosiłbym o sprawdzenie kodu.



Szkoda, że nie pokazałeś zrzutu wyniku. Ale mnie się raczej wydaje tutaj coś nie tak (później dokładniej sprawdze kod):

if (($_SESSION['username'] == 'Marcin') and ($_SESSION['userpass'] == '123456')) { $_SESSION['authuser'] = 1; } else { echo "Przepraszamy, ale nie masz uprawnień do zoaczenia tej strony"; exit(); } ?> </html>

Czy znacznik </html> nie powinien być jeszcze w skrypcie? Bo z tego co tutaj widze, to nawet gdy się zalogujesz, to zamykasz stronę i reszta dokumentów się nie wyświetli.
Powinno być raczej tak:

if (($_SESSION['username'] == 'Marcin') and ($_SESSION['userpass'] == '123456')) { $_SESSION['authuser'] = 1; } else { echo "Przepraszamy, ale nie masz uprawnień do zoaczenia tej strony"; exit(); } [b]</html> ?>[/b]

Tak samo w pozostałej części kodu. Spróbuj a jak nie (i nikt wczesniej nie napisze rozwiązania) to sprawdze kod na własnym serwerze.

Ciągle to samo :(. Wcześniej wyrzucało mi:

Cannot send session cookie - headers already sent
Cannot send session cache limiter - headers already

Ale przez session_start() nic nie ma i nie było.

A sprawdz przy przed <?php na poczatku pliku nie ma żadnych spacji, tabulatorów itd.



Zamiast się męczyć wstaw ob_start() i nie będzie problemów. Tak poza tym, coś te błędy takie lakoniczne... A może to w pliku header.php jest jakiś błędny kod?


A sprawdz przy przed <?php na poczatku pliku nie ma żadnych spacji, tabulatorów itd.
Tak, sprawdzałem kilkadziesiąt razy. I nic...

Po primo, winą ostrzeżenia jak sam zauważyłeś jest korzystanie z BOM, więc po prostu z niego nie korzystaj.
Po secundo, spróbuj zamienić ten fragment:
$_SESSION['username'] = $_POST['name']; $_SESSION['userpass'] = $_POST['pass']; $_SESSION['authuser'] = 0; if (($_SESSION['username'] == 'Marcin') and ($_SESSION['userpass'] == '123456')) {
na
if (($_POST['name'] == 'Marcin') and ($_POST['pass'] == '123456')) {

OK, gdzie odpalasz ten skrypt? localhost czy wirtualny?

Ustawiłem UTF-8 i oto rezultat...

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\movie1.php:1) in C:\xampp\htdocs\movie1.php on line 2
Przepraszamy, ale nie masz uprawnień do zoaczenia tej strony


Na localhost... Ale wcześniej było OK, dopóki nie zmieniłem kodowania.
Użytkownik rys.marcin edytował ten post 07 czerwiec 2008, 14:14
Spróbuj otworzyć plik zwykłym notatnikiem i skasować ew. znaki przed <?php i między <?php a session_start() i potem dostaw spację/nową linię.

@DOWN: Być może edytor coś sobie dodał.
Użytkownik Lupinek edytował ten post 07 czerwiec 2008, 22:32

[...] Sprawdzałem kod dziesiątki razy, niczego przez "session_start()" nie ma. [...]
Już to robiłem...

Czyżby XAMPP siadł? Mam taką propozycję, spakuj pliki, wrzuć do sieci i niech ktoś inny sprawdzi na swoim serwerze. Bo może to problem z serwerem.

Mnie możesz przesłać na maila. Sprawdzę (również na Xampp'ie) i powiem Ci, co jest nie tak. Napisz na PW a podam Ci maila.
Użytkownik Txthor edytował ten post 08 czerwiec 2008, 17:31
Mogę sprawdzić na apache'u u siebie (Debian) ;)

Znalazłem błąd :P !. Aż głupio się przyznać. Źle nazwałem zmienną ;) .
$_SESSION['username'] = $_POST['name'];
Powinno być:
$_SESSION['username'] = $_POST['user'];
Dziękuję wszystkim za pomoc i poświęcony mi czas :) !
Użytkownik rys.marcin edytował ten post 11 czerwiec 2008, 13:21
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.