Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Logowanie i błąd
Forum PHP.pl > Forum > PHP
Mlodycompany
Witam. Mam taki skrypt logowanie własnej roboty no i on nie chce działać.
  1. <?php
  2. function zaloguj($user, $pass){
  3. $pass = md5($pass);
  4. $zapytanie = mysql_query("SELECT * FROM `users` WHERE `login` = '".koduj($user)."' AND `pass` = '".koduj($pass)."'");
  5. $row = mysql_fetch_array($zapytanie);
  6. if($row[12] == '1'){
  7. if(isSet($user) && isSet($pass)){
  8. if($user == $row[1] && $pass == $row[2]){
  9.  
  10. $_SESSION['zalogowany'] = true;
  11. $_SESSION['login'] = $row[1];
  12. switch($row[11]){
  13. case 1: $_SESSION['user'] = true; break;
  14. case 2: $_SESSION['moderator'] = true; break;
  15. case 3: $_SESSION['admin'] = true; break;
  16. echo('Zostałeś poprawnie zalogowany');
  17. }
  18. }
  19.  }
  20. }
  21. if($row[12] == '0'){
  22. echo('Twoje konto jest nie aktywne');
  23. }
  24. if(!isSet($user) && !isSet($pass)){
  25. echo('Wpiasno niepoprawne dane');
  26. }
  27. if($user != $row[1] && $pass != $row[2]){
  28. echo('Wpiasno niepoprawne dane');
  29. }
  30. }
  31. ?>

Dokładny problem jest taki, iż gdy wpisze obojętnie jakie dane to nic sie nie zmienia. Ani się nie wyświetla błąd, że wpisałem nie poprawne dane ani, że się zalogowałem. Wczoraj funkcja działała, a dzisiaj dodałem warunek, aby sprawdzało czy konto jest aktywne i już nie działa. W czym jest problem?
nevt
no to po kolei:
  1. <?php
  2. switch( ... ){
  3. ...
  4. case 3: $_SESSION['admin'] = true; break;
  5. echo('Zostałeś poprawnie zalogowany');
  6. }
  7. ?>

echo nigdy się nie wykona ... chyba że je wyrzucisz poza blok switch

następny kwiatek:
  1. <?php
  2. if(!isSet($user) && !isSet($pass)){
  3. echo('Wpiasno niepoprawne dane');
  4. }
  5. ?>

po pierwsze nie && tylko || (no chyba że masz userów bez hałsa...), po drugie lepiej to sprawdzić przed zapytaniem SQL - po co niepotrzebnie męczyć bazę...

no i najlepsze na końcu:
  1. <?php
  2. if($user != $row[1] && $pass != $row[2]){
  3. echo('Wpiasno niepoprawne dane');
  4. }
  5. ?>

echo nigdy sie nie wykona. przy niepawidłowych danych zapytanie SQL zwróci zero rekordów, zmienna $row będzie pusta (a dokładnie przyjmie wartość FALSE, zamiast tego użyj warunku if(!$row) ...

powodzenia.
Mlodycompany
no dobrze ale to są takie błędy, że logowanie i nadanie sesji powinno działać, ba jeżeli wywołam funkcje zaloguj z argumentami ('login', 'haslo') to normalnie loguje. Dopatrzyłem się, że mam coś z formularzami w pliku logowanie.php
  1. <?php
  2. <form action="" method="post">
  3. <table class="page" cellpadding="0" cellspacing="0">
  4. <tr>
  5. <th class="naglowek">Logowanie</th>
  6. </tr>
  7. <tr>
  8. <th>Login: <input type="text" name="login"/></th>
  9. </tr>
  10. <tr>
  11. <th>Hasło: <input type="password" name="haslo" /></th>
  12. </tr>
  13. <tr>
  14. <th><input type="submit" name="submit" value="Zaloguj"/></th>
  15. </tr>
  16. </table>
  17. </form>
  18. <table class="page" cellpadding="0" cellspacing="0">
  19. <tr>
  20. <th class="naglowek">Rejestracja</th>
  21. </tr>
  22. </table>
  23. ');
  24. if(isSet($_POST['submit'])){
  25. zaloguj($_POST['login'], $_POST['haslo']);
  26. }
  27. ?>

i gdy wezme wyprintuje $_POST to jest cicho ciemno i nic nie ma.
nevt
najpierw piszesz
Cytat
Dokładny problem jest taki, iż gdy wpisze obojętnie jakie dane to nic sie nie zmienia. Ani się nie wyświetla błąd, że wpisałem nie poprawne dane ani, że się zalogowałem.

a później
Cytat
no dobrze ale to są takie błędy, że logowanie i nadanie sesji powinno działać, ba jeżeli wywołam funkcje zaloguj z argumentami ('login', 'haslo') to normalnie loguje.

zdecyduj się, co ci nie działa - nie wyświetla komunikatów, czy nie loguje się ?

a kod formularza jest ok (pomijając tabelki) - skopiowałem ten kod i mnie $_POST ma właściwą zawartość... sądząc z błędów w pierwszym poście to masz wyłączone wyświetlanie błędów i ostrzeżeń w PHP - dlatego nie widzisz pomyłek w kodzie. Najprawdopodobniej w kodzie logowanie.php jest jakiś inny błąd który powoduje że wszystko razem się nie zazębia - włącz wyświetlanie błędów i szybko sam wyłapiesz co jest grane...

powodzenia.
marcio
  1. <?php
  2. function zaloguj($user, $pass) {
  3.  
  4. $pass = md5($pass);
  5. $zapytanie = mysql_query("SELECT * FROM `users` WHERE `login` = '".koduj($user)."' AND `pass` = '".koduj($pass)."'");
  6. $row = mysql_fetch_array($zapytanie);
  7.  
  8. if($row[12] == '1'){
  9.  
  10.  if(!empty($user) && !empty($pass)) {
  11.  
  12.  if($user == $row[1] && $pass == $row[2]){
  13.  
  14. $_SESSION['zalogowany'] = true;
  15. $_SESSION['login'] = $row[1];
  16. switch($row[11]) {
  17. case 1: $_SESSION['user'] = true; break;
  18. case 2: $_SESSION['moderator'] = true; break;
  19. case 3: $_SESSION['admin'] = true; break;
  20. default: $_SESSION['user'] = true; break;
  21.  }
  22. echo('Zostales poprawnie zalogowany');
  23. }
  24. else echo('Login i/lub haslo sa bledne');
  25.  }
  26. else echo('Prosze wypelnic wszystkie pola');
  27. }
  28. else echo('Twoje konto nie jest aktywne');
  29. }
  30. ?>

Po drugie uzywaj mysql_real_escape_string() na zmienne do sql potem jak masz aktywacje konta zmiast dawac char/varchar daj INT i tyle

P.S oczywiscie przed wywolaniem funckji laczysz sie z baza?? i masz session_start()

TEraz przeczytalem dobrze twoje posty form zdaje sie dobry smile.gif a co do aktywacji konta to posluchaj sprawdz jakiego typy masz kolumne z aktywacja jesli jest char/varchar to nr aktywaji ma byc w ''/"" jesli jest typu int to nie moze byc ''/"" ale w sumie masz == to nie sprawdza typow ale moze tez o to chodzi ogolnie sprawdz czy to co ci dalrm wyzej dziala
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.