Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]skrypt logowania
Forum PHP.pl > Forum > Przedszkole
eki
Witam,próbuje uruchomić u siebie skrypt logowania znaleziony na jakiejś stronce i niestety nie działa.po podaniu loginu i hasła nic się nie dzieje,nie przenosi do strony index2.php jak powinien. kod skryptu :
CODE
ob_start();
require_once('connect.php');
function usun($data){

GLOBAL $dbc;
if (ini_get('magic_quotes_gpc')){
$data = stripslashes($data);
}
return mysql_real_escape_string($data, $dbc);
}if (isset($_POST['submit'])){

if (empty($_POST['login'])){
$message .= 'Nie podałeś loginu
';
$l = FALSE;
}else{
$l = usun($_POST['login']);
}

if (empty($_POST['haslo'])){
$message .= 'Nie podałeś hasła
';
$h = FALSE;
}else{
$h = usun($_POST['haslo']);
}if ( $l && $h ){

$query = "SELECT username, access,admin FROM user WHERE username='$l' AND haslo=password('$h')";
$result = mysql_query($query);
$row = mysql_fetch_array ($result, MYSQL_ASSOC); if($row){
session_start();
$_SESSION['username'] = $row['username'];
$_SESSION['access'] = $row['access'];
$_GET['cmd'] = 'ok';
echo 'zalogowany';
header ("Location: index2.php?cmd={$_GET['cmd']}");
exit(); // przekierowuje nas na jaka strone chcemy
}else{
$message .= 'Błędne hasło lub login
';
}
mysql_close();
}else{
$message .= 'Spróbuj jeszcze raz';
}
}
ob_end_flush();
?>
tutaj formularz
<?
if(isset($message)){
echo $message;
}
?>
melkorm
hmm
  1. <?php
  2. $row = mysql_fetch_array ($result, MYSQL_ASSOC);
  3. ?>

podtym wrzuć
  1. <?php
  2. var_dump($row);
  3. ?>


i powiedz / pokaż czy zwróciło Tobie tablice tego użytkownika.
eki
bool(false)
melkorm
czyli nie znalazło użytkownika o podanym loginie i haśle i nie przeszło warunku if($row) teraz zrób to samo ale daj
  1. <?php
  2. var_dump($l, $h)
  3. ?>


i zobacz czy dane się zgadzają.
eki
string(5) "admin" string(10) "tymczasowe"
hmmm i takie mam właśnie w bazie
melkorm
a powinieneś mieć:

Kod
password('$h')


hasło za hashowane :] (oczywiście w bazie)

polecam:
http://dev.mysql.com/doc/refman/5.0/en/password-hashing.html
eki
ale w bazie hasło jest zaszyfrowane.nie rozumiem tego
michalkjp
"SELECT username, access,admin FROM user WHERE username='$l' AND haslo=password('$h')"

Hmmm... a czy w zapytaniu SQL można używać funkcji?

Co daje funkcja password? – używam SQL od jakiegoś czasu i nigdy się z tym nie spotkałem. Wiem, lama ze mnie.

BTW. Ten skrypt wygląda jak produkt w sklepie "wszystko za 4 złote". Dostał 10/10 na jakiejś stronce?
melkorm
zrób w phpmyadminie
  1. SELECT password('tuwpiszhaslo') ;

i porównaj to z tym wpisanym w bazie czy napewno jest takie samo ;]

Cytat
Hmmm... a czy w zapytaniu SQL można używać funkcji?


oczywiście że można -.-"

Cytat
Co daje funkcja password?


spójrz na link w moim poście wyżej.
eki
no a wiec tak: zapytanie wykonało się poprawnie
michal,co proponujesz w zamian? ;>
michalkjp
Cytat(melkorm @ 4.10.2008, 20:48:27 ) *
oczywiście że można -.-"


Wydawało mi się, że to jest jakaś funkcja PHP winksmiley.jpg (coś innego niż np. SQL'owe MAX)

Cytat(melkorm @ 4.10.2008, 20:48:27 ) *
spójrz na link w moim poście wyżej.


To jest przenośne? (Zaimplementowane w czymś innym niż MySQL?) Jakieś zalety w porównaniu ze zwykłym MD5?

Cytat(eki @ 4.10.2008, 21:50:33 ) *
michal,co proponujesz w zamian? ;>


Zamiast skryptu? Napisz własny, który będzie używał hashów MD5 (metoda sprawdzona i godna zaufania – tylko szaleńcy próbują rozbijać MD5 w celach innych niż naukowe). No i nie rób czegoś takiego...

$_GET['cmd'] = 'ok';

...

header ("Location: index2.php?cmd={$_GET['cmd']}");

smile.gif
melkorm
Cytat
no a wiec tak: zapytanie wykonało się poprawnie


hm ale nie sparwdziłeś tego co ja psiałem ? ... .
eki
sprawdziłam.naprawdę początkuję w temacie sad.gif
zadałam zapytanie w phpMyAdminie i odnalazł ten rekord i pokazał zaszyfrowane hasło
więc hasło jest poprawne
może coś z przekierowaniem?
czy na stronie index2.php też musi być deklaracja sesji umieszczona?
michalkjp
A przenieś session_start() na początek skryptu.
BTW. Jeśli masz w $res FALSE, to nie wejdzie do pętli – coś musi być nie tak z zapytaniem.
BTW2. Dodaj jakąś podstawową obsługę błędów
if (!$link = mysql_connect($this->host, $this->user, $this->pass)) {
print("ERROR: Cannot connect to database!");
exit();
}

if (!mysql_select_db($this->dbas, $link)) {
print("ERROR: Cannot select database!");
exit();
}

$res = mysql_query($sql, $link);

if (!$res) {
print("ERROR: Cannot execute a query!");
mysql_error();
exit();
}
melkorm
to pod zapytaniem daj:
  1. <?php
  2. var_dump($query);
  3. ?>
zobaczymy czy w ogóle zapytanie się wykonuje ;]
eki
string(95) "SELECT username, access,admin FROM user WHERE username='admin' AND haslo=password('tymczasowe')"
melkorm
sorry na $result......
eki
resource(4) of type (mysql result)
michalkjp
Jeśli


Cytat(eki @ 4.10.2008, 22:28:28 ) *
resource(4) of type (mysql result)


a $res jest
bool(false) to coś jest chyba nie tak, bo $res powinno być tablicą.
melkorm
no to wracamy do punktu wyjścia czyli tego że zapytanie jest dobre ale nei zwraca żadnego wiersza.

może swtórz użytkownika o loginie test i haśle test nie kodując go i wywołaj ten skrypt bez funkcji "password" w zapytaniu snitch.gif

Cytat
bool(false) to coś jest chyba nie tak, bo $res powinno być tablicą.


gdy mysql zwraca pusty wynik $row ustawione zostaje na false snitch.gif

bo chyba chodziło Ci o $row a nie $res :] ?
michalkjp
Ciekawe jest jeszcze to – czy wyświetla coś z $message? Jeśli $res jest FALSE, to nie wchodzi do if'a, tylko do else – a tam powinno dodać do $message tekst. Z tego co zrozumiałem, to nic nie wyświetla.



Cytat(melkorm @ 4.10.2008, 22:38:17 ) *
gdy mysql zwraca pusty wynik $row ustawione zostaje na false snitch.gif

bo chyba chodziło Ci o $row a nie $res :] ?


Racja, chodziło o $row.
eki
ale kicha :/ muszę to dzisiaj zrobić :/
michalkjp
Ehhh... $result = mysql_query($query);

Czy tu czegoś nie brakuje?
eki
a taki warunek ma prawo bycia? if($row) {
melkorm
tak. poprostu błąd jest w tym że zapytanie nei zwraca rekordów czyli błąd jest przy polu password wywal to mzień na md5 w bazie też na md5 i zapewne będzie śmigać -.-"
eki
ok,wiec jak zmienic na md5?
michalkjp
Nie, błąd chyba jest w tym, że w mysql_query nie podaje linka do bazy, tylko samo zapytanie.

Takiego if'a można robić, bo wtedy wartość jest rzutowana na typ bool. Jeśli coś jest w tablicy, to jest true a jeśli tablica jest pusta, to rzutowanie daje false.
melkorm
Cytat
Nie, błąd chyba jest w tym, że w mysql_query nie podaje linka do bazy, tylko samo zapytanie.


poczytaj manula ... gdyby nie mogło wykonać zapytania zwróciło by FALSE - chyba że wykorzystuje nie to połączenie do bazy co trzeba a wątpie by koleżanka* korzystała z większej ilości połączeń niż jedno ;]

eki , a więc w bazie dajesz pole na hasło typu md5 i zapisujesz swoje hasło i przed zapytaniem dajesz:

  1. <?php
  2. $haslo = md5($haslo);
  3. ?>


i nawet nie musisz się bawić w metode oczyszczającą string hasła .... . No i oczywiście w zapytaniu dajesz poprostu:

  1. WHERE haslo = '$haslo'


wsio.

mhmm mało tu dziewczyn - przyzwyczajenie ;]
eki
koleżanka winksmiley.jpg
michalkjp
Cytat(melkorm @ 4.10.2008, 23:03:25 ) *
poczytaj manula ... gdyby nie mogło wykonać zapytania zwróciło by FALSE - chyba że wykorzystuje nie to połączenie do bazy co trzeba a wątpie by kolega korzystał z więkzej ilości połączeń niż jedno ;]


Wiesz, ja już wszystkiego się spodziewam smile.gif

W każdym bądź razie życzę powodzenia z tym problemem, bo ja idę czytać smile.gif
eki
CODE
if ( $l && $h ){
$haslo = md5($h);
$query = "SELECT username, access,admin FROM user WHERE username='$l' AND haslo=$haslo";
$result = mysql_query($query);
$row = mysql_fetch_array ($result, MYSQL_ASSOC); if($row){


hmm
wyrzuca błąd :Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource
melkorm
  1. AND haslo = '$haslo'

snitch.gif
eki
błędu już nie wywala,ale dalej nie wchodzi do pętli if($row) {

sad.gif

ok,
posiedziałam trochę nad tym i działa już

dzięki za wskazówki
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.