【问题标题】:How to prevent undefined variable error from showing? (I know the variable is null in this case)如何防止显示未定义的变量错误? (我知道在这种情况下变量为空)
【发布时间】:2017-03-01 09:26:56
【问题描述】:

作为我在学校工作的项目的一部分,我正在构建一个房间预订系统。作为该系统的一部分,我有一个页面,用户可以在其中输入房间的标准,该页面将返回符合该标准并且可以免费预订的可用房间。如果用户搜索未返回任何结果,我打算降低输入的标准,显示符合更改标准的房间并向用户显示一条消息,通知他们更改的标准。此处显示了对函数Suggestroom() 的调用。

} else {
    $reducecapacity = 1;

    do {
        $booking = new Booking();
        $suggestedrooms = $booking->suggestroom(($capacity - $reducecapacity), $appletv, $printer);
        $reducecapacity = $reducecapacity + 1;
    } while($suggestedrooms === null);

    echo 'This room has a cacpacity of: ' . ($capacity-($reducecapacity-1));

    for($x=0; $x<count($suggestedrooms); $x++) {
        echo $suggestedrooms[$x];
    }
}


Public function SuggestRoom($capacity, $appletv, $printer) {
    if($appletv == 1 and $printer ==0) {
        $roomname = DB::GetInstance()->query("SELECT roomname FROM room WHERE capacity >= '$capacity' AND appletv ='$appletv'");
    } elseif($appletv == 0 and $printer == 1) {
        $roomname = DB::GetInstance()->query("SELECT roomname FROM room WHERE capacity >= '$capacity' AND printer = '$printer'");
    } elseif($appletv == 1 and $printer == 1) {
        $roomname = DB::GetInstance()->query("SELECT roomname FROM room WHERE capacity >= '$capacity' AND appletv ='$appletv' AND printer = '$printer'");
    } else {
        $roomname = DB::GetInstance()->query("SELECT roomname FROM room WHERE capacity >= '$capacity'");
    }                   

    $roomcount = $roomname->count();

    if($roomcount == 0) {
        echo 'No classes match your criteria';
    } else {
        for($x=0; $x<$roomcount; $x++) {
            $RoomArray[$x] = $roomname->results()[$x]->roomname;            
        }
    }

    $LoopCount = 0;
    $EndLoop = false;
    $RNDnum = 0;
    $availableroomcount = 0;
    do {
         $suggestedRoom = $RoomArray[$RNDnum];
         $getRoomID = DB::GetInstance()->query("SELECT roomid FROM room WHERE roomname = '$suggestedRoom'");
         $roomid = $getRoomID->results()[0]->roomid;
         $bookingid =  Input::get('bookingdate') . Input::get('period') . $roomid;
         $CheckIfBooked = DB::GetInstance()->query("SELECT bookingid FROM booking WHERE bookingid = '$bookingid'");
         if($CheckIfBooked->count() ==0) {
            $availablerooms[$availableroomcount] = $suggestedRoom;
            $availableroomcount = $availableroomcount+1;
         }
         if($LoopCount===$roomcount-1) {
            $NoRoomMessage = true;
            $EndLoop = true;
            $suggestedRoom = null;
         }

         $LoopCount = $LoopCount+1;
         $RNDnum = $RNDnum +1;
    } while ($EndLoop <> 1);

   return $availablerooms;
}

因此,当没有预订时,将向建议的房间返回一个空数组,这将一直持续到找到房间为止(如果没有,我会这样做,以便更改其他标准,但还没有那么远)。

可以找到一个房间,并且代码可以工作,但是代码在找到房间之前运行了 x 次,即返回一个空数组,我收到一条未定义的变量消息。我该如何解决这个问题?

【问题讨论】:

标签: php


【解决方案1】:

关闭通知、警告和错误并不是最好的编码方式。 与上述答案不同,我更喜欢始终初始化变量而不是使用 isset()。

【讨论】:

    【解决方案2】:

    使用isset/empty

    if(isset($var1) || !empty($var1)){
        //do something
    } else {
        //do another
    }    
    

    【讨论】:

    • 我不确定你想用 empty() 实现什么,但请阅读 empty() 如何工作,以及它为不同类型返回什么。 php.net/manual/pl/function.empty.php
    • 应该是!empty。我在提交表单后使用它进行检查,但我很少使用它。大多数时候,isset() 对我来说已经足够了
    • @Downvoter 希望你不会在没有留下投票理由的情况下离开
    猜你喜欢
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多