Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Logowanie
Forum PHP.pl > Forum > Przedszkole
Deotho
  1. <?php
  2. include ("config/db.php");
  3.  
  4. if (!isset($_SESSION['login'])) {
  5. if ($_POST['submit']) {
  6. $login = addslashes($_POST['login']);
  7. $haslo = md5($_POST['haslo']);
  8.  
  9. $db = mysql_query("SELECT * FROM users WHERE login='$login' and haslo='$haslo' and active=0");
  10.  
  11. if (mysql_num_rows($db) == 1) {
  12. $info = mysql_fetch_array($db);
  13. echo '<span class="blad">Nie aktywowałeś jeszcze swojego konta.</span>';
  14. }
  15.  
  16. $db = mysql_query("SELECT * FROM users WHERE login='$login' and haslo='$haslo' and active=1");
  17.  
  18. if (mysql_num_rows($db) == 1) {
  19. $informacja = mysql_fetch_array($db);
  20. $_SESSION["login"] = $informacja["login"];
  21. header('Location: index.php ');
  22. } else {
  23. echo '<span class="blad">Podane dane są nieprawidłowe!</span>';
  24. }
  25. mysql_close($polaczenie);
  26. }
  27. } else {
  28. header('Location: index.php');
  29. }
  30.  
  31. if ($_GET["wylogowanie"] == "tak") {
  32. header('Location: index.php');
  33. }
  34.  
  35. ?>


Powyżej prezentuje login.php , a poniżej index.php

  1. <?php
  2. include('config/db.php');
  3. ?>
  4.  
  5. <?php include('templates/header.php'); ?>
  6.  
  7. <?php
  8.  
  9. ?>
  10. <html xmlns="http://www.w3.org/1999/xhtml">
  11. <head>
  12. <meta http-equiv="ContentType" content="text/html; charset=utf-8" />
  13. </head>
  14. <body>
  15. <form action="login.php" method="post">
  16. <table>
  17. <input type="hidden" name="submit" value="TRUE" />
  18. <tr>
  19. <td>Login:</td>
  20. <td><input type='text' name='login' maxlength='20'></td>
  21. </tr>
  22.  
  23. <tr>
  24. <td>Hasło:</td>
  25. <td><input type='password' name='haslo' maxlength='30'></td>
  26. </tr>
  27.  
  28. <tr>
  29. <td><input type='submit' value='Zaloguj się'></td>
  30. </tr>
  31.  
  32. </table>
  33. </form>
  34. </body>
  35. </html>
  36.  
  37. <?php include('templates/footer.php'); ?>


Krótko mówiąc. Gdy jestem na stronie główne(index.php) i wpisuje dane przenosi mnie na login.php i mam białą stronę chodź mam ustawione przekierowania na stronę główna. Oznacza to, że coś nie działa. Dodałem formularz do login.php i gdy wpisuje tam dane wyskakuje błąd ' Podane dane są nieprawidłowe ' choć są dobre i konto mam nieaktywne, a więc powinno wyskoczyć ' Aktywuj swoje konto '.
Niktoś
Spróbuj zmienić
if (!isset($_SESSION['login'])) {

na
if (isset($_SESSION['login'])) {

Możesz mieć sesje aktywną, albo zamknij i włącz przeglądarkę i wtedy spróbuj.
Deotho
Teraz nie przekierowuje na login.php, ale też nie wyświetla żadnej informacji i nie loguje.
Niktoś
Ma być :
Cytat
if (!isset($_SESSION['login'])) {


Kazałem Ci zmienić, aby stwierdzić czy miałeś aktywną sesję i tym samym sprawdzić jak się zachowa skrypt.

Spróbuj dodać za każdym przekierowaniu komendę exit :
  1. header('Location: index.php ');
Deotho
Wyskoczyło, że mam nieprawidłowe dane i przekierowało na login.php
Nie powinno przekierować na login.php + wyświetlić ' Proszę aktywować konto '

Już nie wiem o co może chodzić.
  1. <?php
  2. include ("config/db.php");
  3.  
  4. if (!isset($_SESSION['login'])) {
  5. if ($_POST['submit']) {
  6. $login = addslashes($_POST['login']);
  7. $haslo = md5($_POST['haslo']);
  8.  
  9. $db = mysql_query("SELECT * FROM users WHERE login='$login' and haslo='$haslo' and active=0");
  10.  
  11. if (mysql_num_rows($db) == 1) {
  12. $info = mysql_fetch_array($db);
  13. echo '<span class="blad">Nie aktywowałeś jeszcze swojego konta.</span>';
  14. }
  15.  
  16. $db = mysql_query("SELECT * FROM users WHERE login='$login' and haslo='$haslo' and active=1");
  17.  
  18. if (mysql_num_rows($db) == 1) {
  19. $informacja = mysql_fetch_array($db);
  20. $_SESSION["login"] = $informacja["login"];
  21. header('Location: index.php ');
  22. } else {
  23. echo '<span class="blad">Podane dane są nieprawidłowe!</span>';
  24. }
  25. mysql_close($polaczenie);
  26. }
  27. } else {
  28. header('Location: index.php');
  29. }
  30.  
  31. if ($_GET["wylogowanie"] == "tak") {
  32. header('Location: index.php');
  33. }
  34.  
  35. ?>
Lwik
  1. <?php
  2. include ("config/db.php");
  3. IF(isset($_SESSION['login'])) {header('Location: profil.php'); }
  4.  
  5. if ($_POST['login']) {
  6. $login = addslashes($_POST['login']);
  7. $haslo = md5($_POST['haslo']);
  8.  
  9. $db = mysql_query("SELECT * FROM users WHERE login='".$login."' and haslo='".$haslo."'");
  10.  
  11. if (mysql_num_rows($db) == 1) {
  12. $info = mysql_fetch_array($db);
  13. IF($info['active'] == 0) die('aktywuj');
  14. IF($info['active'] == 1)
  15. {
  16. $_SESSION["login"] = $info["login"];
  17. header('Location: profil.php ');
  18.  
  19. }
  20. }else {
  21. echo '<span class="blad">Podane dane są nieprawidłowe!</span>';
  22. }
  23. }
  24.  
  25.  
  26. if ($_GET["wylogowanie"] == "tak") {
  27. header('Location: index.php');
  28. }


Powyżej prezentuje login.php , a poniżej index.php

  1. <?php
  2. include('config/db.php');
  3. include('templates/header.php');
  4.  
  5. ?>
  6. <form action="login.php" method="post">
  7. <table>
  8. <tr>
  9. <td>Login:</td>
  10. <td><input type='text' name='login' maxlength='20'></td>
  11. </tr>
  12.  
  13. <tr>
  14. <td>Hasło:</td>
  15. <td><input type='password' name='haslo' maxlength='30'></td>
  16. </tr>
  17.  
  18. <tr>
  19. <td><input type='submit' value='Zaloguj się'></td>
  20. </tr>
  21.  
  22. </table>
  23. </form>
  24.  
  25.  
  26. <?php include('templates/footer.php'); ?>

tak na szybko, powinno dzialać.
Deotho
Niestety nadal wyrzuca błąd ' Podaj prawidłowe dane ' choć mam prawidłowe i konto nadal nieaktywne.
Brak informacji o nieaktywnym koncie. No i przekierowuje na login.php

.
Niktoś
Wygląda na to jakbyś źle wprowadzał pary -login ,hasło.
Deotho
Chodzi o to, że wszystko wprowadzam dobrze.
Powinno wyskoczyć, że nie aktywowalem emailu, bo mam nieaktywne konto - specjalnie tak zrobiłem.
Niktoś
Sprawdź:
  1. $login = addslashes($_POST['login']);
  2. echo $login;
  3. $haslo = md5($_POST['haslo']);
  4. echo $haslo;


To nic nie kosztuje i porównaj z tym co masz w bazie danych.Tylko zakomentuj funkcje // header
Deotho
na końcu w login.php mam:
Kod
f3b


a w bazie
Kod
f


chodzi o haslo tongue.gif
Niktoś
No i widzisz teraz dlaczego nie działa.
f to użytkownik 3b to hasło?
Deotho
Już wiem na czym polegał problem. Varchar miałem na 20, a haslo na 22 znaki.
Teraz gdy wpiszę poprawnę dane to przenosi mnie na login.php i widzę napis ' aktywuj '

  1. <?php
  2. include ("config/db.php");
  3. IF(isset($_SESSION['login'])) {header('Location: profil.php'); }
  4.  
  5. if ($_POST['login']) {
  6. $login = addslashes($_POST['login']);
  7. $haslo = md5($_POST['haslo']);
  8.  
  9. $db = mysql_query("SELECT * FROM users WHERE login='".$login."' and haslo='".$haslo."'");
  10.  
  11. if (mysql_num_rows($db) == 1) {
  12. $info = mysql_fetch_array($db);
  13. if ($info['active'] == 0) die('aktywuj');
  14. if ($info['active'] == 1) {
  15. $_SESSION["login"] = $info["login"];
  16. header('Location: index.php ');
  17. echo '<span class="blad">Nie aktywowałeś jeszcze swojego konta.</span>';
  18. }
  19. }else {
  20. echo '<span class="blad">Podane dane są nieprawidłowe!</span> <br>';
  21. }
  22. }
  23.  
  24.  
  25. if ($_GET["wylogowanie"] == "tak") {
  26. header('Location: index.php');
  27. }
  28.  
  29. echo $login;
  30. echo $haslo;
  31. ?>


Nie powinno przekierowywać na login.php tylko wyświetlać informacje na stronie głównej.
No i oczywiście logować.
Deotho
Wyświetla, że nie aktywowałem konta, ale przenosi niestety na login.php. :/
Niktoś
Cytat
if ($info['active'] == 1) {
$_SESSION["login"] = $info["login"];
header('Location: index.php ');
exit;

Skrypt robi to co napisałeś wyżej.W bazie ma on status active 1?Jeśli tak to według tego co wyżej napisałeś - ustawia sesje i robi redirect.
Deotho
Mam konto nieaktywne, bo go nie aktywowałem. Chcę, aby informacja o ' Nieaktywnym koncie ' wyświetlała się na stronie głównej podczasz logowania kogoś kto ma nieaktywne konto, bo teraz przekierowuje na login.php i wyświetla.. :/
Niktoś
Jak dokonujesz jakiś zmian w skrypcie ,a pracujesz na sesji to każdorazowo wyłączaj i włączaj przeglądarkę, bo nie będziesz widział efektów, gdyż ciągle pracujesz na starej sesji(musisz ją "kilnąć" właśnie przez zamknięcie przeglądarki).
Spróbuj tak zrobić i daj znać.
Deotho
login.php
  1. <?php
  2. include ("config/db.php");
  3. IF(isset($_SESSION['login'])) {header('Location: index.php'); }
  4.  
  5. if ($_POST['login']) {
  6. $login = addslashes($_POST['login']);
  7. $haslo = md5($_POST['haslo']);
  8.  
  9. $db = mysql_query("SELECT * FROM users WHERE login='".$login."' and haslo='".$haslo."'");
  10.  
  11. if (mysql_num_rows($db) == 1) {
  12. $info = mysql_fetch_array($db);
  13. if ($info['active'] == 0) die('Nie aktywowałeś jeszcze swojego konta.');
  14. if ($info['active'] == 1) {
  15. $_SESSION["login"] = $info["login"];
  16. header('Location: index.php ');
  17. echo '<span class="blad">Nie aktywowałeś jeszcze swojego konta.</span>';
  18. }
  19. } else {
  20. echo '<span class="blad">Podane dane są nieprawidłowe!</span> <br>';
  21. }
  22. }
  23.  
  24.  
  25. if ($_GET["wylogowanie"] == "tak") {
  26. header('Location: index.php');
  27. }
  28.  
  29. ?>


Wyłączyłem i włączyłem przeglądarkę, wyczyściłem ciasteczka, a gdy wpisałem dane przekierowało na login.php i wyświetliło informację o nieaktywnym koncie. Cholerka jak to zrobić, aby na głównej wyświetlało :/
Niktoś
Cytat
if ($info['active'] == 1) {
$_SESSION["login"] = $info["login"];
header('Location: index.php ');
exit;
echo '<span class="blad">Nie aktywowałeś jeszcze swojego konta.</span>';
}

Wykonuje Ci się ten blok ,tak więc musisz mieć go aktywnego, sprawdź w kolumnie active w bazie danych ,czy nie ma 1 dla tego użytkownika.Poza tym , w tym bloku to ta pogrubiona linijka w ogóle jest niepotrzebna.
Deotho
Chyba mnie nie zrozumiałeś.
Chcę, aby na stronie głównej gdy loguje się użytkownik, który ma nieaktywne konto wyświetłało informację ' Nie aktywowałeś konta '.

  1. <?php
  2. include ("config/db.php");
  3. IF(isset($_SESSION['login'])) {header('Location: index.php'); }
  4.  
  5. if ($_POST['login']) {
  6. $login = addslashes($_POST['login']);
  7. $haslo = md5($_POST['haslo']);
  8.  
  9. $db = mysql_query("SELECT * FROM users WHERE login='".$login."' and haslo='".$haslo."'");
  10.  
  11. if (mysql_num_rows($db) == 1) {
  12. $info = mysql_fetch_array($db);
  13. if ($info['active'] == 0) die('Nie aktywowałeś jeszcze swojego konta.');
  14. if ($info['active'] == 1) {
  15. $_SESSION["login"] = $info["login"];
  16. header('Location: index.php ');
  17. }
  18. } else {
  19. echo '<span class="blad">Podane dane są nieprawidłowe!</span> <br>';
  20. }
  21. }
  22.  
  23.  
  24. if ($_GET["wylogowanie"] == "tak") {
  25. header('Location: index.php');
  26. }
  27.  
  28. ?>


Fakt ta linijka była zbędna więc ją usunąłem. Konto na, które się loguje ma active=0 // czyli nieaktywne. Gdy się loguje przenosi na login.php i wyświetla info o Nie aktywowanym koncie, a ma to wyświetlać na głównej.

O to mi tylko chodzi..
Niktoś
Możesz zrobić taki myk:
  1. if ($info['active'] == 0) {
  2. header('Location: index.php?active=0');
  3. }

W pliku index.php gdzieś na początku skryptu:
  1. if((isset($_GET["active"]))&&($_GET["active"]=="0")){
  2. echo '<span class="blad">Nie aktywowałeś jeszcze swojego konta.</span>';
  3. }
Deotho
Cytat
Parse error: syntax error, unexpected T_BOOLEAN_AND in D:\Program Files\WebServ\httpd\index.php on line 6

  1. if (isset($_GET["active"])) && ($_GET["active"]=="0")) {
  2. echo '<span class="blad">Nie aktywowałeś jeszcze swojego konta.</span>';
  3. }
  4. )


Nie działa hmm.
Niktoś
Dałem nawiasy okrągłe ,zamiast klamer-poprawiłem.Musisz także myśleć.
Cytat
Parse error: syntax error, unexpected T_BOOLEAN_AND in D:\Program Files\WebServ\httpd\index.php on line 6

Brak ci nawiasu na początku.
Deotho
  1. if ($_POST['login']) {
  2. $login = addslashes($_POST['login']);
  3. $haslo = md5($_POST['haslo']);
  4.  
  5. $db = mysql_query("SELECT * FROM users WHERE login='".$login."' and haslo='".$haslo."'");
  6.  
  7. if (mysql_num_rows($db) == 1) {
  8. $info = mysql_fetch_array($db);
  9. if ($info['active'] == 0) {
  10. header('Location: index.php?active=0');
  11. }
  12. if ($info['active'] == 1) {
  13. $_SESSION["login"] = $info["login"];
  14. header('Location: index.php ');
  15. }
  16. } else {
  17. echo '';
  18. }
  19. }


Chciałem zrobić tak samo jak Ty z Nie aktywnym kontem i coś nie wychodzi

  1. if ((isset($_GET["active"])) && ($_GET["active"]=="0")) {
  2. echo '<span class="blad">Nie aktywowałeś jeszcze swojego konta.</span>';
  3. }
  4. if ((isset($_GET["active"])) && ($_GET["active"]=="1")) {
  5. echo '<span class="blad">Podane dane są nieprawidłowe!</span>';
  6. }
Niktoś
Nie przesadzaj z tymi pomógł-raz wystarczy.

Poczytaj o metodzie przesyłu dany $_GET i generowaniu linków -a będziesz wiedział jak to zrobić ,ja ci podałem prosty przykład(myk), przeanalizuj to i popatrz także na inne przykłady z googla.
Deotho
Dziękuje za pomoc wszystko już działa.

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