Witam serdecznie. Ostatnio pisalem sobie stronki do mojej pracz i postanowilem sie yajac kwestia logowania.mialem przyklad ze szkoly i przerobilem go na swoje potrzeby jednak jak go uruchomilem bylem zaskoczony iz nie dziala co wiecej postanowilem sprawdzic oryginal i co tez nie dzialal jest zupelnie bez sensu niby wszystko jest ok haslo ok login ok i nic awaria. Siedze juz 2 dzien nad tym i nie wiem co nie tak jest juz mi sie myli co z czym wiec prosze o pomoc moze to ktos z Was rozkmini:-) oto kod php z formularzem do logowania:
<?
?>
<html>
<body>
<form action='zaloguj2.php' method='POST'>
<div>
<label>Login</label>
<input type='text' name='txtLogin' maxlength='30' class='txtin' />
</div>
<div>
<label>Hasło</label>
<input type='password' name='pwdHaslo' maxlength='20' class='txtin' />
</div>
<div>
<center><input type='submit' name='zaloguj' value='Zaloguj' /></center>
</div>
</form>
</body>
</html>
a to strona sprawdzajaca logowanie:
<?
$Haslo = $_POST['pwdHaslo'];
// Funkcja sprawdzająca poprawność danych logowania.
// Jeśli są poprawne, zwraca TRUE, w przeciwnym razie - FALSE.
function logowanie_sprawdz ($login_input, $haslo_input)
{
if ($login_input == '' || $haslo_input == '')
return FALSE;
$server = " ";
$database = "[ ]";
$polecenieSQL = "SELECT * FROM dbo.Klient WHERE Login = '$login_input'";
// Polaczenie z serwerem.
$db_connection = @mssql_connect($server)
or
die("Połączenie z serwerem $server nie powiodło się.");
// Wybranie biezacej bazy danych.
$result = @mssql_select_db($database, $db_connection)
or
die("Nie można otworzyć bazy $database.");
$wyniki = @mssql_query($polecenieSQL)
or
die("Nie można sprawdzić danych użytkownika. Proszę spróbować ponownie.");
// Nie ma zarejestrowanego użytkownika o podanej nazwie.
if ($wyniki == FALSE)
return FALSE;
else
{
$klient = @mssql_fetch_array($wyniki);
$login_bd = $klient['Login'];
$haslo_bd = $klient['Haslo'];
if ((strcmp($login_bd, $login_input) == 0
) && (strcmp($haslo_bd,($haslo_input)) == 0)) //if ((strcmp($login_bd, $login_input) == 0) && (strcmp($haslo_bd, $haslo_input) == 0))
{
return TRUE;
}
else
return FALSE;
}
} // function logowanie_sprawdz()
?>
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
<TITLE>Witamy</TITLE>
<link rel="Stylesheet" href=" " type="text/css" />
</HEAD>
<BODY>
<? // Sprawdzenie danych logowania, podanych przez użytkownika.
if (!isset($_POST['txtLogin']) || $_POST['txtLogin'] == '' || !isset($haslo) || ($haslo) == '')
$wynik_logowania = FALSE;
else
{
// Prosta obrona przed atakiem SQL injection:
// wycięcie znaków, które mogłyby zostać wykorzystane przez hackera.
$znaki_zabronione = array(";",":","'","*",".","-","="); $login = str_replace($znaki_zabronione,"",$_POST['login']);
$wynik_logowania = logowanie_sprawdz($login, $haslo);
}
if ($wynik_logowania == TRUE)
{
$server = " ";
$database = "[ ]";
$polecenieSQL = "SELECT * FROM dbo.Klient WHERE Login = '$login'";
// Polaczenie z serwerem.
$db_connection = @mssql_connect($server, $srv_login, $srv_password)
or
die("Połączenie z serwerem $server nie powiodło się.");
// Wybranie biezacej bazy danych.
$result = @mssql_select_db($database, $db_connection)
or
die("Nie można otworzyć bazy $database.");
$proceduraSQL = mssql_init("dbo.Login_Sprawdz", $db_connection);
mssql_bind($proceduraSQL,"@Par_Login", $login, SQLVARCHAR);
$wyniki = mssql_execute($proceduraSQL)
or
die("Nie można utworzyć koszyka."); // Komunikat do zmiany.
$klient = @mssql_fetch_array($wyniki);
$IdKlienta = $klient['IdKlienta'];
$polecenieSQL = "INSERT dbo.KlientZalogowany (IdSesji, IdKlienta, OstatniaZmiana) ";
$polecenieSQL .= "VALUES ('$IdSesji', $IdKlienta, GETDATE())";
$wyniki = @mssql_query($polecenieSQL)
or
die("Nie można zalogować użytkownika. Proszę spróbować ponownie.");
$_SESSION['zalogowany'] = TRUE;
$_SESSION['login'] = $login;
print("<h3>Jesteś zalogowany jako $login.</h3>"); }
if ($wynik_logowania == FALSE)
{
print("<h3 id='blad'>Niepoprawna nazwa użytkownika lub hasło.</h3>"); print("<br /> Nie jesteś jeszcze zarejestrowanym użytkownikiem?"); print("<br /> <a href='rejestracja.php'>Zarejestruj się!</a>"); }
?>
</BODY>
</HTML>
Dodam ze hasla w bazie sa hasowane md5 i w takiej postaci tam trzymane z raczej jasnych wzgledow jeszcze wrzuce procedure jedna co tam uzuwam:
ALTER PROCEDURE [dbo].[Zalogowany_Sprawdz]
@Par_Login varchar(30)
AS
BEGIN
SELECT *
FROM dbo.Klienci
WHERE Login = @Par_Login
END
GO
to chyba wszystko z gory dzieki za pomoc