2017-05-02 19 views
0

私は観光サイトを作成しています。ページには、最大10個の画像がスライドする カルーセルがあります。1つのfetch_objectからヌルデータを取得する方法

toursテーブルには、img_1img_2 ... img_10という名前の列があります。

行が6つの画像しか持たない場合があるため、カルーセルには6つの画像しか表示されません。

fetch_object()などを使用して検索します。

はここに私のコードです:

<?php 
$resImg = $db->query("select img_1, img_2, img_3, img_4, img_5, img_6, 
    img_7, img_8, img_9, img_10 from tours where up_id = 1 and img_1 is not null"); 
// I will leave other conditions of not null values blank this time 
while($rowImg = $resImg->fetch_object()) { ?> 
    <div> 
     <img data-u="image" src="img/<?=$rowImg->img_1;?>" /> 
     <img data-u="thumb" src="img/<?=$rowImg->img_1;?>" /> 
    </div> 
<?php } ?> 

コード内の任意の構文エラーやタイプミスを無視してください、私はこの問題を解決する方法を見つけたいです。ここで

は、カルーセルの例である:https://www.gitours.ge/index.php?action=tours_georgia&full_id=22&lang=

答えて

0

OK、これは私がそれをやった方法です:

<?php 
    $resFullTours = $db->query("$query"); 
    $rowFullTours = $resFullTours->fetch_object(); 
?> 

<?php 
      $image1 = $rowFullTours->img_1; 
      if (!empty($image1)) { 
     ?> 
     <div> 
      <img data-u="image" src="img/gallery/<?=$image1;?>" /> 
      <img data-u="thumb" src="img/gallery/<?=$image1;?>" /> 
     </div> 
     <?php } ?> 
     <?php 
      $image2 = $rowFullTours->img_2; 
      if (!empty($image2)) { 
     ?> 
     <div> 
      <img data-u="image" src="img/gallery/<?=$image2;?>" /> 
      <img data-u="thumb" src="img/gallery/<?=$image2;?>" /> 
     </div> 
     <?php } ?> 
     <?php 
      $image3 = $rowFullTours->img_3; 
      if (!empty($image3)) { 
     ?> 
     <div> 
      <img data-u="image" src="img/gallery/<?=$image3;?>" /> 
      <img data-u="thumb" src="img/gallery/<?=$image3;?>" /> 
     </div> 
     <?php } ?> 
     <?php 
      $image4 = $rowFullTours->img_4; 
      if (!empty($image4)) { 
     ?> 
     <div> 
      <img data-u="image" src="img/gallery/<?=$image4;?>" /> 
      <img data-u="thumb" src="img/gallery/<?=$image4;?>" /> 
     </div> 
     <?php } ?> 
     <?php 
      $image5 = $rowFullTours->img_5; 
      if (!empty($image5)) { 
     ?> 
     <div> 
      <img data-u="image" src="img/gallery/<?=$image5;?>" /> 
      <img data-u="thumb" src="img/gallery/<?=$image5;?>" /> 
     </div> 
     <?php } ?> 
     <?php 
      $image6 = $rowFullTours->img_6; 
      if (!empty($image6)) { 
     ?> 
     <div> 
      <img data-u="image" src="img/gallery/<?=$image6;?>" /> 
      <img data-u="thumb" src="img/gallery/<?=$image6;?>" /> 
     </div> 
     <?php } ?> 
     <?php 
      $image7 = $rowFullTours->img_7; 
      if (!empty($image7)) { 
     ?> 
     <div> 
      <img data-u="image" src="img/gallery/<?=$image7;?>" /> 
      <img data-u="thumb" src="img/gallery/<?=$image7;?>" /> 
     </div> 
     <?php } ?> 
     <?php 
      $image8 = $rowFullTours->img_8; 
      if (!empty($image8)) { 
     ?> 
     <div> 
      <img data-u="image" src="img/gallery/<?=$image8;?>" /> 
      <img data-u="thumb" src="img/gallery/<?=$image8;?>" /> 
     </div> 
     <?php } ?> 
     <?php 
      $image9 = $rowFullTours->img_9; 
      if (!empty($image9)) { 
     ?> 
     <div> 
      <img data-u="image" src="img/gallery/<?=$image9;?>" /> 
      <img data-u="thumb" src="img/gallery/<?=$image9;?>" /> 
     </div> 
     <?php } ?> 
     <?php 
      $image10 = $rowFullTours->img_10; 
      if (!empty($image10)) { 
     ?> 
     <div> 
      <img data-u="image" src="img/gallery/<?=$image10;?>" /> 
      <img data-u="thumb" src="img/gallery/<?=$image10;?>" /> 
     </div> 
     <?php } ?> 
0

あなたの投稿の答えはDRYfetch_object()ない名前で、各列を指名することができ強制されます。その名前で列にアクセスすると、可変長の変数命名法(ほとんどの人が避けようとする)を使用して、長時間コードブロックまたはより短いコードブロックを作成する必要があります。

array_filter()fetch_row()に設定して単純なDRYブロックを作成し、null以外の列の値からイメージタグを生成しました。

$up_idがユーザー入力の場合は、照会で使用する前に何らかの形でサニタイズを行ってください。

$up_id=2; 
if(!$db=new mysqli("host","user","pass","db")){ 
    echo "Connection Error: ",$db->connect_error; // do not echo when live 
}elseif(!$result=$db->query("SELECT img_1,img_2,img_3,img_4,img_5,img_6,img_7,img_8,img_9,img_10 FROM `tours` WHERE `up_id`=$up_id")){ 
    echo "Query Syntax Error: ",$db->error; // do not echo when live 
}elseif(!$result->num_rows){ 
    echo "Query Logic Error: No Rows For $up_id"; // write your preferred message 
}else{ 
    foreach(array_filter($result->fetch_row()) as $column){ 
     echo "<div>"; 
      echo "<img data-u=\"image\" src=\"img/$column\" />"; 
      echo "<img data-u=\"thumb\" src=\"img/$column\" />"; 
     echo "</div>"; 
    } 
} 

あなたはこのテーブルの上にそのコードを実行した場合:私は読みやすいよう、各ペアの後に改行を追加しました*

<div><img data-u="image" src="img/imgK.jpg" /><img data-u="thumb" src="img/imgK.jpg" /></div> 
<div><img data-u="image" src="img/imgL.jpg" /><img data-u="thumb" src="img/imgL.jpg" /></div> 
<div><img data-u="image" src="img/imgN.jpg" /><img data-u="thumb" src="img/imgN.jpg" /></div> 
<div><img data-u="image" src="img/imgO.jpg" /><img data-u="thumb" src="img/imgO.jpg" /></div> 
<div><img data-u="image" src="img/imgQ.jpg" /><img data-u="thumb" src="img/imgQ.jpg" /></div> 
<div><img data-u="image" src="img/imgS.jpg" /><img data-u="thumb" src="img/imgS.jpg" /></div> 

CREATE TABLE `tours` (
    `up_id` int(10) NOT NULL, 
    `img_1` varchar(100) DEFAULT NULL, 
    `img_2` varchar(100) DEFAULT NULL, 
    `img_3` varchar(100) DEFAULT NULL, 
    `img_4` varchar(100) DEFAULT NULL, 
    `img_5` varchar(100) DEFAULT NULL, 
    `img_6` varchar(100) DEFAULT NULL, 
    `img_7` varchar(100) DEFAULT NULL, 
    `img_8` varchar(100) DEFAULT NULL, 
    `img_9` varchar(100) DEFAULT NULL, 
    `img_10` varchar(100) DEFAULT NULL 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

INSERT INTO `tours` (`up_id`, `img_1`, `img_2`, `img_3`, `img_4`, `img_5`, `img_6`, `img_7`, `img_8`, `img_9`, `img_10`) VALUES 
(1, 'imgA.jpg', 'imgB.jpg', 'imgC.jpg', 'imgD.jpg', 'imgE.jpg', 'imgF.jpg', 'imgG.jpg', 'imgH.jpg', 'imgI.jpg', 'imgJ.jpg'), 
(2, 'imgK.jpg', 'imgL.jpg', NULL, 'imgN.jpg', 'imgO.jpg', NULL, 'imgQ.jpg', NULL, 'imgS.jpg', NULL); 

ALTER TABLE `tours` 
    ADD PRIMARY KEY (`up_id`); 

ALTER TABLE `tours` 
    MODIFY `up_id` int(10) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3; 

をお使いの出力ソース・コードは次のようになります。

関連する問題