Задавайте вопросы, мы ответим
Вы не зашли.
проблема вот в чем. имеется код:
//проверяем есть ли пользователь с таким login'ом и password'ом
$res=mysql_query("SELECT * FROM Table1 WHERE login='".$_POST['login']."' AND parol='".$_POST['pass']."'", $db);
$$num_rows=mysql_num_rows($res);
if($$num_rows==0){
echo "Введены не верные логин/пароль или в данный момент происходит обновление базы.";
}
else{ //пользователь найден
$sql = "SELECT id, nrep, login, parol, nam, nrow, detail, sn, status, diagnoz FROM Table1 WHERE login = '".$_POST['login']."' AND parol = '".$_POST['pass']."'";
$res = mysql_query($sql) or exit('Ошибка при выполнении запроса к базе данных.');
if ($num_rows<1) {
echo $num_rows;
$row = mysql_fetch_assoc($res);
print "<div align=left><b>Учетное имя клиента:</b> ";
print $row['login'];
print "<br><b>Клиент: </b>";
print $row['nam'];
print "<br></div>";
выборка происходит даже если пароль пишешь маленькими буквами или большими. в базе самой лежат пароли в разных регистрах (ТипАТакоГа). а тут скрипт выдает данные, даже если все маленькими или всебольшими написать... что не так делаю?
Неактивен
У вас в базе стоит сопоставление, которое игнорирует регистр букв.
Вы можете выставить другое сопоставление (например,
ALTER table MODIFY column VARCHAR(40) COLLATE cp1251_general_cs).
Я, однако, советую Вам хранить не сами пароли, а их хеши, и сравнивать
хеш пароля с тем, что хранится в базе. Это гарантирует, что пароли не
будут добыты, если произойдет утечка базы. Заодно, это решит проблему
с чувствительностью паролей к регистру.
Неактивен
на примере моего скрипта работу с md5 как реализовать?
Неактивен
Лучше SHA1
$res=mysql_query("SELECT * FROM Table1 WHERE login='". addslashes($_POST['login'])."' AND parol=SHA1('".addslashes($_POST['pass'])."')", $db);
Неактивен
да все круто канечна. но у меня данные грузяться с рабочего компа с 1с. там 1с генерит пассы. чет у мя вызявает сомнения что 1си умеет генерить их в sha1.
Неактивен
А кто мешает при заведении пользователя (ведь пароль в открытом виде доступен, насколько
я понимаю) делать SHA1 от открытого пароля средствами MySQL?
P.S. Функция MD5() тоже есть
Неактивен
типа при вставке данных в мискул прописать:
$Query="insert into Table1 values('$id','$nrep','$login',md5('$parol'))";
mysql_query($Query);
а при чтении из нее и проверке:
$res=mysql_query("SELECT * FROM Table1 WHERE login='".$_POST['login']."' AND parol=md5('".$_POST['pass']."'"), $db);
так я понимаю????
Отредактированно wesst (02.08.2007 14:44:42)
Неактивен
Да, только не забывайте про addslashes().
Неактивен
хм. попробывал. чет не катит. в базу пишу так:
$Query="insert into Table1 values('$id','$nrep','. addslashes(['login']).',MD5('".addslashes($_POST['parol'])."'),'$nam')";
mysql_query($Query);
а потом проверяю так:
$res=mysql_query("SELECT * FROM Table1 WHERE login='". addslashes($_POST['login'])."' AND parol=md5('".addslashes($_POST['pass'])."')", $db);
$$num_rows=mysql_num_rows($res);
if($$num_rows==1){
где я тут ступил... теперь пожизни орет что пасс не верен...
Неактивен
В PHP все правильно. Смотрите HTML. Я бы начал с того, что посмотрел на названия
полей. В одном случае в PHP оно у Вас называется parol, в другом - pass.
Неактивен
пишу в базу в одном файле...
со второго идет передача пасса в код $res=mysql_query("SELECT * FROM Table1 WHERE login='". addslashes($_POST['login'])."' AND parol=md5('".addslashes($_POST['pass'])."')", $db);
$$num_rows=mysql_num_rows($res);
if($$num_rows==1){
потому и разница в переменных... чет не пашет...
Неактивен
Думаю, что это уже не вопросы по MySQL
Попробуйте вывести переменные, которые доходят до скрипта, посчитать
md5 от пароля, сравнить с тем, что есть в базе... много что можно сделать
Неактивен