Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL]Logowanie i błąd
Mlodycompany
post
Post #1





Grupa: Zarejestrowani
Postów: 910
Pomógł: 44
Dołączył: 20.02.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


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?
Go to the top of the page
+Quote Post
nevt
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


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.


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
Mlodycompany
post
Post #3





Grupa: Zarejestrowani
Postów: 910
Pomógł: 44
Dołączył: 20.02.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


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.
Go to the top of the page
+Quote Post
nevt
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


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.


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
marcio
post
Post #5





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


  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

Ten post edytował marcio 7.06.2008, 12:59:51


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
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: 21.08.2025 - 20:36