我一直在为自己和客户的许多网站建立照片画廊。它们是MySQL数据库驱动的,我使用MySQL的MySQLi扩展,并且画廊有一个' Gallery'页面和缩略图'带有jQuery灯箱的页面,用于在点击缩略图后提供最终图像。我的服务器上至少有六个这样的画廊,每个新画廊,我都会从我构建的最后一个画廊的代码库开始。
"画廊"每个现有画廊中的页面都使用do ... while循环来显示数据库中的所有画廊(通常是分页),然后使用预准备语句选择结果。在每种情况下,do ... while循环都会遍历所选记录并显示数据。
然后我今天开了一个新的画廊并且无处不在地发展了一个问题。我之所以这么说,是因为我使用了其他一个网站画廊中的代码而且这个代码完美无缺。
详情:
新数据库中的galleries
表有7列,其中一列是type
,该列包含单词' photo'或者'视频'。为了测试,数据库中有5个虚拟画廊,3个照片和2个视频。页面的默认设置是选择所有记录,除非其中一个"照片"或"视频"单击链接,在这种情况下,它们传递查询字符串,并使用不同的选择查询来选择和仅显示照片或视频库。
查询代码(根据需要运行):
if (($gType != 'photo') && ($gType != 'video')) {
$getGalleries = "SELECT gallery_id, gallery_type, gallery_thumb, gallery_part, gallery_name, gallery_about
FROM galleries
WHERE gallery_live = ?";
$stmt = $conn->prepare($getGalleries);
$stmt->bind_param('i', $live);
$stmt->bind_result($id, $type, $thumb, $part, $name, $about);
$stmt->execute();
$stmt->store_result();
$stmt->fetch;
} else {
$getGalleries = "SELECT gallery_id, gallery_type, gallery_thumb, gallery_part, gallery_name, gallery_about
FROM galleries
WHERE gallery_type = ?
AND gallery_live =?";
$stmt = $conn->prepare($getGalleries);
$stmt->bind_param('si', $gType, $live);
$stmt->bind_result($id, $type, $thumb, $part, $name, $about);
$stmt->execute();
$stmt->store_result();
$stmt->fetch();
}
带有do ... while循环的HTML / PHP:
<?php
do {
?>
<div class="galleries">
<div class="thumb_<?php echo $type; ?>">
<img src="graphics/<?php echo $type; ?>.jpg">
</div><!-- .thumb_photo / _video -->
<p class="about_title">
<?php echo $name; ?>
</p>
<p class="about_text">
<?php echo $about; ?>
</p>
</div><!-- .galleries -->
<?php
} while ($stmt->fetch());
?>
我放了一个示例页面HERE来显示我遇到的问题。
因此,打开页面会显示galleries
表的所有内容,共5个图库。但这次使用do ... while循环,就像我在其他所有库中一样,do ... while循环迭代一次太多次,留下一个空的<div>
和一个丢失的.jpg
图像顶部然后5个画廊显示在它下面。当任何一个&#34;照片&#34;或&#34;视频&#34;点击链接,页面重新加载并显示正确的画廊和NOTHING额外。单击&#34;全部&#34;链接重新打开页面,所有5个画廊和顶部的额外<div>
。当我将循环更改为while循环时,默认页面现在没有额外的<div>
,这很好......但是当&#34; Photo&#34;或&#34;视频&#34;点击链接,每个链接提供的记录少一个。
我一整天都在抓这个。我以前从未这样做过,但是,我现在有这个神秘的问题。
同样,我已经多次使用过这种技术,所以我不得不遗漏一些简单的东西。任何帮助将是真诚的感谢。谢谢!
更新 我忘了提一件事。出于沮丧,我添加了一个查询来计算数据库中的条目数,并且它提出了5.这使我认为查询不是问题,而是在某种程度上在代码中。
答案 0 :(得分:3)
我认为问题可能只是你有
$stmt->fetch;
在if (($gType != 'photo') && ($gType != 'video')) {
区块内
你应该在哪里
$stmt->fetch();
答案 1 :(得分:0)
我相信您遇到的问题是由于您的php文件中的其他条件。
即
else {
$getGalleries = "SELECT gallery_id, gallery_type, gallery_thumb, gallery_part, gallery_name, gallery_about
FROM galleries
WHERE gallery_type = ?
AND gallery_live =?";
$stmt = $conn->prepare($getGalleries);
$stmt->bind_param('si', $gType, $live);
$stmt->bind_result($id, $type, $thumb, $part, $name, $about);
$stmt->execute();
$stmt->store_result();
$stmt->fetch();
}
在上面的代码中,你基本上告诉解析器,“即使if失败,仍然会获取并在HTML中创建另一个div。”
最后一次“获取”可能会解决您的问题。
希望这有帮助!