isset מחזיר true ממשתנה שמוגדר כfalse?

lovemedo

New member
isset מחזיר true ממשתנה שמוגדר כfalse?

שלום לכולם. יש לי פונק' כזאת:
function url_checker($var)
{
if (isset($var))
{
$var = trim( $var );
if (filter_var($var, FILTER_VALIDATE_URL))
{
return $var;
}
else
{
return false;
}
}
else
{
return false;
}
}


שמחזירה את הערך של הסטרינג אם הוא URL אמיתי, ואם לאו - מחזיר false.
אני מכיל את זה לתוך משתנה, ואז בודק אותו ככה:

if ( !isset($newArray[$i]['content']) )
{...}

מה שאף פעם לא מתבצע אם המשתנה לא מוגדר (ואני בודק אותו והוא כזה - בvar_dump הוא מודפס כboolean false!).

אבדתי עצות. למישהו יש רעיון?
 

bnayal

New member
אם אתה מציב ערך FALSE במשתנה

אז isset יחזיר על אותו משתנה True, כי הוא מוגדר.
אתה בעצם בודק "האם המשתנה הזה לא(!) מוגדר?" והוא תמיד כן מוגדר כפי שאתה אומר ולכן לא יתקיים התנאי.
אם לא הבנתי אותך נכון בבקשה תסביר.
 

lovemedo

New member
אז אם ככה נוצרת לי בעיה חדשה...

הפונק' בגדול עובדת ככה -מתקבל מידע, לפי סוג משתנה (שאני מגדיר) מתבצעת עליו פונקציית אימות וסניטציה (URL, אימייל, סטרינג, תאריך וכו'). אם היא עוברת בהצלחה, המשתנה מכיל את הערך שעבר סניטציה. אם לא, המשתנה מכיל false.
אם אני לא אבדוק באמצעות isset, איך אני אבדוק את המשתנה (הבעיה המרכזית היא שאני יכול לקבל 0 כי הוא מספר לגיטימי, ואז אם אני אעשה !$var זה יהיה שגוי...).
 

bnayal

New member
אתה צריך לבדוק האם הוא מוגדר,

ואם הוא מוגדר לוודא שהוא לא False, למשל

if(isset($email) && $email !== FALSE){
//store the email somewhere
}
 
תנסה

function url_checker($var)
{
if (isset($var) && !is_bool($var))
{
$var = trim( $var );
if (filter_var($var, FILTER_VALIDATE_URL))
{
return $var;
}
else
{
return false;
}
}
else
{
return false;
}
}


אני מבין שכל ארגומנט שמתקבל שפונקציה והוא חוקי לעבור, יכול להיות רק לא משתנה בוליאני....כי אתה משתמש ב false כדי להכשיל אותה, לכן בכל מצב הפונקציה שלך כן מקבלת ערך כלשהו (false או משהו אחר...), ולכן סביר להניח שתמיד isset יחזור חיובי ולכן באותה תנאי אפשר לבדוק שההארגומנט הנכנס הוא לא בוליאני (שזה שגוי עפ"י הלוגיקה שלך)....לכן באתה בעצם יכול להשתמש בשני הערכים של בוליאן, false כפי שאתה משתמש בו כבר, ו-true להודיע למשל שגיאה למשתמש או לכוון לדף אחר או לרסק יזום וכו'
 

amitayh

New member
למה לסבך הכל?

קודם כל, בתוך הסקופ של הפונקציה הארגומנט תמיד יהיה מוגדר. שימוש ב- isset מיותר. שנית כל הדבר הזה פשוט עוטף פונקציה בצורה מאוד משונה - למה לא להשתמש בפונקציה המקורית וזהו?
 
למעלה