Добрый день! PHP: <? $visitCounter = 0; if (isset($_COOKIE['visitCounter'])) { $visitCounter = $_COOKIE['visitCounter']; $visitCounter++; } $lastVisit = ''; if (isset($_COOKIE['lastVisit'])) $lastVisit = date('d-m-Y H:i:s', $_COOKIE['lastVisit']); if (date('d-m-Y', $_COOKIE['lastVisit']) != date('d-m-Y')) { setcookie("visitCounter", $visitCounter, 0x7FFFFFFF); setcookie("lastVisit", time(), 0x7FFFFFFF); } if($visitCounter ==1) echo 'Welcome, new friend!'; else echo 'This is your '.$visitCounter.' visit. Your last visit was at '.$lastVisit.'. Nice to see you again!'; Если стоит: error_reporting(E_ALL); ini_set('display_errors', '1'); ...код не работает и выдает ошибки: Notice: Undefined index: lastVisit in C:\OpenServer\domains\localhost\php\cookie.inc.php on line 10 Warning: Cannot modify header information - headers already sent by (output started at C:\OpenServer\domains\localhost\php\cookie.inc.php:10) inC:\OpenServer\domains\localhost\php\cookie.inc.php on line 11 Warning: Cannot modify header information - headers already sent by (output started at C:\OpenServer\domains\localhost\php\cookie.inc.php:10) inC:\OpenServer\domains\localhost\php\cookie.inc.php on line 12 This is your 0 visit. Your last visit was at . Nice to see you again! Если удалить вывод ошибок - код работает. Пожалуйста, помогите побороть ошибки.
10 строка.. а перед ней идет проверка есть ли кука или нет.. если ее нет будет варнинг...а варнинг это отсылка сообщения с хидером естественно.. а потом уже не поменяешь его если он отправлен)) в общем перед тем как обращаться к переменной надо проверять ее состояние..
Спасибо Теперь все работает: PHP: $visitCounter = 0; if (isset($_COOKIE['visitCounter'])) { $visitCounter = $_COOKIE['visitCounter']; ++$visitCounter; } $lastVisit = ''; if (isset($_COOKIE['lastVisit'])) { $lastVisit = date('d-m-Y H:i:s', $_COOKIE['lastVisit']); if (date('d-m-Y', $_COOKIE['lastVisit']) != date('d-m-Y')) { setcookie("visitCounter", $visitCounter); setcookie("lastVisit", time()); } } else { setcookie("lastVisit", time()); setcookie("visitCounter", $visitCounter); }
тем, что isset пропустит ПРОСТУЮ переменную $_COOKIE['имя'], filter_has_var проверит каким именно методом пришла переменная $_COOKIE['имя'], а именно в данном случае проверит, является ли она кукисом.
если не долбить мозг и не приписывать $_COOKIE['имя'] = 1 или воспользовавшись extract то isset достаточно --- Добавлено --- да еще и с капсом $_COOKIE $_cookie две разные переменные
isset не будет достаточно для проверки, каким именно методом пришла кука, для этого используется filter_has_var, а если Вы хотите проверить ОБЫЧНУЮ переменную, то используйте !empty, которая СРАЗУ проверит наличие переменной и её значения, если оно есть, в то время, как isset вернёт true, если переменная установлена, но не имеет значения.
мне будет достаточно проверить куки с помощью isset на существование ключа. Два выбросьте из головы говно, где якобы кодер объявит эту переменную в своем говнокоде. Три. на существовании переменной так же мне достаточно isset или ( блин забыл название ): $value ?? null !empty - для этого грех
нет, и не надо обобщать анотацию правильности. Следует учитывать для чего проверять. достаточно isset
empty имеет смысл тогда когда переменная должна существовать и не должна быть равна нулю или пустоте если это строковая)) я использую ее в этом случае)) а isset в том случае когда пофиг что получаешь - лишь бы получить)
Говнокодерам на память: PHP: <?php $a = 2; if ( $a === 3 ) { $int = $a; } if ( !empty ( $int ) ) { $int ... } --- Добавлено --- Говнокодер (с)
!empty одновременно проверяет есть ли переменная и имеет ли она значение, isset вернёт true, если переменная установлена, но не имеет значения, универсальный правильный вариант - !empty
PHP: $var = 0; if(!empty($var)){ echo 'фигня'; } переменная определена)) но фигня не появится) --- Добавлено --- а вот так вот фигня заработает так как надо PHP: $var = 0; if(isset($var)){ echo 'фигня'; }
он щас скопирует текст и начнет как автоответчик лепить свое. Мы знаем что делает isset и empty но логическое применение у говнокодера не правильно
потому isset вернула true при пусто И они являются пустотой. Следующие значения воспринимаются как пустые: "" (пустая строка) 0 (целое число) 0.0 (дробное число) "0" (строка) NULL FALSE array() (пустой массив) $var; (переменная объявлена, но не имеет значения)