2014-10-25 7 views
0

Итак, я создаю скрипт для входа, но он не работает. (Он всегда говорит, что имя пользователя/пароль неправильныйPHP Login не работает?

Вот сценарий:.

if (!empty($_POST)) { 
Include('config.php'); 

$myusername=$_POST['myusername']; 
$mypassword=($_POST['mypassword']); 


$myusername = stripslashes($myusername); 

$mypassword = stripslashes($mypassword); 

$myusername = mysql_real_escape_string($myusername); 

$mypassword = mysql_real_escape_string($mypassword); 

$mypassword = crypt($mypassword); 


$sql="SELECT id FROM members WHERE username='$myusername' and password='$mypassword'"; 

$result=mysql_query($sql); 



$count=mysql_num_rows($result); 


if($count==1){ 



echo 'lol'; 

} 
else { 

echo "Wrong Username or Password"; 

} 

} 

else 

{ 

echo 'You did not post anything'; 

} 

Кстати на регистр, я склепа()

$pa = mysql_real_escape_string($_REQUEST['pass']); 

$pass = crypt($pa); 

Мой скрипт предположительно, чтобы эхо LOL (как тест), но он продолжает говорить, что мое имя пользователя/пароль неверно.

EDIT: я буду менять mysql_ на mysqli_

EDIT 2: Форма:

<br> 
<table width="300" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC"> 
<tr> 
<form name="form1" method="post" action="logging.php"> 
<td> 
<table width="100%" border="0" cellpadding="4" cellspacing="1" bgcolor="#FFFFFF"> 
<tr> 
<td colspan="3"><strong><center>Member Login</center> </strong></td> 
</tr> 
<tr> 
<td width="78">Username</td> 
<td width="6">:</td> 
<td width="294"><input name="myusername" type="text" id="myusername"></td> 
</tr> 
<tr> 
<td>Password</td> 
<td>:</td> 
<td><input name="mypassword" type="text" id="mypassword"></td> 
</tr> 
<tr> 
<td>&nbsp;</td> 
<td>&nbsp;</td> 
<td><input type="submit" name="Submit" value="Login"></td> 
<td>&nbsp;</td> 
<tr> 
+2

Вы широко открыты для инъекций и ваш API является устаревшим. –

+0

@TheBlueDog его правда, что 'mysql_' устарел, но его не сломал – andrew

+0

ваш html-форму ...... ?? – Dinesh

ответ

1

crypt() будет возвращать различные окрошка каждый раз, когда он вызывается (see for yourself), так что вы не можете просто использовать ==, чтобы сравнить их. Что вы можете сделать, это использовать hash_equals() как это (если у вас есть PHP 5.6+)

$sql = "SELECT id, password FROM members WHERE username='$myusername'"; 
$result = mysql_query($sql); 
//check if 1 row exists 
$row = mysql_fetch_assoc($result); 

if (hash_equals($row['password'], $mypassword)) { 
    //correct password 
} 

Для этого, чтобы правильно работать, вы должны убедиться, что каждый username существует только один раз в дб, это легко сделать через UNIQUE ограничения

1

crypt() функции возвращают разные значения при каждом вызове, если вы не прошли какой-либо соли

попробовать это:

$pa = mysql_real_escape_string($_REQUEST['pass']); 
$salt="aaaa"; //you must make it complex string 
$pass = crypt($pa,$salt); 

и проверить его логин как:

$salt="aaaa"; //same salt as above 
$mypassword = crypt($mypassword,$salt); 

$sql="SELECT id FROM members WHERE username='$myusername' and password='$mypassword'"; 

See Here