Поэтому я делаю сценарий входа в систему, но, похоже, он не работает. (Это всегда говорит о том, что имя пользователя / пароль неверны.
Вот сценарий:
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';
}
Кстати по реестру я использовал crypt ()
$pa = mysql_real_escape_string($_REQUEST['pass']);
$pass = crypt($pa);
Предполагается, что мой скрипт выдает эхо (как тест), но он постоянно говорит, что мое имя пользователя / пароль неверно.
РЕДАКТИРОВАТЬ: я буду менять mysql_ на mysqli_
РЕДАКТИРОВАТЬ 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> </td>
<td> </td>
<td><input type="submit" name="Submit" value="Login"></td>
<td> </td>
<tr>
crypt()
будет возвращать новый хэш каждый раз, когда он вызывается (посмотреть на себя), поэтому вы не можете просто использовать ==
сравнить их. Что вы можете сделать, это использовать 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
ограничение
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'";