Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pomocy co robie zle? funkcja password() nie dziala
Forum PHP.pl > Forum > PHP
jaql
HELPP exclamation.gif!!!!!
Mam problem ze skryptem autoryzacji a glownie z funkcja password()
Mianowicie nie moge wybrac zadnych rekordow z bazy przy uzyciu tej funkcji.
W bazie posiadam miedzy innymi kolumne login i password - hasla dodawalem przy uzyciu skryptu gdzie w zapytaniu uzywalem funkcji password() - i faktycznie hasla sa zaszyfrowane - samo zaypatnie wygladalo mnij wiecej tak

$wstaw= "insert into user Values('$imie','$nazwisko','$login',password('$haslo'),'$email','$adres','$miasto','$wojewodztwo','$kod','$telefon','','',null)";

Gdy zas przy probie autoryzacji
zglaszam zapytanie

$sql = "SELECT imie FROM user WHERE login='$login' AND haslo= password('$haslo')";

Wyrzuca mi ze uzytkownik jest nie zarejestrowany
(gdy w rzeczywistosci podaje poprawne haslo i login).


Co ciekawe po zmodyfikowaniu zapytania na

$sql = "SELECT imie FROM user WHERE login='$login' AND haslo='$haslo'";
czyli wyrzuceniu funkcji password() -
przy wybieraniu rekordu w ktorych hasla byly dodawane bez funkcji password() i sa nie zaszyfrowane normalnie idzie sie zalogowac.

Reasumujac funkcja password() dziala przy wstawianiu zaszyfrowanych hasel
ale jak probuje przy jej pomocy pobrac rekord z bazy gdzie haslo bylo uprzednio przy pomocoy tej funkcji zaszyfrowane - rezulatat jest zerowy ;((((

Ponizej przedstaiwam caly skryp skladajacy sie z dowch plikow
Prosze o pomoc - jestem poczatkujacy , rece mi opadaja juz drugi dzien nad tym siedzie. Probowalem jzu funkcji old_password() ale tez nic nie daje sad.gif(



Probuje uzyc prostego skryptu ktory sklada sie z dwoch plikow



Pierwszy plik login.html

+++++++++++++++++++++++++++++++++++++++++

<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=iso-8859-2">
<META HTTP-EQUIV="Creation-date" CONTENT="2002-04-08T08:28:33Z">
<META HTTP-EQUIV="Reply-to" CONTENT="konradkuc@wp.pl">
<META HTTP-EQUIV="Content-Language" CONTENT="pl">
<META NAME="Description" CONTENT="Autentykacja uzytkownika w php">
<META NAME="Author" CONTENT="Konrad Kuc">
<TITLE>Autentykacja uzytkownika</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<form method=post action="login.php">
<table border=1 align=center cellspacing=3 cellpadding=3>
<tr>
<td align=center colspan=2><hr color=red>
<H1>LOGOWANIE</H1><hr color=red>
</td>
</tr>
<tr>
<td align=center>
<B>LOGIN: </B>
</td>
<td align=center>
<input type="text" name="login">
</td>
</tr>
<tr>
<td align=center>
<B>HASLO: </B>
</td>
<td align=center>
<input type=password name="haslo">
</td>
</tr>
<tr>
<td align=center colspan=2>
<input type=submit value="LOGIN">
</td>
</tr>
</table>
</form>
</BODY>
</HTML>

Drugi plik login.php
+++++++++++++++++++++++++++++++++++++++++++++++

<?php
if((!$login) || (!$haslo))

$id=mysql_connect("localhost","my","");

$wynik = (mysql_select_db("baza1", $id));

$sql = "SELECT imie FROM user WHERE login='$login' AND haslo= password('$haslo')";
$sql_result = mysql_query($sql, $id);
$num = mysql_num_rows($sql_result);
if($num == 1)
{
echo("<b>Jestes prawidlowym uzytkownikiem!!!</b><BR>");
echo("<B>Podales nastepujaca nazwe uzytkownika: $username</B><BR>");
echo("<B>Podales nastepujace haslo: $password</B><hr color=red>");
}
else if($num == 0)
{
echo("<B>Nie masz autoryzacji!!!</B><hr color=red>");
}
?>

++++++++++++++++++++++++++++++++++++++++++++++++
Yarecki
Mogę się mylić, bo nie używam password() tylko md5(), ale nie wstawiaj wartości password() w ''.
Dodatkowo możesz użyć trim(), żeby nie zaplątały się gdzieś białe znaki.
  1. <?php
  2.  
  3. $sql = 'SELECT imie FROM user WHERE login= '' . $login . '' AND haslo= password(' . trim($haslo) . ')';
  4.  
  5. ?>
czudix
Hej, jakbys sobie nie poradzil jeszcze z tym problemem, to proponuje sprawdzic w bazie czy nie ograniczyles dlugosci pola. Po wygenerowaniu do bazy moze Ci obcinac kilka znakow, dlatego nie moze znalezc hasla generowanego w zapytaniu przy logowaniu.

Powodzenia
CzarnyKot
Moze MySQL-a masz po apgrejdzie ...
spropbuj zamiast funkcji password uzyc funkcji old_password ... jesli zadziala - sprawa jest oczywista (MySql - 4.1.10 - jak sie nie myle)
donpablo
nie wpatrywałem się w kod ale po co stosować funkcję password??
Lepszym rozwiazaniem (zresztą najczęściej stosowanym) jest użycie kodowania md5 , czyli tkzw. kodowaniem jednostronnym 32 bitowym. Wpisz do bazy danych hasło zakodowane własnie tym algorytmem (md5("$haslo")) i podczas autoeyzacji porównuj ciąg znaków z bazy z tym podanym przez usera np.:
if(md5("$wpis_hasla_z_formularza") == $haslo_z_bazy_danych)) {
//to akcja
}
aleksander
jaql: zasosuj bbcode w pierwszym poście, albo zamknę temat.
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.