我有一个连接到数据库的系统,用于检索文章表中的前5个(按日期)结果。这将拉出结果并将其与详细信息ID,标题,摘要和内容一起存储。所以5个结果有4条信息。
index.php然后应该包含这些信息并显示到home.html.php ...我的问题是,当我这样做时,我得到多行相同的数据。我试图让它显示最新的文章作为主要功能,然后其他人作为页面上的子新闻。
的index.php
try{
$sql = 'SELECT * FROM `articles` ORDER BY publicationDate DESC LIMIT 0,5';
$result = $pdo->query($sql);
}
catch (PDOException $e){
$error = 'Error fetching jokes: ' . $e->getMessage();
include 'error.html.php';
exit();
}
foreach ($result as $row){
$articles[] = array(
'id' => $row['id'],
'title' => $row['title'],
'summary' => $row['summary'],
'content' => $row['content']);
}
include '/templates/ui/home.html.php';
home.html.php
<div class="jumbotron">
<div class="container">
<?php foreach ($articles as $article):?>
<h1><?php htmlout($article['title'] ); ?></h1>
<p><?php htmlout($article['summary'] );?></p>
<p><a class="btn btn-primary btn-lg" href="#" role="button">Learn more »</a></p>
</div>
</div>
<div class="container">
<!-- Example row of columns -->
<div class="row">
<div class="col-md-4">
<h2><?php htmlout($article['title'] ); ?></h2>
<p><?php htmlout($article['summary'] );?> </p>
<p><a class="btn btn-default" href="#" role="button">View details »</a></p>
</div>
<div class="col-md-4">
<h2><?php htmlout($article['title'] ); ?></h2>
<p><?php htmlout($article['summary'] );?> </p>
<p><a class="btn btn-default" href="#" role="button">View details »</a></p>
</div>
<div class="col-md-4">
<h2><?php htmlout($article['title'] ); ?></h2>
<p><?php htmlout($article['summary'] );?></p>
<p><a class="btn btn-default" href="#" role="button">View details »</a></p>
</div>
<?php endforeach; ?>
</div>
我希望有足够的信息,只是想知道我如何能够提取我需要的数组部分,以便每个条目都不同。
提前致谢
答案 0 :(得分:1)
基本上,您可以通过索引访问数组元素。删除foreach
并使用$articles[0]
作为主文章,$articles[1]
等等。其余部分。
您可以使用array_slice
功能改进代码以提取子新闻并使用foreach
来避免重复每个代码。
答案 1 :(得分:1)
有十几种方法可以做到这一点。我会使用array_shift并从数组中获取第一篇文章。然后将foreach循环向下移动到您拥有class =&#34; col-md-4&#34; divs,a la
<div class="jumbotron">
<div class="container">
<?php $firstArticle = array_shift($articles); // this takes the first one off the array ?>
<h1><?php htmlout($firstArticle['title'] ); ?></h1>
<p><?php htmlout($firstArticle['summary'] );?></p>
<p><a class="btn btn-primary btn-lg" href="#" role="button">Learn more »</a></p>
</div>
</div>
<div class="container">
<div class="row">
<?php
// the remaining four articles can be accessed with the foreach
foreach ($articles as $article):?>
<div class="col-md-4">
<h2><?php htmlout($article['title'] ); ?></h2>
<p><?php htmlout($article['summary'] );?> </p>
<p><a class="btn btn-default" href="#" role="button">View details »</a></p>
</div>
<?php endforeach; ?>
</div>
</div>
如果你注意到,你不必重复循环内的html。循环为你重复它。
答案 2 :(得分:0)
我会调试这部分代码,以确保您获得了您期望的内容,在循环之前对$ result执行print_r或var_dump。在测试之后放一个exit(),这样在调试时它就不会执行代码的任何其他部分:
foreach ($result as $row){
$articles[] = array(
'id' => $row['id'],
'title' => $row['title'],
'summary' => $row['summary'],
'content' => $row['content']);
}
您对该模板的宣读看起来不错。我很好奇为什么你要获得相同数据的线条。
清单:
您是否检查过数据库以确保数据在那里?
为什么你之前没有$result->fetchAll(PDO::FETCH_ASSOC);
foreach循环?
答案 3 :(得分:0)
为什么你不在index.php中这样做?
通过这种方式,您可以避免创建数组数组。
<?php
try{
$sql = 'SELECT * FROM `articles` ORDER BY publicationDate DESC LIMIT 0,5';
$result = $pdo->query($sql);
} catch (PDOException $e){
$error = 'Error fetching jokes: ' . $e->getMessage();
}
?>
<div class="jumbotron">
<div class="container">
<?php
while($row = $result->fetch_array(MYSQLI_ASSOC)) {
?>
<h1><?php echo $row['id']; ?></h1>
<p><?php echo $row['summary']; ?></p>
<p><a class="btn btn-primary btn-lg" href="#" role="button">Learn more »</a></p>
</div>
</div>
<div class="container">
<!-- Example row of columns -->
<div class="row">
<div class="col-md-4">
<h2><?php echo $row['title']; ?></h2>
<p><?php echo $row['summary']; ?> </p>
<p><a class="btn btn-default" href="#" role="button">View details »</a></p>
</div>
<div class="col-md-4">
<h2><?php echo $row['title']; ?></h2>
<p><?php echo $row['summary']; ?> </p>
<p><a class="btn btn-default" href="#" role="button">View details »</a></p>
</div>
<div class="col-md-4">
<h2><?php echo $row['title']; ?></h2>
<p><?php echo $row['summary']; ?></p>
<p><a class="btn btn-default" href="#" role="button">View details »</a></p>
</div>
</div>
<?php
}
?>
</div>
答案 4 :(得分:0)
要停止回显重复项,您可以根据<div>
的键添加$articles
包装器:
<?php
// Loop through articles
foreach ($articles as $key => $article) {
// If first place, insert jumbotron class & container class
if($key == 0) { ?>
<div class="jumbotron">
<div class="container">
<?php }
// Not 1st, just add rows
else {
// If second place, add container class
if($key == 1) { ?><div class="container"><?php } ?>
<div class="row">
<div class="col-md-4">
<?php } ?>
<h1><?php htmlout($article['title'] ); ?></h1>
<p><?php htmlout($article['summary'] );?></p>
<p><a class="btn btn-primary btn-lg" href="#" role="button">Learn more »</a></p>
</div>
</div>
<?php
// If last place, add container class end
if($key == 4) { ?></div><?php }
}; ?>