[php_mySQL]Sprawdzanie loginu i hasla szyfrowanego

Języki, których efekty są wykonywane po stronie serwera. PHP, ASP czy CGI w połączeniu z bazami danych SQL dają niezwykłe możliwości budowy i zarządzania stron WWW. Tu zadajemy pytania oraz demonstrujemy kod, z którym mamy problem.
zabora
Posty: 8
Rejestracja: ndz sty 16, 2005 11:59 am

[php_mySQL]Sprawdzanie loginu i hasla szyfrowanego

Post autor: zabora »

mam problem z porownanie - logowanie do bazy i porownanie zaszyfrowanego hasla, Pierwszy plik z formularzem wyglada tak:

Kod: Zaznacz cały

<HTML>]
<BODY>

TEST_ZAPIS_DO_BAZY_INSERT

<FORM METHOD="POST" ACTION="select_log.php">

Login:	        <INPUT TYPE=TEXT NAME="LOGIN" SIZE=30> <BR>
Hasło:	        <INPUT TYPE=PASSWORD NAME="HASLO" SIZE=30> <BR>

<BR>

<INPUT TYPE=SUBMIT VALUE = "ZAPISZ">


</FORM>
</BODY>
</HTML>

drugi plik z php wyglada nastepujaco:

<HTML>
<BODY>

[php]<?php
<?php




mysql_connect("localhost","root","root") or die ("Nieudana proba polaczenia z baza");


mysql_select_db('test_klient') or die ("Nieudana proba polaczenia z baza");




$szyfr = md5($_POST["HASLO"]);
print($szyfr);

$query = "SELECT haslo,login FROM myuser WHERE login ='".$_POST["LOGIN"]."'";

$result = mysql_query($query);

if ($result == $szyfr)
echo "Poprawne haslo";

elseif ($result != $szyfr)
echo "Zle haslo";

?>
?>[/php]

</BODY>
</HTML>


W formularzu jak wpisze login i haslo ( w bazie w tabeli MYUSER jest taki user z loginem i haslem - haslo w tabeli MYUSERjest zaszyfrowane funkcja md5() )

to wypisuje mi zawsze echo "Zle haslo".
Na pewno wpisuje poprawny login i haslo. Gdzie moze byc problem?
[/code]
Ostatnio zmieniony ndz sty 23, 2005 9:53 pm przez zabora, łącznie zmieniany 1 raz.
Piotr Bandyk
Nowy
Nowy
Posty: 79
Rejestracja: sob lip 05, 2003 9:56 am
Lokalizacja: Poznań
Kontakt:

Re: [php_mySQL]Sprawdzanie loginu i hasla szyfrowanego

Post autor: Piotr Bandyk »

[php]<?php
$_POST[HASLO] = md5($_POST["HASLO"]);

$query = mysql_query( "SELECT * FROM myuser WHERE login ='$_POST[LOGIN]' AND haslo='$_POST[HASLO]'");

$dane = mysql_fetch_array($query);

if (!$query){
print "Złe hasło";
exit;
}else{
print "Dobre hasło";
}

?>[/php]

Ja stosuje coś w tym stylu i zawsze działa. Polecam używanie sha1 zamiast md5.

Pozdrawiam.
zabora
Posty: 8
Rejestracja: ndz sty 16, 2005 11:59 am

no dobra

Post autor: zabora »

no dobrze ale mi raczej chodzi o to, zeby selectem z bazy pobrac tylko wartosc ktora mnie interesuje - czyli haslo dla user o loginie $_POST["LOGIN"].

Jak sobie robilem kontrolne printy to wartosci z bazy pobiera prawidlowe - pytanie tylko dlaczego moje if nie dzialaja tak jak nalezy ? Wszystko wydaje sie byc w porzadku a jednak nie ma porownania hasla ze zmiennej $szyfr z haslem pobranym selectem z bazy.

Ale dzieki za odpowiedz.
iro
Moderator
Posty: 402
Rejestracja: pt gru 19, 2003 8:20 pm
Lokalizacja: Szczecin

Re: [php_mySQL]Sprawdzanie loginu i hasla szyfrowanego

Post autor: iro »

Zrezygnuj z md5 wykonywanego przez mysql'a.
Mi też kiedyś nie działało, jak wprowadzałem usera z hasłem traktowanym md5 przez bazę, a później porównywanym z hasłem traktowanym md5 przez PHP.
Po prostu wprowadzając rekord z userem pobierz hasło z formularza i potraktuj funkcją md5( ) z PHP. Dopiero tą wartość wprowadzaj do bazy.
Myślę, że to właśnie w tym problem.

BTW: w kodzie, który podałeś brakuje funkcji typu mysql_fetch_array().
Powinno być coś takiego:
[php]<?php
$dbResult = mysql_query($query);
$result = mysql_fetch_array($dbResult);
?>[/php]
Wtedy hasło możesz wybrać w następujący sposób:
[php]<?php
$haslo = $result["haslo"];
?>[/php]
zabora
Posty: 8
Rejestracja: ndz sty 16, 2005 11:59 am

nic z tego

Post autor: zabora »

niestety nie dziala nadal..zmienilem nawet sposob szyfrowania na sha1.
Teraz od razu w php przypisuje do zmiennej zaszyfrowane haslo i juz zaszyfrowane zapisuje w bazie:



[php]<?php
$szyfr = sha1($_POST["HASLO"]);



$query = "INSERT INTO myuser (IMIE,NAZWISKO,LOGIN,HASLO)
VALUES ('".$_POST["IMIE"]."','".$_POST["NAZWISKO"]."','".$_POST["LOGIN"]."','$szyfr')";

$result = mysql_query($query);


Odczyt i porownanie wyglada tak:

$szyfr = $_POST["HASLO"];
$login = $_POST["LOGIN"];

$query = "SELECT haslo FROM myuser WHERE login ='$login'";

$result = mysql_query($query);

print("<BR>");
print("<BR>");

if (sha1($szyfr) == '$query') {
echo "haslo poprawne";
}else {
echo "Haslo zle";
}
?>[/php]
Nadal wypisuje mi wartosc dla else:(Nie kumam juz nic z tego:)
Ostatnio zmieniony ndz sty 23, 2005 9:51 pm przez zabora, łącznie zmieniany 2 razy.
Wojciech Kocjan
Zaczyna działać
Zaczyna działać
Posty: 427
Rejestracja: sob gru 14, 2002 10:51 am

Re: nic z tego

Post autor: Wojciech Kocjan »

zabora pisze:niestety nie dziala nadal..zmienilem nawet sposob szyfrowania na sha1. Teraz od razu w php przypisuje do zmiennej zaszyfrowane haslo i juz zaszyfrowane zapisuje w bazie:
Nic dziwnego, ze Ci to nie dziala, bo to zadnego sensu nie ma, to co napisales. Dodawanie zostaw tak jak masz, popraw jedynie odczytywanie. W tej chwili robisz to tak: kodujesz to haslo, co podal user, a nastepnie ta zakodowana wartosc przyrownujesz do stringa "SELECT haslo FROM myuser WHERE login ='$login'"...
Przy odczycie zrob tak:

[php]<?php
$result=mysql_query("SELECT COUNT(login) AS logged FROM myuser WHERE login ='".$_POST['login']."' AND haslo = '".sha1($_POST['haslo'])."' ");
$data=mysql_fetch_array($result);
if ($data['logged']==1) {
// zalogowany
}
else {
// niezalogowany
}
?>[/php]

I edytuj swojego wczesniejszego posta - uzywaj bbcode (php, code). Jesli tego nie zrobisz, dostaniesz oficjalne ostrzezenie.
zabora
Posty: 8
Rejestracja: ndz sty 16, 2005 11:59 am

koniec

Post autor: zabora »

OK, dzieki za pomoc.Dziala juz bez problemu.P{osty przeredagowalem-sorki:)
ODPOWIEDZ