2017-09-27 17 views
0

正しいホテルIDでホテルを取得する必要があります。下のコードは、ホテルを選択して間違ったホテル情報を表示している間に何らかのエラーがあります。ここでPHP不正IDを取得する

は、エラーのURLを添付: 以下Error url

if(isset($_REQUEST["result"])) 
{ 
$search = $_REQUEST["result"]; 
$checkin = $_REQUEST["checkin"]; 
$checkout = $_REQUEST["checkout"]; 
$guest = $_REQUEST["guest"]; 

$query = "select * from hotel,room_type WHERE hotel.hotel_id = room_type.hotel_id and hotel.hotel_address LIKE '%".$search."%' or hotel.hotel_city LIKE '%".$search."%' or hotel.hotel_state LIKE '%".$search."%' or hotel.hotel_name LIKE '%".$search."%' AND room_type.room_available_from >='$checkin' AND room_type.room_available_till <='$checkout' AND room_type.room_guest = '$guest' group by hotel.hotel_id"; 
$result = mysqli_query($conn,$query); 

} 

は、コード表示は、それが同じhotel_idを表示し、ホテルのリストです:

<?php 
    while($row = mysqli_fetch_array($result)) 
    { 
     $hid = $row["hotel_id"]; 
     $url = 'hid='.$row["hotel_id"].'&checkin='.$checkin.'&checkout='.$checkout.''; 
       ?> 
     <div class="list-body" onclick="window.location.href='hotel.php?<?php echo $url ?>'"> 
        <div class="col-photo"> 
         <?php 
         $img_result = mysqli_query($conn,"SELECT * FROM hotel_images where hotel_id = $hid"); 
         $r = mysqli_fetch_assoc($img_result); 
         ?> 
         <img src="../img/hotel/<?php echo $r["hotel_image"]?>"> 
     </div> 
     <div class="col-info"> 
      <div class="info-content"> 
      <div class="col-title"> 
        <h3><?php echo $row["hotel_name"] ?></h3> 
     </div> 
+0

ここでは、hotel_imagesテーブルをクエリするのではなく、最初のクエリでJOINを実行して、すべての行についてvar_dump($ row)をインクルードできますか?スクリプトの第2部分のwhileループの中で、出力を教えてください。 – flauntster

答えて

0

問題は、あなたのSQLにあります。

select DISTINCT hotel.hotel_id, * from hotel 
inner join room_type on room_type.hotel_id = hotel.hotel_id 
where (hotel.hotel_address LIKE '%".$search."%' 
or hotel.hotel_city LIKE '%".$search."%' 
or hotel.hotel_state LIKE '%".$search."%' 
or hotel.hotel_name LIKE '%".$search."%') 
AND room_type.room_available_from >='$checkin' 
AND room_type.room_available_till <='$checkout' 
AND room_type.room_guest = '$guest' 

2つの以上のもの、カントー:彼らはパフォーマンスの重いとして

  • あなたは(デシベルがbottle.neckなり)($ img_resultは、ループの外でなければなりません)、ループ内のSQLクエリを実行するべきではありません
  • あなたのsqlはsql-injectionに脆弱です。準備されたステートメント(PDO)または同様のテクニックまたは最も簡単なフィルタをユーザ入力に使用する必要があります
関連する問題