Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Абсолютное равенство (===)

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Описание: Очередной глупый вопрос!
UNTRUSTED
Отправлено: 21 Марта, 2012 - 21:13:10
Post Id


Частый гость


Покинул форум
Сообщений всего: 255
Дата рег-ции: Март 2012  


Помог: 2 раз(а)




Здравствуйте! Отдохнули от меня?
Я вам еще вопросик принесУлыбка
Почти всегда и везде используют неточное сравнение (==),
но вот скажем как лучше сделать при проверке md5 пароля?
Вот собственно пример кода
CODE (htmlphp):
скопировать код в буфер обмена
  1. $pass=md5($pass,1)//Выводит в виде двоичной строки из 20 символов
  2. mysql(INSERT...);//А записывает в формате BINARY(20) - 40значного числа
  3. ####### Файл №2 #######
  4. $pass = md5($pass,1);
  5. mysql(SELECT...);
  6. if($pass === $selectpass){...}//Можно так сравнивать??
  7. if($pass == $selectpass){...}//Или так все-таки лучше и быстрее???

(Добавление)
Или вообще лучше так?
 
 Top
DelphinPRO
Отправлено: 21 Марта, 2012 - 21:18:57
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




=== сравнивает еще и типы
== использует приведение типов
сравни

$a = '';
$b = 0;

if ($a == $b) {echo 'EQUAL=='}
if ($a === $b) {echo 'EQUAL==='}

(Отредактировано автором: 21 Марта, 2012 - 21:19:52)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Bio man
Отправлено: 21 Марта, 2012 - 21:19:22
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




$pass всегда string, так что достаточно ==
А еще лучше strcmp
(Добавление)
UNTRUSTED пишет:
Или вообще лучше так?
ни в коем случае. Хоть вероятность совпадения с ложным паролем 1 из 1000000, но все же такая вероятность есть.
(Добавление)
но все же лучше === или strcmp
 
 Top
UNTRUSTED
Отправлено: 21 Марта, 2012 - 21:25:52
Post Id


Частый гость


Покинул форум
Сообщений всего: 255
Дата рег-ции: Март 2012  


Помог: 2 раз(а)




Все догнал, спасибоУлыбка
Я думал, что-то там типо по битам сравнивает, и можно как-нибудь подменить!

PHP.SU пишет:

Жёсткое сравнение с помощью === (сравнение по значению и по типу)
Спойлер (Отобразить)

(Добавление)
Bio man пишет:
А еще лучше strcmp

Ооо! Интересная штука, просто про нее еще пока ничего не знал...
PHP.NET пишет:

Подсказка
Не используйте функцию preg_match(), если необходимо проверить наличие подстроки в заданной строке. Используйте для этого strpos() либо strstr(), поскольку они выполнят эту задачу гораздо быстрее.

И там соответственно ссылки на strcmp нетуУлыбка
Возьму на вооружение.
 
 Top
Bio man
Отправлено: 21 Марта, 2012 - 21:32:30
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




В РНР нету такого типа, как бит. Есть булев тип, строка, целое, рациональное число (дробное, с плавающей точкой, называй как хочешь), массив, ресурс, объект, NULL, но бита нету.
 
 Top
UNTRUSTED
Отправлено: 21 Марта, 2012 - 21:34:12
Post Id


Частый гость


Покинул форум
Сообщений всего: 255
Дата рег-ции: Март 2012  


Помог: 2 раз(а)




А еще лучше strcasecmp для регистронезависимой проверки.. Но это не для пароля, так как шанс что попадется такой же но в другом регистре 0,000001% Улыбка
 
 Top
Bio man
Отправлено: 21 Марта, 2012 - 21:34:36
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




UNTRUSTED пишет:
И там соответственно ссылки на strcmp нету
Потому, что сравнение строк и поиск подстроки не как не похожи и не связаны.

(Отредактировано автором: 21 Марта, 2012 - 21:35:41)

 
 Top
UNTRUSTED
Отправлено: 21 Марта, 2012 - 21:38:21
Post Id


Частый гость


Покинул форум
Сообщений всего: 255
Дата рег-ции: Март 2012  


Помог: 2 раз(а)




Bio man, спасибо!
(Добавление)
Кстати, вот еще вопрос! Из моей прошлой темы!
Я нашел как экранировать бекслэш в preg_match

Никто не знает почему так? Т.е получается что два раза пишем и два раза экранируем, иначе ошибку выдает.

(Отредактировано автором: 21 Марта, 2012 - 21:42:14)

 
 Top
DelphinPRO
Отправлено: 21 Марта, 2012 - 21:41:50
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




UNTRUSTED пишет:
Но это не для пароля, так как шанс что попадется такой же но в другом регистре

такой же, но в другом регистре - это уже должен быть другой пароль Улыбка


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
UNTRUSTED
Отправлено: 21 Марта, 2012 - 21:43:49
Post Id


Частый гость


Покинул форум
Сообщений всего: 255
Дата рег-ции: Март 2012  


Помог: 2 раз(а)




DelphinPRO пишет:
попадется такой же но в другом регистре

Я имел ввиду хешУлыбка
Мы же хеши сравниваемУлыбка
DelphinPRO пишет:
это уже должен быть другой пароль

Ясен пеньУлыбка
(Добавление)
так что кстати будет быстрее работать для такой строки "strcmp" или "==" ?
 
 Top
OrmaJever Модератор
Отправлено: 22 Марта, 2012 - 01:21:17
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




поидее strcmp т.к. это стандартная функцию Си, а оператор равенства ещё нужно обработать, но помоему разница не существена.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
UNTRUSTED
Отправлено: 22 Марта, 2012 - 01:35:55
Post Id


Частый гость


Покинул форум
Сообщений всего: 255
Дата рег-ции: Март 2012  


Помог: 2 раз(а)




OrmaJever пишет:
оператор равенства ещё нужно обработать

Ну в этой функции тоже оператор равенства присутствует
PHP.NET пишет:

Возвращает отрицательное число, если str1 меньше, чем str2, положительное число, если str1 больше, чем str2, и 0 если строки равны.

Итого получается так:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2. $var1 = "Hello";
  3. $var2 = "Hello";
  4. if (strcmp($var1, $var2) == 0) {
  5.    echo '$var1 равно $var2';
  6. }
  7. ?>
 
 Top
OrmaJever Модератор
Отправлено: 22 Марта, 2012 - 02:03:28
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Ну во-первых здесь уже сравниваются числа, а этот оператор из низкоуровневого Си, а сравнения строк это уже особеность php.
Во-вторых можно написать так
PHP:
скопировать код в буфер обмена
  1. $var1 = "Hello";
  2. $var2 = "Hello";
  3. if (!strcmp($var1, $var2)) {
  4.     echo '$var1 равно $var2';
  5. }

Хотя не думаю что это что-то изменит. Не надо пользоватся этоц функцией в php, она ухудшит код, а преймуществ не даст.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
DelphinPRO
Отправлено: 22 Марта, 2012 - 02:15:56
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




UNTRUSTED че ты паришься? Улыбка чекай пароли так как все это делают - проверкой наличия в БД записи с парой login\password;

Улыбка


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
UNTRUSTED
Отправлено: 22 Марта, 2012 - 02:31:40
Post Id


Частый гость


Покинул форум
Сообщений всего: 255
Дата рег-ции: Март 2012  


Помог: 2 раз(а)




DelphinPRO пишет:
проверкой наличия в БД записи с парой login\password;

Не могу.. мне нужно чтобы после n неверных попыток авторизации, логин автоматичесуи блокировался, с восстановлением доступа только в письменном виде!!

(Отредактировано автором: 22 Марта, 2012 - 02:32:07)

 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB