如何显示数据库中的文章?
How can I show articles from my database?
我正在尝试制作一个在 index.php 中显示新帖子的文章发布系统,当您单击其中一个时,它会将您带到显示整篇文章的 artikkeli-sivu.php。出于某种原因,我无法让文章在 artikkeli-sivu.php 上显示,但我可以在 index.php 上显示。 artikkeli-sivu.php 给我这个错误:
Warning: Undefined array key "article_id" in
C:\xampp\htdocs\php-projekti1\artikkeli-sivu.php on line 74.
下面是 index.php,connection.php 这里是 table
<?php
include_once('connection.php');
include_once('article.php');
$article = new Article;
$artikkelit = $article->fetchAll();
?>
<!DOCTYPE html>
<html>
<head>
<title>CMS projekti</title>
<link rel="stylesheet" type="text/css" href="style.css">
<meta charset="UTF-8">
</head>
<body>
<div class="container">
<a id="otsikko" href="index.php">CMS</a>
<ol>
<?php foreach ($artikkelit as $artikkelii) { ?>
<li>
<a href="artikkeli-sivu.php?id=<?php echo $artikkelii['article_id']; ?>">
<?php echo $artikkelii['article_title']; ?>
</a><br>
postattu: <?php echo date('l jS', $artikkelii['article_timestamp']); ?>
</li>
<?php } ?>
</ol>
</div>
</body>
</html>
这是艺术作品-sivu.php
<!DOCTYPE html>
<?php
include_once 'connection.php';
include_once 'article.php';
$article = new Article;
if(isset($_GET['id'])) {
$id = $_GET['id'];
$data = $article->fetch_data($id);
}
?>
<html>
<head>
<meta charset="UTF-8">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Roboto&display=swap" rel="stylesheet">
<style>
body, html {
margin: 0;
padding: 0;
text-align: center;
}
.back-button {
position: relative;
top: 500px;
width: 140px;
height: 45px;
border-radius: 25px;
font-size: 18px;
font-family: 'Roboto', arial;
font-weight: 500;
letter-spacing: 2px;
background-color: white;
box-shadow: 0px 8px 15px rgba(0, 0, 0, 0.1);
border: none;
transition: 0.3s ease 0s;
cursor: pointer;
outline: none;
}
.back-button:hover {
background-color: #24a0ed;
box-shadow: 0px 5px 20px #6bbff2;
color: #fff;
transform: translateY(-3px);
}
.article-container {
background-color: white;
width: 500px;
height: 400px;
margin: 0 auto;
box-shadow: 0px 0px 1px 1px lightgrey;
}
h1 {
text-align: center;
font-family: 'Roboto', sans-serif;
font-weight: 500;
}
</style>
</head>
<body>
<h1> Artikkelit </h1>
<div class="article-container">
<?php echo $data['article_id'];?>
</div>
<a class="back-link" href="index.php"><button class="back-button">Back</button></a>
</body>
</html>
这里是article.php
<?php
class Article {
public function fetchAll(){
global $pdo;
$query = $pdo->prepare("SELECT * FROM artikkelit");
$query->execute();
return $query->fetchAll();
}
public function fetch_data($article_id){
global $pdo;
$query = $pdo->prepare("SELECT * FROM artikkelit WHERE article_id= ?");
$query->bindValue(1, $article_id);
$query->execute();
return $query->fetchAll();
}
}
?>
这是connection.php
<?php
$servername = "localhost";
$username = "root";
$password = "";
$database = "cms";
try {
$pdo = new PDO('mysql:host=localhost;dbname=cms', 'root', '');
echo "<h3>Yhteys luotu!</h3>";
} catch(PDOException $e) {
exit('Epäonnistui');
}
?>
在fetch_data
函数中,这一行
return $query->fetchAll();
returns 查询选择的所有行。因为它不知道是否会有 0、1 或更多行,所以它 returns 一个行数组。因此,即使在您的情况下您只期望 1 行,您也会得到一组行。
因此,$data['article_id']
将不起作用,因为 $data
不是具有命名属性的单个行,它是一个行数组。您可以使用 var_dump($data);
调试并查看结构。
两个可能的修正:
快速而肮脏 - 只需从数组中获取第一行并从中回显文章 ID:
<?php echo $data[0]['article_id'];?>
或
更整洁一些 - 让您的 fetch_data
函数只从数据库中检索一行:
return $query->fetch(PDO::FETCH_ASSOC);
此外,您应该在尝试访问之前检查 $data
是否已填充 - 否则,如果 URL 不包含 ID,或者 ID 不包含,您将收到错误或警告数据库中不存在。
例如(假设您使用了上面的选项 2)
<div class="article-container">
<?php
if (isset($data) {
echo $data['article_id'];
}
else
{
echo "No data found";
}
?>
</div>
文档参考:
我正在尝试制作一个在 index.php 中显示新帖子的文章发布系统,当您单击其中一个时,它会将您带到显示整篇文章的 artikkeli-sivu.php。出于某种原因,我无法让文章在 artikkeli-sivu.php 上显示,但我可以在 index.php 上显示。 artikkeli-sivu.php 给我这个错误:
Warning: Undefined array key "article_id" in C:\xampp\htdocs\php-projekti1\artikkeli-sivu.php on line 74.
下面是 index.php,connection.php 这里是 table
<?php
include_once('connection.php');
include_once('article.php');
$article = new Article;
$artikkelit = $article->fetchAll();
?>
<!DOCTYPE html>
<html>
<head>
<title>CMS projekti</title>
<link rel="stylesheet" type="text/css" href="style.css">
<meta charset="UTF-8">
</head>
<body>
<div class="container">
<a id="otsikko" href="index.php">CMS</a>
<ol>
<?php foreach ($artikkelit as $artikkelii) { ?>
<li>
<a href="artikkeli-sivu.php?id=<?php echo $artikkelii['article_id']; ?>">
<?php echo $artikkelii['article_title']; ?>
</a><br>
postattu: <?php echo date('l jS', $artikkelii['article_timestamp']); ?>
</li>
<?php } ?>
</ol>
</div>
</body>
</html>
这是艺术作品-sivu.php
<!DOCTYPE html>
<?php
include_once 'connection.php';
include_once 'article.php';
$article = new Article;
if(isset($_GET['id'])) {
$id = $_GET['id'];
$data = $article->fetch_data($id);
}
?>
<html>
<head>
<meta charset="UTF-8">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Roboto&display=swap" rel="stylesheet">
<style>
body, html {
margin: 0;
padding: 0;
text-align: center;
}
.back-button {
position: relative;
top: 500px;
width: 140px;
height: 45px;
border-radius: 25px;
font-size: 18px;
font-family: 'Roboto', arial;
font-weight: 500;
letter-spacing: 2px;
background-color: white;
box-shadow: 0px 8px 15px rgba(0, 0, 0, 0.1);
border: none;
transition: 0.3s ease 0s;
cursor: pointer;
outline: none;
}
.back-button:hover {
background-color: #24a0ed;
box-shadow: 0px 5px 20px #6bbff2;
color: #fff;
transform: translateY(-3px);
}
.article-container {
background-color: white;
width: 500px;
height: 400px;
margin: 0 auto;
box-shadow: 0px 0px 1px 1px lightgrey;
}
h1 {
text-align: center;
font-family: 'Roboto', sans-serif;
font-weight: 500;
}
</style>
</head>
<body>
<h1> Artikkelit </h1>
<div class="article-container">
<?php echo $data['article_id'];?>
</div>
<a class="back-link" href="index.php"><button class="back-button">Back</button></a>
</body>
</html>
这里是article.php
<?php
class Article {
public function fetchAll(){
global $pdo;
$query = $pdo->prepare("SELECT * FROM artikkelit");
$query->execute();
return $query->fetchAll();
}
public function fetch_data($article_id){
global $pdo;
$query = $pdo->prepare("SELECT * FROM artikkelit WHERE article_id= ?");
$query->bindValue(1, $article_id);
$query->execute();
return $query->fetchAll();
}
}
?>
这是connection.php
<?php
$servername = "localhost";
$username = "root";
$password = "";
$database = "cms";
try {
$pdo = new PDO('mysql:host=localhost;dbname=cms', 'root', '');
echo "<h3>Yhteys luotu!</h3>";
} catch(PDOException $e) {
exit('Epäonnistui');
}
?>
在fetch_data
函数中,这一行
return $query->fetchAll();
returns 查询选择的所有行。因为它不知道是否会有 0、1 或更多行,所以它 returns 一个行数组。因此,即使在您的情况下您只期望 1 行,您也会得到一组行。
因此,$data['article_id']
将不起作用,因为 $data
不是具有命名属性的单个行,它是一个行数组。您可以使用 var_dump($data);
调试并查看结构。
两个可能的修正:
快速而肮脏 - 只需从数组中获取第一行并从中回显文章 ID:
<?php echo $data[0]['article_id'];?>
或
更整洁一些 - 让您的
fetch_data
函数只从数据库中检索一行:return $query->fetch(PDO::FETCH_ASSOC);
此外,您应该在尝试访问之前检查 $data
是否已填充 - 否则,如果 URL 不包含 ID,或者 ID 不包含,您将收到错误或警告数据库中不存在。
例如(假设您使用了上面的选项 2)
<div class="article-container">
<?php
if (isset($data) {
echo $data['article_id'];
}
else
{
echo "No data found";
}
?>
</div>
文档参考: