2013-10-11 8 views
1

У меня есть запрос mysqli, который извлекает все изображения из таблицы (у меня есть 5 изображений, которые я показываю). Я использую ползунок jquery для их отображения. Проблема в том, что если нет 5 изображений, я вижу пустую страницу, например, если пользователь загружает только два изображения, остальные три миниатюры будут пустыми, и когда вы нажмете на них, появится пустая область. Я не хочу, чтобы это произошло, так как я могу показать только миниатюру, если изображение существует, вместо того, чтобы показывать пустую миниатюру?проверить, существует ли определенная строка mysql

Я пробовал ниже, но это не работает. Мне просто нужно посмотреть, существует ли файл image_one, покажите миниатюру и то же самое для остальных изображений.

<?php 
$stmt = $mydb->prepare("SELECT * FROM table where title = ? AND id = ? limit 1 "); 
$stmt->bind_param('ss', $title, $id); 
$stmt->execute(); 
$result = $stmt->get_result(); 
while ($row = $result->fetch_assoc()) { 
$path = 'images/'; 
?> 


<div id="slides"> 

<?php if($result->num_rows > 0){?><div class="slide"><a class="fancybox" href="<?php echo $path.$row['image_one']?>" data-fancybox-group="gallery"><img class="cloudzoom appsld" src="<?php echo $path.$row['image_one']?>"/></a></div><?php };?> 
<?php if($result->num_rows > 0){?><div class="slide"><a class="fancybox" href="<?php echo $path.$row['image_two']?>" data-fancybox-group="gallery"><img class="cloudzoom appsld" src="<?php echo $path.$row['image_two']?>"/></a></div><?php };?> 
<?php if($result->num_rows > 0){?> <div class="slide"><a class="fancybox" href="<?php echo $path.$row['image_three']?>" data-fancybox-group="gallery"><img class="cloudzoom appsld" src="<?php echo $path.$row['image_three']?>"/></a></div><?php };?> 
<?php if($result->num_rows > 0){?><div class="slide"><a class="fancybox" href="<?php echo $path.$row['image_four']?>" data-fancybox-group="gallery"><img class="cloudzoom appsld" src="<?php echo $path.$row['image_four']?>"/></a></div><?php };?> 
<?php if($result->num_rows > 0){?><div class="slide"><a class="fancybox" href="<?php echo $path.$row['image_five']?>" data-fancybox-group="gallery"><img class="cloudzoom appsld" src="<?php echo $path.$row['image_five']?>"/></a></div><?php };?> 

</div> 

<div id="slide_menu"> 

<ul id="slide"> <!-- This is the thumbnail area --> 
    <li class="fbar">&nbsp;</li> 
    <?php if($result->num_rows > 0){?><li class="menuItem"><a href=""><img src="<?php echo $path.$row['image_one']?>" /></a></li><?php }; ?> 
    <?php if($result->num_rows > 0){?><li class="menuItem"><a href=""><img src="<?php echo $path.$row['image_two']?>" /></a></li><?php }; ?> 
    <?php if($result->num_rows > 0){?><li class="menuItem"><a href=""><img src="<?php echo $path.$row['image_three']?>" /></a></li><?php }; ?> 
    <?php if($result->num_rows > 0){?><li class="menuItem"><a href=""><img src="<?php echo $path.$row['image_four']?>" /></a></li><?php }; ?> 
    <?php if($result->num_rows > 0){?><li class="menuItem"><a href=""><img src="<?php echo $path.$row['image_five']?>" /></a></li><?php }; ?> 
</ul> 


</div> 
+2

Посмотрите в использовании петли, так что это не будет иметь значения, как много или как мало у вас есть он будет отображать только то, что в базе данных. –

+0

как я это делаю? Понятия не имею. – Lmxc

+0

Вы нарушили правило [Zero, One или Infinity Rule] (http://en.wikipedia.org/wiki/Zero_one_infinity_rule), имея столбцы с именем «один», «два» и так далее. В [правильно нормированной базе данных] не существует «двух» (http://en.wikipedia.org/wiki/Database_normalization). Они называют это отношением «один ко многим», а не «один-к-пять». – tadman

ответ

1

мы не можем видеть ваш дизайн базы данных так смотреть на ваше значение по умолчанию для

image_one и так далее

Количество строк всегда 0 или 1 (из-за Limit 1)
Важными являются поля image_one - image_five Эти поля всегда присутствуют, независимо от того, пусты ли они или с именами файлов заполнены.

в зависимости от теста значения по умолчанию это

, например, один из

  • , если ($ строки [ 'image_one']> '') {
  • , если ($ строки [ 'image_one' ]> нулевой {

положить if Arround построения HTML.

<?php if($result->num_rows > 0){?> 
<?php if ($row['image_one'] > '') 
    {?> 
    <li class="menuItem"> 
    <a href=""><img src="<?php echo $path.$row['image_one']?>" /></a> 
    </li> 
    <?php 
    }?> 
    .... next 4 other tests 
<?php if ($row['image_two'] > '') 
    .... 

<?php } // END__$result->num_rows > 0 ?> 
+0

спасибо. Именно то, что я хотел и прекрасно работает. – Lmxc

+0

Добро пожаловать. :-) –

-1

Im не 100% уверены, что для PDO, но его не слишком далеки

<?php 
$sql = "SELECT * FROM table where title = $title AND id = $id limit 1 "; 
$result = mysql_query($sql); 
while ($row = mysql_fetch_array($result)) { 
?> 

<div class="slide"> 
    <a class="fancybox" href="images/<?php echo $row['DB-IMAGE-PATH-HERE']; ?>" data-fancybox-group="gallery"> 
     <img class="cloudzoom appsld" src="images/<?php echo $row['DB-IMAGE-PATH-HERE']; ?>"/> 
    </a> 
</div> 

<?php } // end while loop ?> 
</div> <!-- end id="slides" --> 
+0

ли это скрыть тег li, если изображение не существует? Я не хочу – Lmxc

+0

'while ($ row = mysql_fetch_array ($ result)) {'. Похоже, вы неправильно поняли проблему. Я уверен, что вы хотите итерации по полям базы данных, а не по записям базы данных. Из них есть либо '0', либо только' 1'. –

0

попробовать что-то вроде

... 
    <ul id="slide"> <!-- This is the thumbnail area --> 
     <li class="fbar">&nbsp;</li> 
     <?php 
     foreach ($row as $element => $val){ 
      if(isset($val)) { 
      print "<li class='menuItem'><a href=''><img src=".$path.$val."/></a></li>"; 
      } 
     } 
     ?> 
    </ul> 
... 

и то же самое для 1-го (<div id="slides">) блокировать

+0

Это не так просто. Как вы можете видеть: 'SELECT * FROM table where title =? И id =? '. Есть больше полей базы данных, а не только поля имени файла изображения. с вашим решением все эти поля также украшены ярлыком '

Смежные вопросы