Array ( [0] => dsfsdf [username] => dsfsdf [1] => 8

freboy

Registered
Array ( [0] => dsfsdf [username] => dsfsdf [1] => 81dc9bdb52d04dc20036dbd8313ed055 [passhash] => 81dc9bdb52d04dc20036dbd8313ed055 ) Невалидно име или парола!
Какво е това и ако е проблем плс оправете ми го +1
Код:
<?php
include "config.php";
include "inc.php";
function unesc($x) {
if (get_magic_quotes_gpc())
return stripslashes($x);
return $x;
}
$username = $_POST["username"];
$password = $_POST["password"];
$res = "SELECT username, passhash from users WHERE username ='$username'";
$row = mysql_query($res,$con);
print_r(mysql_fetch_array($row));
function erorr($text = "Невалидно име или парола!")
{
die("$text");
}
if (!$row)
erorr();
if ($row["passhash"] != md5($password))
erorr();
if ($row["enabled"] == "no")
erorr("Невалидно име!");
setcookie(user,$username,time()+3600,localhost,1) 
?>
 
Ако не искаш при грешка, да ти се появява структурата на масива, махни този ред:

Код:
print_r(mysql_fetch_array($row));
 
Това вече е друго, но тук вариантите са много.

1. Дали dsfsdf е същото, като записа, който имаш в базата данни?

2. Каква е вероятността някъде да има интервал, примерно в базата данни да имаш "dsfsdf " - с интервал отзад или отпред? Или пък когато пишеш във формуляра, да слагаш по невнимание интервал? Ако си копирал потребителското име в клипборда и само пействаш, обикновенно е копиран още един интервал или невидим символ за нов ред. Най-добре този ред:

Код:
$username = $_POST["username"]

го промени на:
Код:
$username = trim($_POST["username"])

така си сигурен, че няма да има нежелани интервали преди или след стойността. Но пак си провери стойността в базата-данни. Същото важи и за паролата.

3. Каква е вероятноста в паролата да имаш някакви специални символи като кавички, апострофи и др., които при вкарването в базата данни са ескейпнати, а пък сега пропускаш този момент?

4. При две различни събития - неправилно потребителско име и неправилна парола, изкарваш едно и също съобщение за грешка и реално не знаеш на кое от двете места е грешката. Промени този код:

Код:
if (!$row)
erorr();
if ($row["passhash"] != md5($password))
erorr();

с този:

Код:
if (!$row)
    echo "неправилно потребителско име";
if ($row["passhash"] != md5($password))
    echo "неправилна парола"

Макар заявката да е елементарна и да се съмнявам, че там имаш грешка, за целите на теста можеш да пробваш и да принтираш mysql грешка, ако има такава:

Код:
$row = mysql_query($res,$con) or die(mysql_error());
 

Back
Горе