? Разликата между if(isset($_SESSION)) и if($_SESSION==&quot

anonimen

Super Moderator
След като цяла вечност се мъчих да разбера защо кодът
PHP:
if(isset($_SESSION['username']) && isset($_SESSION['password'])){
   define("Login", TRUE);
}
else{
   define("Login", FALSE);
}
echo Login;
връща TRUE при положение, че сесии не съществуват :shock: (проверих с echo $_SESSION['username']), реших да пиша тук. Почнах да се чудя дали сървърът нещо се е скапал :x , ама едва ли...

Проблема вече го реших:0) като промених първия ред на
if($_SESSION['username'] != "" && $_SESSION['password'] != "")
но продължавам да не разбирам разликата между
isset($var) и $var!="";

:idea:
 
Ако имаш $var = "";
И после var_dump-неш тая променлива ще имаш string. Т.е. тя не е NULL.
Следователно, ако направиш isset($var) ще върне TRUE. Щото хем е дефинирана и не е NULL.

isset() проверява дали променливата е дефинирана и не е NULL.

$var != "" проверява дали е празна като тип данни string.
 
Може би идеята е била нещо такова:

<?php
//
// Start na sesia
//
session_start();

//
// Definirane na wsichki sesijni promenliwi (ako ne sa definirani)
//
if( ! isset($_SESSION['username']) ){
$_SESSION['username'] = "";
}

if( ! isset($_SESSION['password']) ){
$_SESSION['password'] = "";
}

//
// Izpolzwane na sesijnite promenliwi, weche definirani
//
if($_SESSION['username'] != "" && $_SESSION['password'] != "") {
define("Login", TRUE);
} else {
define("Login", FALSE);
}
?>
 
index каза:
http://techtalk.virendrachandak.com/php-isset-vs-empty-vs-is_null/
това е разликата...
Значи всъщност isset() връща FALSE само ако променливата е NULL или не й е присвоена стойност, а !empty() - когато променливата е интервал или TRUE. Полезна таблица :)

Т.е., най-добре да използвам и двете ли? ( if(isset($var) && !empty($var)) )
 
anonimen каза:
index каза:
http://techtalk.virendrachandak.com/php-isset-vs-empty-vs-is_null/
това е разликата...
Значи всъщност isset() връща FALSE само ако променливата е NULL или не й е присвоена стойност, а !empty() - когато променливата е интервал или TRUE. Полезна таблица :)

Т.е., най-добре да използвам и двете ли? ( if(isset($var) && !empty($var)) )
едното обратното на другото
 
Много често се налага да се използват тези две функции наобратно. В случая !isset() ще ти свърши по-голяма работа и реално да качиш else блока горе.
Просто обръщаш условията.

С isset() по-скоро се проверява дали има зададен ключ на масива(защото сесиите се представят като масиви), а не дали има стойност. Можеш да правиш и двете проверки едновременно, ако очакваш празен стринг на дадения ключ.
 
index каза:
едното обратното на другото
Написал съм isset и !empty, все едно "има" и "не" "липсва". Виж пак : )

Revelation каза:
В случая !isset() ще ти свърши по-голяма работа и реално да качиш else блока горе.
Просто обръщаш условията.
Значи
PHP:
if(!isset($_SESSION['username']) && !isset($_SESSION['password']))
{
   define("Login", FALSE);
}
else
{
   define("Login", TRUE);
}
ще е по-добре от другия вариант?
Revelation каза:
ако очакваш празен стринг на дадения ключ.
Да, в единият случай очаквам празен низ - ако не съществува сесия.
 
Ами щом очакваш, минавай и през empty, след като това може да е валидна стойност.

Макар че, можеш да ползваш и само empty(). Така или иначе, ако няма сетната сесия дори и empty ще отбележи false, както и ще покрие условието, че е празна сесията, ако е зададена.
Така че, изпробвай, но би трябвало дори само с empty() да ти върши работа.
 

Back
Горе