2017-03-01 3 views
-5

私は学校で働いているプロジェクトの一部として、私は部屋の予約システムを構築しています。このシステムの一環として、私はユーザーが部屋の基準を入力できるページを持っており、そのページはその基準に合った空室を返し、予約のために無料となります。ユーザーの検索結果が返されず、入力した条件を下げる予定の場合は、変更された条件を満たす部屋を表示し、変更された条件を通知するメッセージをユーザーに表示します。関数suggestroom()の呼び出しがここに表示されます。未定義の変数エラーが表示されないようにするにはどうすればよいですか? (私はこの変数がnullであることを知っています)

} 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; 
} 

したがって一切の予約がない場合、nullの配列が提案された客室に返され、部屋が見つかるまでこれがないそこまで、変更されていない場合、私はそれので、他の基準を作ります(継続します先にはまだ)。

部屋がありますが、部屋が見つかる前にコードが実行された、つまり空の配列が返されたx回の間、コードは動作しますが、未定義の変数メッセージが返されます。どうすればこの問題を回避できますか?

+0

_ "アクセスする変数が存在するかどうかをチェックすることで、これを回避できますか?" isset/empty。 – CBroe

+1

[PHP: "通知:未定義変数"、 "通知:未定義インデックス"、 "通知:未定義オフセット"](http://stackoverflow.com/questions/4261133/php-notice-undefined-variable- '$ message'が設定されていて空でないかどうかをチェックして – Epodax

+0

を使用する前に –

答えて

-1

使用の通知をオフisset/empty

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

empty()で何を達成したいのかよく分かりませんが、 )が動作し、さまざまなタイプのために何が返されますか? http://php.net/manual/pl/function.empty.php –

+0

これは '!empty'でなければなりません。私はチェックのためにフォームの提出の後にこれを使用しますが、ほとんど使用しません。たいていの場合、 'isset()'は私のために十分です – Swellar

+0

@Downvoterあなたはdownvoteの理由を残さずに残すことを望みます – Swellar

-1

、警告、エラーがコードするための最良の方法ではありません。 上記の回答とは異なり、私は常にisset()を使用するのではなく、変数を初期化することを好みます。

関連する問題