За последние 24 часа нас посетил 18681 программист и 1604 робота. Сейчас ищут 939 программистов ...

isset , что я делаю не так

Тема в разделе "PHP для новичков", создана пользователем pnp2000, 30 янв 2012.

  1. pnp2000

    pnp2000 Активный пользователь

    С нами с:
    22 дек 2011
    Сообщения:
    35
    Симпатии:
    0
    Адрес:
    Россия
    вот код
    Код (PHP):
    1. if (!isset($_SERVER['PHP_AUTH_USER'])) {
    2.     header('WWW-Authenticate: Basic realm="TST Portal v0.1a"');
    3.     header('HTTP/1.0 401 Unauthorized');}
    4.  
    5. if (isset($_SERVER['PHP_AUTH_USER']) and isset($_SERVER['PHP_AUTH_PW'])) {
    6.     echo "ok";
    7. }else{
    8.     echo "nok";
    9. } 
    цель проста , если ползовтель нажимает отмену или вводит только логин или пароль , то делать nok . Но почему-то если написать что-то то ы nok не кидает :(
    уже пробовал вместо and : AND , & и &&
     
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    может они пустые? тогда они isset, но empty =)

    сделай вардамп и посмотри
     
  3. AndreJM

    AndreJM Активный пользователь

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    Логичнее было бы так:
    Код (PHP):
    1. if (!isset($_SERVER['PHP_AUTH_USER'])) {
    2.     header('WWW-Authenticate: Basic realm="TST Portal v0.1a"');
    3.     header('HTTP/1.0 401 Unauthorized');
    4.     echo "nok";
    5.     exit;
    6. } else {
    7.  echo "ok";
    8. }  
     
  4. pnp2000

    pnp2000 Активный пользователь

    С нами с:
    22 дек 2011
    Сообщения:
    35
    Симпатии:
    0
    Адрес:
    Россия
    ну эта часть кода не так важна , меня больше интересует
    Код (Text):
    1. if (isset($_SERVER['PHP_AUTH_USER']) and isset($_SERVER['PHP_AUTH_PW'])) {
    2.     echo "ok";
    3. }else{
    4.     echo "nok";
    5. }
     
  5. AndreJM

    AndreJM Активный пользователь

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    Код (PHP):
    1. - if (isset($_SERVER['PHP_AUTH_USER']) and isset($_SERVER['PHP_AUTH_PW'])) {
    2. + if ($_SERVER['PHP_AUTH_USER'] and $_SERVER['PHP_AUTH_PW']) {
    3.  
     
  6. pnp2000

    pnp2000 Активный пользователь

    С нами с:
    22 дек 2011
    Сообщения:
    35
    Симпатии:
    0
    Адрес:
    Россия
    и что это даёт ????
    Я думаю что проблема в том что если я ввожу только одну часть данных , либо логин либо пароль , то браузер автоматом создеёт пару и получается что вторая переменная есть просто она имет нулевой размер , наверно придётся делать по другому , буду проверять длинну переменной и если она 0 то exit .
     
  7. asokol

    asokol Активный пользователь

    С нами с:
    17 янв 2012
    Сообщения:
    162
    Симпатии:
    0
    pnp2000, все верно Вы говорите. Только не "браузер автоматом создает пару", а приходит пустой логин и "что-то" в пароле или наоборот, и php честно записывает эти значения в PHP_AUTH_USER и PHP_AUTH_PW, соответственно. А isset, как известно, проверяет значение на NULL.
    Замените код в Вашем 1 посте на тот, что привел AndreJM в своем 1 посте. Только замените:
    Код (Text):
    1. if (!isset($_SERVER['PHP_AUTH_USER'])) {
    - на:
    Код (Text):
    1. if (!isset($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'])
    2.     || $_SERVER['PHP_AUTH_USER'] != 'логин' || $_SERVER['PHP_AUTH_PW'] != 'пароль'
    3. ) {
     
  8. AndreJM

    AndreJM Активный пользователь

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    Код (PHP):
    1. $a = "";
    2. var_dump($a == true);
    3.  
    Код (Text):
    1.  
    2. 1. False
    3. 2. True
    Задайтесь вопросом: Почему так?
    И почему мое условие Корректно
    Код (PHP):
    1. + if ($_SERVER['PHP_AUTH_USER'] and $_SERVER['PHP_AUTH_PW']) {
    2.  
     
  9. asokol

    asokol Активный пользователь

    С нами с:
    17 янв 2012
    Сообщения:
    162
    Симпатии:
    0
    Действительно, почему же оно "Корректно"?
     
  10. AndreJM

    AndreJM Активный пользователь

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    =))
    ну как известно оператор IF глотает исключительно истину (true), как бы вы его не пытались обмануть, и тем самым:
    Код (Text):
    1. (boolean)"" = false
     
  11. asokol

    asokol Активный пользователь

    С нами с:
    17 янв 2012
    Сообщения:
    162
    Симпатии:
    0
    Речь не об этом. Я имел в виду, что означенное выше условие будет генерировать E_NOTICE при определенных условиях. С Вашего позволения, я не буду описывать эти условия.
     
  12. AndreJM

    AndreJM Активный пользователь

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    Это после вот этого
    Код (Text):
    1. if (!isset($_SERVER['PHP_AUTH_USER'])) {
    оно будет генерить нотис?
     
  13. asokol

    asokol Активный пользователь

    С нами с:
    17 янв 2012
    Сообщения:
    162
    Симпатии:
    0
    Я устал. :) Прочитайте, пожалуйста, в хронологическом порядке наши сообщения.
    И вообще, может закончим на этом?
     
  14. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    я ж сразу сказал, что если одна из них пустая, хоть и объявлена, то будет фалс =)

    сделай вардамп, блин.
     
  15. pnp2000

    pnp2000 Активный пользователь

    С нами с:
    22 дек 2011
    Сообщения:
    35
    Симпатии:
    0
    Адрес:
    Россия
    да уже сделал , тут я смотрю без меня тему развили аж пипец :)
    вобщем если что-то вводиш то пустая переменная становится string[0] , как говорится "всё мне ясно стало теперь"