Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MySQL]Skrypt logowania- problematyczna sesja
Testosteron
post
Post #1





Grupa: Zarejestrowani
Postów: 113
Pomógł: 2
Dołączył: 15.09.2011

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
szalek01
post
Post #2





Grupa: Zarejestrowani
Postów: 129
Pomógł: 17
Dołączył: 17.09.2012

Ostrzeżenie: (0%)
-----


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...


--------------------
PDO nie gryzie....
Go to the top of the page
+Quote Post
modern-web
post
Post #3





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

Ostrzeżenie: (0%)
-----


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!


--------------------
Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
Go to the top of the page
+Quote Post
szalek01
post
Post #4





Grupa: Zarejestrowani
Postów: 129
Pomógł: 17
Dołączył: 17.09.2012

Ostrzeżenie: (0%)
-----


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

Ten post edytował szalek01 21.10.2012, 14:42:21


--------------------
PDO nie gryzie....
Go to the top of the page
+Quote Post
Testosteron
post
Post #5





Grupa: Zarejestrowani
Postów: 113
Pomógł: 2
Dołączył: 15.09.2011

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Testosteron 21.10.2012, 14:53:04
Go to the top of the page
+Quote Post
szalek01
post
Post #6





Grupa: Zarejestrowani
Postów: 129
Pomógł: 17
Dołączył: 17.09.2012

Ostrzeżenie: (0%)
-----


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>
....


Ten post edytował szalek01 21.10.2012, 15:02:06


--------------------
PDO nie gryzie....
Go to the top of the page
+Quote Post
Testosteron
post
Post #7





Grupa: Zarejestrowani
Postów: 113
Pomógł: 2
Dołączył: 15.09.2011

Ostrzeżenie: (0%)
-----


Jak to poprawić?
Go to the top of the page
+Quote Post
szalek01
post
Post #8





Grupa: Zarejestrowani
Postów: 129
Pomógł: 17
Dołączył: 17.09.2012

Ostrzeżenie: (0%)
-----


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

Ten post edytował szalek01 21.10.2012, 15:30:25


--------------------
PDO nie gryzie....
Go to the top of the page
+Quote Post
Testosteron
post
Post #9





Grupa: Zarejestrowani
Postów: 113
Pomógł: 2
Dołączył: 15.09.2011

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Testosteron 21.10.2012, 15:45:08
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 03:51