Question

I have a field that depends has custom text if a certain condition is met...and if it isn't the field is blank.

I have written a custom function test if a variable is set

function AmISet($fieldName) {

if (isset($fieldName)) {

    echo "I am set";
}else{
    echo "I am not set";    
    }
};

but when I attach it the field I get an error that the variable is undefined. But when I do a regular isset($fieldName); I don't have a problem. Is there any way to get around this and have my function do this instead of the isset()?

I want to add other logic in the function but I only want it to work if the variable is set...but I don't want the undefined error if it is not.

I am new to php and really appreciate any help or direction you can give me. Thank you for the help!

Was it helpful?

Solution

You need to pass the variable by reference:

function AmISet(&$fieldName) {
    if (isset($fieldName)) {
        echo "I am set\n";
    } else {
        echo "I am not set\n";    
    }
}

Test cases:

$fieldName = 'foo';
AmISet($fieldName); // I am set

unset($fieldName);
AmISet($fieldName); // I am not set

However, this function is not useful as it is, because it will only output a string. You can create a function that accepts a variable and return if it exists (from this post):

function issetor(&$var, $default = false) {
    return isset($var) ? $var : $default;
}

Now it can be used like so:

echo issetor($fieldName); // If $fieldName exists, it will be printed

OTHER TIPS

the $fieldName comes from a query that is performed when a checkbox is checked. If the box is checked the query is made and the variable is set from the query, if not it doesn't exist and the field is blank.

Filter functions are designed for this kind of tasks:

<input type="foo" value="1">
$foo = filter_input(INPUT_POST, 'foo')==='1';

(There's also a specific FILTER_VALIDATE_BOOLEAN filter you can pass as second argument.)

And now you have a pure PHP boolean that always exists.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top