вот код Код (PHP): if (!isset($_SERVER['PHP_AUTH_USER'])) { header('WWW-Authenticate: Basic realm="TST Portal v0.1a"'); header('HTTP/1.0 401 Unauthorized');} if (isset($_SERVER['PHP_AUTH_USER']) and isset($_SERVER['PHP_AUTH_PW'])) { echo "ok"; }else{ echo "nok"; } цель проста , если ползовтель нажимает отмену или вводит только логин или пароль , то делать nok . Но почему-то если написать что-то то ы nok не кидает уже пробовал вместо and : AND , & и &&
Логичнее было бы так: Код (PHP): if (!isset($_SERVER['PHP_AUTH_USER'])) { header('WWW-Authenticate: Basic realm="TST Portal v0.1a"'); header('HTTP/1.0 401 Unauthorized'); echo "nok"; exit; } else { echo "ok"; }
ну эта часть кода не так важна , меня больше интересует Код (Text): if (isset($_SERVER['PHP_AUTH_USER']) and isset($_SERVER['PHP_AUTH_PW'])) { echo "ok"; }else{ echo "nok"; }
Код (PHP): - if (isset($_SERVER['PHP_AUTH_USER']) and isset($_SERVER['PHP_AUTH_PW'])) { + if ($_SERVER['PHP_AUTH_USER'] and $_SERVER['PHP_AUTH_PW']) {
и что это даёт ???? Я думаю что проблема в том что если я ввожу только одну часть данных , либо логин либо пароль , то браузер автоматом создеёт пару и получается что вторая переменная есть просто она имет нулевой размер , наверно придётся делать по другому , буду проверять длинну переменной и если она 0 то exit .
pnp2000, все верно Вы говорите. Только не "браузер автоматом создает пару", а приходит пустой логин и "что-то" в пароле или наоборот, и php честно записывает эти значения в PHP_AUTH_USER и PHP_AUTH_PW, соответственно. А isset, как известно, проверяет значение на NULL. Замените код в Вашем 1 посте на тот, что привел AndreJM в своем 1 посте. Только замените: Код (Text): if (!isset($_SERVER['PHP_AUTH_USER'])) { - на: Код (Text): if (!isset($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) || $_SERVER['PHP_AUTH_USER'] != 'логин' || $_SERVER['PHP_AUTH_PW'] != 'пароль' ) {
Код (PHP): $a = ""; var_dump($a == true); var_dump(isset($a)); Код (Text): 1. False 2. True Задайтесь вопросом: Почему так? И почему мое условие Корректно Код (PHP): + if ($_SERVER['PHP_AUTH_USER'] and $_SERVER['PHP_AUTH_PW']) {
=)) ну как известно оператор IF глотает исключительно истину (true), как бы вы его не пытались обмануть, и тем самым: Код (Text): (boolean)"" = false
Речь не об этом. Я имел в виду, что означенное выше условие будет генерировать E_NOTICE при определенных условиях. С Вашего позволения, я не буду описывать эти условия.
Я устал. Прочитайте, пожалуйста, в хронологическом порядке наши сообщения. И вообще, может закончим на этом?
я ж сразу сказал, что если одна из них пустая, хоть и объявлена, то будет фалс =) сделай вардамп, блин.
да уже сделал , тут я смотрю без меня тему развили аж пипец вобщем если что-то вводиш то пустая переменная становится string[0] , как говорится "всё мне ясно стало теперь"