php:foreach echo包含图片和文本的行列表(gallery)

时间:2013-10-18 09:24:52

标签: php html mysql foreach

我想创建一个照片库,在左侧显示来自同一类别的所有图片,右侧显示评论。 图像作为路径(例如:mycategory/example001.jpg)存储在我的数据库jkm_imagefilename中。 评论存储在jkm_content中的introtext表中。

这两张表没有关联。

我陷入了“foreach”步骤,因为它首先检索了所有图像,然后是所有评论,所以我最终得到类似

的内容
an image 
an image
an image 
...
a comment
a comment
a comment

an image, an image, an image 
an image, an image, an image
...
a comment, a comment, a comment
a comment, a comment, a comment

但我想:

an image, a comment 
an image, a comment 
an image, a comment 
...

这是php:

<?php
define( '_JEXEC', 1 );
define('JPATH_BASE', dirname(__FILE__) );//this is when we are in the root
define( 'DS', DIRECTORY_SEPARATOR );

require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();
$db = &JFactory::getDBO(); //Your database object is ready
$db2 = &JFactory::getDBO();?>
<div class="backend">
<?php 
$query = "SELECT introtext FROM jkm_content WHERE catid=58"; //--------feeds
$db->setQuery( $query );
$feeds= $db->loadObjectList();
foreach ($feeds as $item):
?> 
<div class="comment"><?php echo $item->introtext; ?></div>
<?php endforeach; ?>
<?php 
$query2 = "SELECT filename FROM jkm_phocagallery WHERE catid=2";// -------pictures
$db2->setQuery( $query2 );
$pictures= $db2->loadObjectList();
foreach ($pictures as $item2):
?> 
<div class="image"><img src="/images/phocagallery/<?php echo $item2->filename; ?>" >
</div>
<?php endforeach; ?>
</div>

的CSS:

.backend {
position: absolute;
width: 1000px;
}

.image {
float:left;
width: 600px;
}

.comment {
float:right;
width: 400px;
}

我对php世界很新,我不知道我做得对不对。也许“foreach”不是我应该使用的功能。

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:1)

如果表是相关表,则应在表之间使用内部连接连接,而不是Union http://dev.mysql.com/doc/refman/5.0/es/join.html

SELECT filename FROM jkm_image  as jkm Inner join introtex as intro on intro.id = jkm. id WHERE catid=2

或者您可以向DataBase发出两个请求

<?php
$query = "SELECT introtex FROM jkm_content WHERE catid=58";
$db->setQuery( $query );
$feed= $db->loadObjectList();
foreach ($feed as $item):
?><div style="float:left; width: 200px;"><?php echo $item->introtex; ?><?php
$query2 = "SELECT filename FROM jkm_image WHERE catid=2";
$db2->setQuery( $query2 );
$feed2= $db2->loadObjectList();
foreach ($feed2 as $item2):
?>
<div style="float:left ; width: 200px;"><img src="/images/phocagallery/<?php echo $item2->filename; ?>" ></div>
<?php endforeach; ?>
</div>
<?php endforeach; ?>

答案 1 :(得分:0)

Psudocode:

第1步:$ mylist = query(SELECT id FROM mytable WHERE(您的条件)......)

第2步:

$mypics=array();//an empty box

foreach($idlist as $id){
    $thispic=//run your query - I'd use PDO FETCH_ASSOC
    array_push($mypics,$thisquery);
} 

现在$ mypics是一个完整的框(一个关联数组......)

foreach ($mypics as $pic){
    echo $pic['img'];
    echo $pic['title'];
}

你需要添加一些语法和图片标签等等,但这是你可以做到的一种方式。

PS:你在这里有3种语言:     <div style="float:left ; width: 200px;"><img src="/images/phocagallery/<?php echo $item->filename; ?>" >

如果你完全避免使用内联样式并尽力将你的php和html分开,未来的维护者会更开心。