2017-09-27 65 views
0

我需要取得酒店的正确酒店编号,其下面的代码有一些错误,而用户选择酒店并显示错误的酒店信息。Php不正确ID

这里连接错误网址: 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表来获得性能提升,而不是查询hotel_images表为每一行。你可以包含var_dump($ row);在脚本第二部分的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个更多的东西,寿:

  • 你不应该做内环路($ img_result应该是循环外),因为它们的性能重(分贝成为bottle.neck)SQL查询
  • 你的sql很容易受到sql注入的影响。您应该使用准备好的语句(PDO)或类似的技术或至少过滤用户输入