致命错误:无法在php中的表达式结果上使用isset可以使用“ null!== expression”代替

问题描述

Graph::adjList

解决方法

您在这里进行了错误的比较。尝试更改:

<option value="january" <?php if(isset($fetch['bill_month']=="January")){ echo "selected"; }
    ?>>January</option>

为此:

<option value="january" <?php if(isset($fetch['bill_month']) && $fetch['bill_month'] =="January")){ echo "selected"; }
    ?>>January</option> 

或此短代码:

<option value="january" <?= (isset($fetch['bill_month']) && $fetch['bill_month'] =="January")) ? "selected" : "" ?>>January</option>

如果设置了键且值不为空,则基本上isset($fetch['bill_month'])返回truefalse。您尝试做的是检查返回的值是否等于某个字符串。以我的方式,您首先检查值是否存在,然后再确定是否相等。

,

因为isset() only works with variables as passing anything else will result in a parse error,所以您不能将expression传递给它。

这应该有效。

<option value="January" 
<?PHP 
$isJan = $fetch['bill_month']=="January";
if(isset($isJan)){ echo "selected"; }
    
?>
>January</option> 
,
<option value="january" <?php if(isset($fetch['bill_month']=="January")){ echo "selected"; }

isset-确定是否声明了一个变量,并且该变量不同于NULL。因此,应将条件更改为以下代码:

<option value="january" <?php if(isset($fetch['bill_month']) && $fetch['bill_month'] =="January")){ echo "selected"; }
,

在这种情况下使用isset是不正确的。

您宁愿这样做:

<option value="january" <?php echo (isset($fetch['bill_month']) && $fetch['bill_month'] =="January")) ? "selected" : "" ?>>January</option>

这应该有效。

PS: 考虑到您在做什么,最好将月份放在一个数组中并遍历:

<?php
$months = [
    'January','February','March','April','May','June','July','August','September','October','November','December',];
?>

<select name='month'> 
    <option disabled>Select Month</option>
    <?php foreach($months as $month) { ?>
    <option value="<?php echo strtolower($month); ?>" <?php if(isset($fetch['bill_month']) && $fetch['bill_month'] == $month) { echo "selected"; }
    ?>>
         <?php echo $month; ?>
    </option> 
    <?php } ?>
</select>

您将不需要在十二个月内重复执行该代码。

如果您使用的是Blade,也请使用Laravel语法 或将PHP自己的alternative syntax用于ifforeach