Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Skrypt logowania- problematyczna sesja
Forum PHP.pl > Forum > Przedszkole
Testosteron
Witam. Moich problemów ciąg dalszy. Tym razem z sesjami. Ogólnie podczas pisania tego kodu miałem sporo problemów. Najpierw po wstawieniu skryptu rozjechała mi się cała strona. Najpierw header wywalał mi błędy po includowaniu. Zastąpiłem go więc js'em. Później okazało się, że co prawda wyświetla mi formularz logowania, ale cała strona się rozjechała. Z tymi dwoma problemami uporałem się szybko. Teraz jednak mam problem z kontrolą sesji:
  1. <?php
  2. If (empty($_SESSION['zalogowany']) )
  3. {
  4. ?>
  5. <div id="loguj_calosc">
  6. <form method="POST">
  7. <div id="loguj_nick1">Login: </div>
  8. <div id="loguj_nick2">
  9. <input type="text" name="nick">
  10. </div>
  11. <div id="loguj_haslo1">Hasło: </div>
  12. <div id="loguj_haslo2">
  13. <input type="password" name="pass"></div>
  14. <div id="loguj_button">
  15. <input type="submit" value="Loguj">
  16. </div>
  17. </form>
  18. <div id="loguj_dol">
  19. <a href="register.php">Zarejestruj się</a> | <a href="r_password.php">Przypomnij hasło</a></div>
  20. </div>
  21. <?php
  22. }
  23. else
  24. {
  25. connect();
  26. $nick = mysql_escape_string($_POST['nick']);
  27. $pass = mysql_escape_string($_POST['pass']);
  28. $pass = koduj ($pass);
  29.  
  30. If (!preg_match('/^([a-zA-z])[a-zA-Z0-9_-]{3,25}$/',$nick) )
  31. {
  32. //format loginu
  33. ?>
  34. <script language="javascript">
  35. window.location.href = "login.php?error=1";
  36. </script>
  37. <?php
  38. }
  39. else
  40. {
  41. $zapytanie = mysql_query("SELECT `nick` FROM `users` WHERE nick = '$nick' AND pass = '$pass'");
  42. $liczba = mysql_num_rows($zapytanie);
  43.  
  44. If ($liczba != 1)
  45. {
  46. //login nie pasuje do hasła
  47. ?>
  48. <script language="javascript">
  49. window.location.href = "login.php?error=2";
  50. </script>
  51. <?php
  52. }
  53. else
  54. {
  55. $aktywacja = mysql_num_rows(mysql_query("SELECT `activate` FROM `users` WHERE nick='$nick' AND pass='$pass' AND activate=1") );
  56.  
  57. If ($aktywacja != 1)
  58. {
  59. //konto nie zostało aktywowane
  60. ?>
  61. <script language="javascript">
  62. window.location.href = "login.php?error=3";
  63. </script>
  64. <?php
  65. }
  66. else
  67. {
  68. $ban = mysql_num_rows(mysql_query("SELECT `activate` FROM `users` WHERE nick='$nick' AND pass='$pass' AND ban=1") );
  69.  
  70. If ($ban==1)
  71. {
  72. //konto zostało zbanowane
  73. ?>
  74. <script language="javascript">
  75. window.location.href = "login.php?error=4";
  76. </script>
  77. <?php
  78. }
  79. else
  80. {
  81. $_SESSION['zalogowany'] = $nick;
  82. If (!$_SESSION['zalogowany'])
  83. {
  84. ?>
  85. <script language="javascript">
  86. window.location.href = "login.php?error=5";
  87. </script>
  88. <?php
  89. }
  90. else
  91. {
  92. echo "<p align='center'>Witaj, <b>" . $nick . "</b>!<br />";
  93. echo '| <a href="my_account.php">Moje konto</a>';
  94. echo ' | <a href="notice.php">Anonse</a> |<br />';
  95. echo '<a href="logout.php">Wyloguj</a><br /></p>';
  96. }
  97. }
  98. }
  99.  
  100.  
  101. }
  102. }
  103. }
  104.  
  105.  
  106. ?>

Logowanie przebiagało bezproblemowo, jednak przy próbie przejścia na inną stronę, przenosiło mnie na stronę login.php?error=1. Później kiedy chciałem wejść na dowolną stronę na której był formularz do logowania takze przenosiło mnie na tą stronę. Usunąłem ciasteczka za pomocą FireBug (nie napisałem jeszcze skryptu do wylogowania). Teraz w ogóle nie mogę się zalogować. Po prostu skrypt "przeładowuje się". Nie przenosi mnie na żadną stronę, ani nie następuje logowanie.
szalek01
Nie wiem jaki jest błąd w twoim kodzie, ale wiem co go powoduje.
1) Kod spaghetti
2) Podejście strukturalne a nie jak to powiano być obiektowe.
3) Brak wykorzystania wzorców projektowych

Jeśli naprawdę chcesz się zacząć uczuć php, zacznij od podstaw które są teraz standardem MVC, PDO.
Jeśli piszesz własnego cms jak to każdy robi na początku, zainwestuj w książkę lub poszukaj kursu który opisuje krok po kroku jak, zaprojektować własnego cms, jakie wzorce wykorzystać, czego nie robić i tak dalej...
modern-web
Cytat(szalek01 @ 21.10.2012, 14:49:05 ) *
Nie wiem jaki jest błąd w twoim kodzie, ale wiem co go powoduje.
1) Kod spaghetti
2) Podejście strukturalne a nie jak to powiano być obiektowe.
3) Brak wykorzystania wzorców projektowych

Jeśli naprawdę chcesz się zacząć uczuć php, zacznij od podstaw które są teraz standardem MVC, PDO.
Jeśli piszesz własnego cms jak to każdy robi na początku, zainwestuj w książkę lub poszukaj kursu który opisuje krok po kroku jak, zaprojektować własnego cms, jakie wzorce wykorzystać, czego nie robić i tak dalej...

Widzisz, że kolega jest początkujący, a Ty mu jeszcze z obiektówką wyskakujesz!
1) Z tym się zgadzam, brak oddzielenia warstwy logicznej od prezentacji danych
2) Nie w każdym przypadku OOP jest dobrym rozwiązaniem! Nie zapominaj, że PHP jest językiem, który nadal lepiej funkcjonuje w podejściu proceduralnym!
3) A co do tego mają wzorce? przeczytałeś książkę, wyczytałeś jakie to wzorce są super i już szpanujesz niezbyt profesjonalnym słownictwem? Daruj sobie...
Jeśli naprawdę chcesz się dobrze nauczyć PHP, zacznij od podstaw! Podstawą jest podejście proceduralne, podstawowe funkcje, podstawowe biblioteki i trochę teorii + kilka małych projektów.
PDO/MySQL/MySQLi - obojętnie od czego zaczniesz, z czasem zobaczysz co jest "lepsze" - grunt to spróbować wszystkiego!
Na koniec, nie bierz się za CMS-a, bo zanim go ukończysz znienawidzisz cały dotychczas napisany kod i znajdziesz się w punkcie wyjścia dosłownie z niczym. Także szkoda Twojego czasu na coś, co niczego Cię na razie nie nauczy.
Podsumowując, małe projekty, nie CMSy!
szalek01
modern-web nie bardzo rozumem czemu mnie atakujesz, ale rozumiem że niektórzy tak już mają, preferują atak i poniżanie niż pomoc...
co do "wyczytałeś jakie to wzorce są super i już szpanujesz niezbyt profesjonalnym słownictwem? Daruj sobie..."
nie wyczytałem tylko stosuje, wcześniej pisałem jak kolega wyżej ale było to może w 2005 i wiem jak ciężko to teraz rozwijać, a czemu wspomiałem o OPP i MVC ? ponieważ moim zdaniem jeśli jest to dobrze użyte łatwiej się takie projekty rozwija.
Ale róbcie jak chcecie smile.gif
Testosteron
A jakie to są małe projekty? Księga gości? Robiłem już smile.gif Nie piszę w OOP, ponieważ w księżce z której się ucze - Vademecum profesjonalisty ten temat rozwinięty jest po prostu strasznie. Zdecydowanie nagorszy rozdział księżki. Przeleciałem kawałek i dałem sobie spokój.
szalek01
Moim zdaniem małe projekty to dla każdego co innego, jak tworzysz np aplikacji do obsługi sklepu gdzie CMS to tylko mały moduł to CMS jest dla ciebie małym projektem. Jeśli tworzyłeś wcześniej tylko formularze i księgi gości to CMS jesz już wyzwaniem

a co do tematu:

problemem może być to że gdy jesteś zalogowany wykonuje się else gdzie sprawdzany jest czy nick jest poprawny a nie jest bo pewnie przychodzi pusty i wtedy jest przekierowanie na error =1

Kod
<?php
session_start();
If (empty($_SESSION['zalogowany']) )
{

}
else
{
    connect();
    $nick = mysql_escape_string($_POST['nick']);
    $pass = mysql_escape_string($_POST['pass']);
    $pass = koduj ($pass);

    If (!preg_match('/^([a-zA-z])[a-zA-Z0-9_-]{3,25}$/',$nick) )
    {
        //format loginu
        //<script language="javascript">
        //window.location.href = "login.php?error=1";
        //</script>
....
Testosteron
Jak to poprawić?
szalek01
Nie wiem czy dobrze rozumiem, w jakim pliku masz ten skrypt ? dodajesz go do każdej strony ?
Jeśli tak zrób oddzielny plik login.php gdzie będziesz sprawdzam warunki a jeśli użytkom się dobrze zaloguje przeładujesz go gdzieś indziej.
Np
login_form.php gdzie masz formularz logowania
login.php gdzie sprawdzasz czy wszytko jest ok
jak jest ok idziesz do np profil.php jak nie do dajesz header('Location: login_form.php?error=1');
i w login_form sprawdzasz jaki komunikat masz wyświetlić
a w innych plikach sprawdzasz czy użytkownik jest zalogowany jeśli nie jest przenosisz go do login_form.php
Testosteron
Spróbuję zrobić tak jak napisałeś. Ja całość zawarłem w jednym pliku i includowałem go do wszystkich dokumentów. Tylko jak mam to zrobić? Chodzi ci o coś takiego
<form action ="login.php" method="POST">?

Nie chcę, żeby po zalogowaniu przenosiło mnie do profilu. Skrypt logowania mam na górze strony. Tam powinny pjawić mi się linki, któe umożliwią mi przejście do profilu, czy wylogowanie. I właśnie dlatego nie wiem, czy dobrze Cię zrozumiałem. Jeżeli odwołam się do 2 pliku tak jak napisałem wyżej to przejdę do innej strony a właśnie tego chciałbym uniknąć. Adres pozostaje bez zmian, tylko zmienia się jeden fragment strony.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.