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
4.10.2008, 20:15:47
hmm
<?php
?>
podtym wrzuć
<?php
?>
i powiedz / pokaż czy zwróciło Tobie tablice tego użytkownika.
melkorm
4.10.2008, 20:21:25
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
<?php
?>
i zobacz czy dane się zgadzają.
string(5) "admin" string(10) "tymczasowe"
hmmm i takie mam właśnie w bazie
melkorm
4.10.2008, 20:30:00
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
ale w bazie hasło jest zaszyfrowane.nie rozumiem tego
michalkjp
4.10.2008, 20:44:31
"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
4.10.2008, 20:48:27
zrób w phpmyadminie
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.
no a wiec tak: zapytanie wykonało się poprawnie
michal,co proponujesz w zamian? ;>
michalkjp
4.10.2008, 21:00:00
Cytat(melkorm @ 4.10.2008, 20:48:27 )

oczywiście że można -.-"
Wydawało mi się, że to jest jakaś funkcja PHP

(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']}");
melkorm
4.10.2008, 21:01:09
Cytat
no a wiec tak: zapytanie wykonało się poprawnie
hm ale nie sparwdziłeś tego co ja psiałem ? ... .
sprawdziłam.naprawdę początkuję w temacie
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
4.10.2008, 21:14:44
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
4.10.2008, 21:15:53
to pod zapytaniem daj:
<?php
?>
zobaczymy czy w ogóle zapytanie się wykonuje ;]
string(95) "SELECT username, access,admin FROM user WHERE username='admin' AND haslo=password('tymczasowe')"
melkorm
4.10.2008, 21:24:36
sorry na $result......
resource(4) of type (mysql result)
michalkjp
4.10.2008, 21:35:54
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
4.10.2008, 21:38:17
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

Cytat
bool(false) to coś jest chyba nie tak, bo $res powinno być tablicą.
gdy mysql zwraca pusty wynik $row ustawione zostaje na false

bo chyba chodziło Ci o $row a nie $res :] ?
michalkjp
4.10.2008, 21:43:12
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
bo chyba chodziło Ci o $row a nie $res :] ?
Racja, chodziło o $row.
ale kicha :/ muszę to dzisiaj zrobić :/
michalkjp
4.10.2008, 21:44:54
Ehhh... $result = mysql_query($query);
Czy tu czegoś nie brakuje?
a taki warunek ma prawo bycia? if($row) {
melkorm
4.10.2008, 21:51:38
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ć -.-"
ok,wiec jak zmienic na md5?
michalkjp
4.10.2008, 21:58:56
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
4.10.2008, 22:03:25
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:
<?php
?>
i nawet nie musisz się bawić w metode oczyszczającą string hasła .... . No i oczywiście w zapytaniu dajesz poprostu:
WHERE haslo = '$haslo'
wsio.
mhmm mało tu dziewczyn - przyzwyczajenie ;]
koleżanka
michalkjp
4.10.2008, 22:11:04
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

W każdym bądź razie życzę powodzenia z tym problemem, bo ja idę czytać
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
4.10.2008, 23:05:36
AND haslo = '$haslo'
błędu już nie wywala,ale dalej nie wchodzi do pętli if($row) {

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.