За последние 24 часа нас посетили 23709 программистов и 1556 роботов. Сейчас ищут 860 программистов ...

Помогите разобраться с условием

Тема в разделе "PHP для новичков", создана пользователем SamyRed, 25 авг 2015.

  1. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Доброго времени суток, подскажите, пожалуйста, почему в этом коде:
    Код (PHP):
    1.     //Проверка пароля
    2.     
    3.     $pass_false = 0;
    4.     
    5.     if (isset($_POST["pass"])){
    6.     if ($_POST["pass"] == "" and $_POST["pass"] == " "){
    7.         $pass_false = 1;
    8.     }
    9.     if ($pass_false != 1 and strlen($POST["pass"]) < 6){
    10.         $pass_false = 2;
    11.     }
    12.     if ($_POST["pass"] != "" and $_POST["pass"] != " " and !preg_match("#^[A-Za-z0-9+_+-+ ]+$#",$_POST["pass"])){
    13.         $pass_false = 3;
    14.     }
    15.  
    pass_false возвращает "2" даже когда пароль больше шести?

    Добавлено спустя 12 минут 57 секунд:
    P.S. Он выдаёт 2 всегда кроме третьего условия. То есть даже когда отправляю пустую форму или пробел
     
  2. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Код (PHP):
    1. $POST["pass"]) < 6
    тут ошибка

    Добавлено спустя 23 секунды:
    IDE Должна была тебе подсветить ошибку.
     
  3. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Спасибо, понял.
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а я не вижу ошибки
     
  5. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    В смысле? Там написано $POST... а надо $_POST

    Добавлено спустя 22 секунды:
    Когда исправил - всё заработало.
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    SamyRed, ты знаешь разницу между and и && ?
    тут эффект одинаковый, но вообще, чтобы не словить нежданчик, лучше ставь везде &&
     
  7. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Я знал что разница есть и то изменение and на && иногда помогает, но не знал в чём разница. Спасибо, буду знать.
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    А я проглядел.
     
  9. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    блин не понимаю, зачем вы ограничиваете пользователей в воде пароля? Раз все равно он хешится.
    Какая вообще разница, что они там впишут, их проблемы, нас это не должно заботить.
     
  10. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Прикольный код. Это условие никогда не выполнится. Нельзя одновременно быть и пустой строкой и пробелом :) Даже если and заменить на && или ещё что-то. Кстати, я просто никогда не пишу and, поэтому меня не заботит, какой у него приоритет
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    При чем тут хеш. Короткие пароли можно перебрать хоть руками.
     
  12. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    Притом, что в набранном виде его никто не хранит.
    Принято шифровать/криптовать пароль.
    Да вот только перебрать у тебя не получится. ;)
     
  13. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ещё раз. Перебрать короткий пароль можно ВВОДЯ КОРОТКИЙ ПАРОЛЬ в форму =)
     
  14. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    AntiBrut-не не слышал!
     
  15. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    @mkramer, никогда не говори "никогда":
    Код (PHP):
    1. <?php
    2.  
    3. $arr = [null, '', ' ', '0', '00', '1', 0, 1];
    4. foreach ($arr as $a) {
    5.   var_dump($a, ($a == '' and $a == ' '));
    6. } 
    NULL
    bool(false)
    string(0) ""
    bool(false)
    string(1) " "
    bool(false)
    string(1) "0"
    bool(false)
    string(2) "00"
    bool(false)
    string(1) "1"
    bool(false)
    int(0)
    bool(true)

    int(1)
    bool(false)

    Да, все в курсе, что в $_POST не бывает настоящих целых. Никогда…
     
  16. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    @artoodetoo, спасибо за интересный прикол от php
     
  17. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Стоп. Вы хотите сказать, что || имеет приоритет выше, чем and, но ниже, чем &&?
    +1.
    Сишных ||и && - с головой. И ни разу не было вооооооообще никаких проблем и не очевидного поведения.
     
  18. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    кто это хочет сказать?

    Добавлено спустя 6 минут 22 секунды:
    || и && имеют приоритет выше, чем or и and. В то же время в PHP || имеет равный приоритет с &&. Или я неправ?

    В других языках, где только одна пара логических "И" и "ИЛИ", у "И" приоритет больше, чем у "ИЛИ": SQL, C, Java, Pascal…
     
  19. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Не, && конечно выше. Иначе бы пользоваться невозможно было. https://php.net/manual/ru/language.operators.precedence.php
     
  20. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Ok, значит тут PHP ведет себя стандартно :)
     
  21. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    странный ты