2017-03-01 59 views
-5

对于我在学校工作的项目的一部分,我正在建立一个房间预订系统。作为这个系统的一部分,我有一个页面,用户可以输入一个房间的标准,该页面将返回符合该标准并可免费预订的可用房间。如果用户搜索没有返回任何结果,我打算降低输入的标准,显示一个符合更改标准的房间并向用户显示一条消息,通知他们已更改的标准。这里显示了对函数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倍的次数,即返回一个空数组时,我会得到一个未定义的变量消息。我怎样才能解决这个问题?

+0

_“我怎样才能解决这个问题?” - 通过检查你想访问的变量是否存在之前存在。 isset /空。 – CBroe

+1

[PHP的:“注意:未定义的变量”,“注意:未定义的索引”和“注意:未定义的偏移量”的可能的重复](http://stackoverflow.com/questions/4261133/php-notice-undefined-variable-通过检查'$ message' isset并且不是空的,在使用它之前 – Epodax

+0

)有效,它对不同类型返回的结果是什么。 http://php.net/manual/pl/function.empty.php –

回答

-1

使用isset/empty

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

我不确定你想用empty()来实现什么,但是阅读了关于如何空的(通知undefined-index-and-notice-undef) –

+0

这应该是'!空'。我在表单提交后使用这个检查,但我很少使用它。大多数时候,'isset()'对我来说已经足够了 – Swellar

+0

@Downvoter希望你不会离开downvote的理由而离开 – Swellar

-1

关掉通知,警告,错误不是代码的最佳方式。 而不像上面的答案,我更喜欢总是初始化一个变量,而不是使用isset()。