Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] porónywanie stringów z bazy danych i z formularza
Forum PHP.pl > Forum > Przedszkole
charli_22
Witam
Mam problem z porównaniem stringu z bazy danych i z formularza. Tu jest fragment kodu odpowiedzialny za to porównanie:

  1. <?php
  2. $email=$_POST['email'];
  3. $passwd=$_POST['passwd'];
  4.  
  5. while ($row=mysql_fetch_assoc($result)) {
  6. $row_login=$row['email'];
  7. $row_pass=$row['passwd'];
  8. $porownanie=strcmp($row_pass, $passwd); //sprawdzam co zwraca funkcja
  9. echo 'Funkcja zwróciła: ' . $porownanie;
  10. if(!(strcmp($row_pass, $passwd))) {
  11. $_SESSION['email'] = $row_login;
  12. $_SESSION['passwd'] = $row_pass;
  13. echo 'Zostałeś zalogowany.';
  14. } else {
  15. echo 'login nie powiodł się';
  16. }
  17. }
  18. ?>


Chodzi o to, że przy porównywaniu stringa pochodzącego z formularza ze stringiem pobieranym z bazy danych zwraca mi -1 a powinno 0, bo stringi są takie same. W bazie mam kodowanie UTF8.
Roly
Możesz spróbować porównywać za pomocą operatora == i warunku IF
charli_22
Czytałem że dla operatora '==' dwa stringi '1ala' i '1ola' są równe i zwracane jest TRUE. wstydnis.gif Chyba że się myle.
nowotny
Generalnie źle to robisz... nigdy nie powinieneś przechowywać haseł w czystym tekście... przy rejestracji usera robisz hasza md5" title="Zobacz w manualu PHP" target="_manual hasła i przechowujesz tylko hasz w bazie... potem przy logowaniu haszujesz hasło które user wpisał w formularzu i porównujesz tego hasza z haszem w bazie...

Ale wracając do tematu... pokaż skąd bierzesz zmienną $g_passwd... poza tym raz porównujesz ze zmienną $g_passwd a raz z $passwd... która jest prawidłowa...?

Cytat(charli_22 @ 19.03.2008, 11:19:32 ) *
Czytałem że dla operatora '==' dwa stringi '1ala' i '1ola' są równe i zwracane jest TRUE. wstydnis.gif Chyba że się myle.

Be-ze-dura... Czytałeś a nie sprawdziłeś...?
charli_22
Powinno być passwd zamiast g_passwd. Poprawiłem. Jednak to nie rozwiązuje problemu, funkcja nadal zwraca wartość -1 dla porównywanych stringów sad.gif
Chrom
nie znam angielskiego jednak z manuala wynika, że

Returns < 0 if str1 is less than str2; > 0 if str1 is greater than str2, and 0 if they are equal.

wynik daje efekt <0 > 0 lub =0 a nie prawda lub fałsz

daj bbkody
usuń wykrzyknik
charli_22
Przy edycji ucięło mi kawałek postu. Chodzi o to, że przy porównywaniu stringa pochodzącego z formularza ze stringiem pobieranym z bazy danych zwraca mi -1 a powinno 0, bo stringi są takie same. W bazie mam kodowanie UTF8.
Chrom
  1. <?php
  2. ?>

dajemy na początku strony
nowotny
Cytat(Chrom @ 19.03.2008, 11:54:02 ) *
  1. <?php
  2. ?>

dajemy na początku strony

Nie na początku strony tylko na początku skryptu... i to też nie do końca bo prawidłowo powinno być: zanim wyślemy cokolwiek do przeglądarki... co może nastąpić nawet w środku czy na końcu skryptu...

charli_22, dostałeś odpowiedź już... używaj IFów...
charli_22
Problem był z bazą danych. W phpMyAdmin ustawiłem dla pola hasło Typ MIME na text/plain. I gdy sprawdziłem długość hasła wpisywanego przez usera i tego z bazy za pomocą strlen() to różniły się długością o 1. Ustawiłem w bazce Typ MIME na pusty i długość zwracana przez strlen() jest identyczna dla jednego i drugiego stringu.

Zgodnie z zaleceniem zajme się hashowaniem haseł. Obecnie ucze się pisania skryptów i odpuściłem hashowanie, bo wszystko odbywa się lokalnie:), więc nie ma strachu, że ktoś się wpisze a ja podejrze jego hasło czy ktoś w sieci.

Dzięki za porady. Pozdrawiam. guitar.gif
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.