Как мне показать только первое изображение из базы данных mysql в php - PullRequest
1 голос
/ 05 августа 2020

У меня есть следующий код. Как мне показать первое изображение в базе данных с индексом 0 для отображения большого изображения в конце кода? В данный момент отображается последнее изображение в базе данных.


    <div id="imgWheel" class="treatmentContainer">
   <?php
        $query = "SELECT * FROM images WHERE user = 0 ORDER BY id;";
        $result = $mysqli->query($query);
           while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
             $product = $row["product"];
             $room = $row["room"];
             $style = $row["style"];
             $tags = $row["tags"];
             $src = $row["url"];
             $dataid = $row["id"];
                        
              $imgClass = "";
               if (in_array($src, $favourites)) {
                   $imgClass = " favourite";
               }
                        
echo "<div class='treatment$imgClass' data-url='$src' data-product='$product' data-room='$room' data-style='$style' data-tags='$tags' data-number='$dataid' id='pic_$dataid' >";
echo "<img src='$src' crossorigin='anonymous'/>";
echo "</div>";
}
?>   
                    
</div> <!-- close imgWheel -->   

<!-------- Large Image Display------- -->

<div id="display">
     <img  id="mainImage" src="<?php echo $src ?>" /> 
</div>

Ответы [ 4 ]

1 голос
/ 05 августа 2020

Ваш результирующий набор уже упорядочен по идентификатору, поэтому вам нужна только переменная, которую нужно заполнить один раз первым imageurl

<div id="imgWheel" class="treatmentContainer">
<?php
    $bigpictureurl = "";
    $query = "SELECT * FROM images WHERE user = 0 ORDER BY id;";
    $result = $mysqli->query($query);
       while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
         $product = $row["product"];
         $room = $row["room"];
         $style = $row["style"];
         $tags = $row["tags"];
         $src = $row["url"];
         $dataid = $row["id"];
         if (empty($bigpictureurl)) {
             $bigpictureurl = $src ;
         }          
          $imgClass = "";
           if (in_array($src, $favourites)) {
               $imgClass = " favourite";
           }
                    
echo "<div class='treatment$imgClass' data-url='$src' data-product='$product' data-room='$room' data-style='$style' data-tags='$tags' data-number='$dataid' id='pic_$dataid' >";
echo "<img src='$src' crossorigin='anonymous'/>";
echo "</div>";
}
?>   
                    
</div> <!-- close imgWheel -->   

<!-------- Large Image Display------- -->

<div id="display">
     <img  id="mainImage" src="<?php echo $bigpictureurl ?>" /> 
</div>
0 голосов
/ 05 августа 2020

Поскольку все это есть в вашем операторе WHILE, я предполагаю, что вы хотите echo все эти записи. А потом в конце покажите 1-е пи c. Так что для «Дисплея с большим изображением» попробуйте следующее:

<div id="display">
     $query = "SELECT * FROM images WHERE user = 0;";
     $result = $mysqli->query($query);
     $row = $result->fetch_array(MYSQLI_ASSOC)
     $src = $row["url"];
     <img  id="mainImage" src="<?php echo $src ?>" /> 
</div>

Если вы хотите меньше кода, сохраните значение $src внутри WHILE l oop, когда user=0 в другую переменную, например $src2. И тогда ваш код просто станет:

<img  id="mainImage" src="<?php echo $src2 ?>" />
0 голосов
/ 05 августа 2020

Быстрое и грязное решение - сохранить ваше первое изображение в некоторых отдельных переменных, например, вот так:

$isFirst = true;
$firstImageSrc = "";
$result = ....;
while (...) {
   // set your $product, $room etc here
   if ($isFirst) {
      $isFirst = false;
      $firstImageSrc = $src;
   }
}
echo ...
?>
</div> <!-- close imgWheel -->   

<!-------- Large Image Display------- -->

<div id="display">
     <img  id="mainImage" src="<?php echo $firstImageSrc ?>" /> 
</div>

Гораздо более элегантным решением было бы создать массив со всеми вашими изображениями, поэтому что вы можете отделить свой php от html. Я проведу рефакторинг вашего кода ниже, а также исправлю вашу первую проблему с изображением:

<?php
   $images = [];
   $idx = 0;
   $query = "SELECT * FROM images WHERE user = 0 ORDER BY id;";
   $result = $mysqli->query($query);
   while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
      $images[$idx]["product"] = $row["product"];
      $images[$idx]["room"] = $row["room"];
      $images[$idx]["style"] = $row["style"];
      $images[$idx]["tags"] = $row["tags"];
      $images[$idx]["src"] = $row["url"];
      $images[$idx]["dataid"] = $row["id"];

      $images[$idx]["imgClass"] = "";
      if (in_array($src, $favourites)) {
         $images[$idx]["imgClass"] = " favourite";
      }
      $idx++;
   }
?>

<div id="imgWheel" class="treatmentContainer">

<?php foreach ($images as $image) { ?>
   <div class='treatment<?=$image["imgClass"]?>' data-url='<?=$image["src"]?>' data-product='<?=$image["product"]?>' data-room='<?=$image["room"]?>' data-style='<?=$image["style"]?>' data-tags='<?=$image["tags"]?>' data-number='<?=$image["dataid"]?>' id='pic_<?=$image["dataid"]?>' >
      <img src='<?=$image["src"]?>' crossorigin='anonymous'/>
   </div>
<?php } ?> 
                    
</div> <!-- close imgWheel -->   

<!-------- Large Image Display------- -->

<div id="display">
     <img id="mainImage" src="<?=$images[0]["src"]?>" /> 
</div>
0 голосов
/ 05 августа 2020

Вам просто нужно обновить запрос SQL, просто добавьте LIMIT 1 . Это ограничит результат только 1 записью, и, поскольку у вас есть ORDER id AS C, он покажет первую запись данного пользователя (для вас это 0).

$query = "SELECT * FROM images WHERE user = 0 ORDER BY id ASC LIMIT 1;";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...