我在博客网站上工作,过去几天我一直在清理它,所以它使用了更多包含的功能而不是内联php。到目前为止,它确实很有帮助。
现在我正试图使用一个函数来获取数据库中的所有博客文章,这些文章存储如下:
以前我在我的主blog.php文件中执行此操作,该文件包含所有html。看起来像这样:
$stmt = $db->prepare("SELECT * FROM blog_posts ORDER BY id DESC");
$stmt->execute();
foreach($stmt as $blogPost)
{
$dateTime = date("j F, Y g:i a", (strtotime($blogPost['date_posted'])));
echo "<div class='blog-main-preview'>";
echo "<p class='blog-preview-title'>" . $blogPost['title'] . "</p>";
echo "<p id='blog-preview-date'>" . $dateTime . "</p><br>";
$post = $blogPost['post'];
$post = strip_tags($post);
$post = substr($post, 0, 200);
echo "<p id='blog-preview-post'>" . $post . "...</p><br>";
echo "<a href='blog-post.php?postid=" . $blogPost['id'] . "' id='read-more'><p>Read More</p></a><br>";
echo "</div>";
}
这很好用,但我也想把它转移到一个功能上。我意识到我可以将整个事情移动到一个函数中,我只是希望有一个解决方案,我没有必要在函数中使用任何html,并且它可以返回一些我可以运行的函数主blog.php文件中的foreach循环。我可以这样做吗?
编辑:所以要澄清一下,我正在寻找的是让我的blog.php页面看起来像:
$blogPosts = getBlogPosts($db);
foreach($blogPosts as $blogPost)
{
$dateTime = date("j F, Y g:i a", (strtotime($blogPost['date_posted'])));
echo "<div class='blog-main-preview'>";
echo "<p class='blog-preview-title'>" . $blogPost['title'] . "</p>";
echo "<p id='blog-preview-date'>" . $dateTime . "</p><br>";
$post = $blogPost['post'];
$post = strip_tags($post);
$post = substr($post, 0, 200);
echo "<p id='blog-preview-post'>" . $post . "...</p><br>";
echo "<a href='blog-post.php?postid=" . $blogPost['id'] . "' id='read-more'><p>Read More</p></a><br>";
echo "</div>";
}
函数文件将包含检索并返回blogPosts的函数。
答案 0 :(得分:2)
<?php
function getBlogPosts($db) {
$stmt = $db->prepare("SELECT * FROM blog_posts ORDER BY id DESC");
$stmt->execute();
// Get all results from the query as an array of associative arrays
$rows = $sth->fetchAll();
// Post-process results
// Use `&` to get a reference to each row to prevent the default
// "copy on write" behavior of PHP's arrays from detaching our
// changes from the $rows array. Without this, the updated $row[X]
// values would only be visible inside the foreach loop.
foreach ($rows as &$row) {
$row['date_posted'] = date("j F, Y g:i a", strtotime($row['date_posted']));
$row['post'] = strip_tags($row['post']);
$row['post'] = substr($row['post'], 0, 200);
}
return $rows;
}
$blogPosts = getBlogPosts($db);
foreach($blogPosts as $blogPost)
{ ?>
<div class="blog-main-preview">
<p class="blog-preview-title"><?= htmlspecialchars($blogPost['title']) ?></p>
<p id="blog-preview-date"><?= htmlspecialchars($blogPost['date_posted']) ?></p><br>
<p id="blog-preview-post"><?= htmlspecialchars($blogPost['post']) ?>...</p><br>
<a href="blog-post.php?postid=<?= urlencode($blogPost['id']) ?>" id="read-more"><p>Read More</p></a><br>
</div>
<?php } ?>
答案 1 :(得分:1)
您只需从函数返回AttributeError: 'module' object has no attribute 'Storage'
即可。
$stmt
答案 2 :(得分:0)
function getBlogPosts($db){
$stmt = $db->prepare("SELECT * FROM blog_posts ORDER BY id DESC");
$stmt->execute();
return $stmt->fetchAll();
}