如何使用 php 从数据库的每一行中 select 数据
How to select data from each row of database using php
我正在创建一个博客页面,我想使用 php 从数据库中检索数据。我创建了 2 个页面:
- 博客页面
- 预览页面
博客页面用于从数据库中检索所有数据并仅显示博客的标题和概念。在概念之后有一个按钮可以查看整个博客。我正在上传 UI 的示例,比如它应该是什么样子。
Blog Example
单击按钮后,应导航至预览页面,其中应根据博客页面中选择的标题动态更改博客的全部内容。
现在,我在后端创建了 2 个博客,但它正在从我最近创建的最新博客的数据库中获取所有值,即使我单击博客的按钮时也是如此我创建于 2 天前。
我写的博客页面代码是:
<?php
session_start();
$dbHost = "localhost";
$dbUsername = 'root';
$dbPassword = '';
$dbName = 'Database';
$db = new mysqli($dbHost, $dbUsername, $dbPassword, $dbName);
if($db->connect_error){
die("Connection failed: " . $db->connect_error);
}
$sql = $db->prepare('Select * from blogs;');
$sql->execute();
$result = $sql->get_result();
?>
<!DOCTYPE html>
<html>
<head>
<title>Blogs</title>
<?php include '_header.html'; ?>
<link rel="stylesheet" href="css/about.css">
<link rel="stylesheet" href="css/blog.css">
</head>
<body>
<?php include '_navbar.html'; ?>
<div class="bg2">
<h1>Our Opinion</h1>
</div>
<div class="col-sm-12">
<div class="container">
<div class="col-sm-12">
<div class="row">
<div class="col-sm-12">
<?php
if($result)
{
while($row = $result->fetch_assoc())
{
echo "<h3><a href = 'preview.php' style = 'color:black'>".$row['Title']."</a></h3>";
$_SESSION['Title'] = $row['Title'];
echo "<p>".$row['concept']."</p><hr>";
}
}
?>
</div><hr>
</div>
</div>
</div>
</div>
<div style="padding:50px"></div>
<?php include '_footer1.html'; ?>
<?php include '_footer.html'; ?>
</body>
</html>
预览页面代码为:
<?php
session_start();
$title = $_SESSION['Title'];
$dbHost = "localhost";
$dbUsername = 'root';
$dbPassword = '';
$dbName = 'database';
$db = new mysqli($dbHost, $dbUsername, $dbPassword, $dbName);
if($db->connect_error){
die("Connection failed: " . $db->connect_error);
}
$sql = $db->prepare("SELECT * FROM blogs where Title = ?");
$sql ->bind_param("s",$title);
$sql->execute();
$result = $sql ->get_result();
?>
<!DOCTYPE html>
<html>
<head>
<title>Preview</title>
<?php include '_header.html'; ?>
<link rel="stylesheet" href="css/treatment.css">
</head>
<body>
<?php include '_navbar.html'; ?>
<div class="col-sm-12">
<div class="container-fluid">
<div style="text-align:center">
<img src = "img/Ayurvedjya 02.png" alt = "Ayurvedajya Logo" width = "15%">
</div>
<?php
if($result)
{
while($row = $result->fetch_assoc())
{
echo "<h3>".$row['Title']."</h3><hr>";
?>
<div class="col-sm-12">
<div class="row">
<div class="col-sm-9">
<?php echo "<p><b>".$row['Content']."</b></p>";?>
</div>
<div class="col-sm-3">
<?php
echo '<img src="img/'.$row['image'].'" width= 100%/>';
?>
</div>
</div>
</div>
<?php }}else {echo "No Data";}?>
</div>
</div>
<div style="padding:50px"></div>
<?php include '_footer1.html'; ?>
<?php include '_footer.html'; ?>
</body>
</html>
任何人都可以确认我哪里出错了,我该如何解决这个问题?
你将每一行的数据放入 session,每次循环时覆盖该值,然后再重定向(你的 header 值也会在每个循环中被覆盖,只是最后一个发给浏览器)。您输入 session 的标题与实际点击的内容无关。您的表单需要发送点击博客的 ID 然后使用它,而不是从数据库中获取的数据。
同样对于这种情况,确实没有理由 post 将表单 post 到相同的脚本然后重定向(根据您的 original code)。带有查询参数的简单超链接可以很好地完成这项工作:
博客页面:
echo "<h3><a href = 'preview.php?id=".$row["ID"]."' style = 'color:black'>".$row['Title']."</a></h3>";
预览页面:
<?php
session_start();
$id = $_GET["id"]; //get the ID from the URL
//... etc, then
$sql = $db->prepare("SELECT * FROM blogs where ID = ?");
$sql ->bind_param("i",$id);
请注意,我在这里假设您的博客有一个整数 ID 列作为数据库中的主键 - 这是正常做法,使用它作为查询参数比标题更稳健(因为标题可以更改,或者不是唯一的,或者其中包含在 URL 中无法正常工作的字符等。因此我强烈建议您使用 ID 而不是标题来标识博客)。
我正在创建一个博客页面,我想使用 php 从数据库中检索数据。我创建了 2 个页面:
- 博客页面
- 预览页面
博客页面用于从数据库中检索所有数据并仅显示博客的标题和概念。在概念之后有一个按钮可以查看整个博客。我正在上传 UI 的示例,比如它应该是什么样子。
Blog Example
单击按钮后,应导航至预览页面,其中应根据博客页面中选择的标题动态更改博客的全部内容。
现在,我在后端创建了 2 个博客,但它正在从我最近创建的最新博客的数据库中获取所有值,即使我单击博客的按钮时也是如此我创建于 2 天前。
我写的博客页面代码是:
<?php
session_start();
$dbHost = "localhost";
$dbUsername = 'root';
$dbPassword = '';
$dbName = 'Database';
$db = new mysqli($dbHost, $dbUsername, $dbPassword, $dbName);
if($db->connect_error){
die("Connection failed: " . $db->connect_error);
}
$sql = $db->prepare('Select * from blogs;');
$sql->execute();
$result = $sql->get_result();
?>
<!DOCTYPE html>
<html>
<head>
<title>Blogs</title>
<?php include '_header.html'; ?>
<link rel="stylesheet" href="css/about.css">
<link rel="stylesheet" href="css/blog.css">
</head>
<body>
<?php include '_navbar.html'; ?>
<div class="bg2">
<h1>Our Opinion</h1>
</div>
<div class="col-sm-12">
<div class="container">
<div class="col-sm-12">
<div class="row">
<div class="col-sm-12">
<?php
if($result)
{
while($row = $result->fetch_assoc())
{
echo "<h3><a href = 'preview.php' style = 'color:black'>".$row['Title']."</a></h3>";
$_SESSION['Title'] = $row['Title'];
echo "<p>".$row['concept']."</p><hr>";
}
}
?>
</div><hr>
</div>
</div>
</div>
</div>
<div style="padding:50px"></div>
<?php include '_footer1.html'; ?>
<?php include '_footer.html'; ?>
</body>
</html>
预览页面代码为:
<?php
session_start();
$title = $_SESSION['Title'];
$dbHost = "localhost";
$dbUsername = 'root';
$dbPassword = '';
$dbName = 'database';
$db = new mysqli($dbHost, $dbUsername, $dbPassword, $dbName);
if($db->connect_error){
die("Connection failed: " . $db->connect_error);
}
$sql = $db->prepare("SELECT * FROM blogs where Title = ?");
$sql ->bind_param("s",$title);
$sql->execute();
$result = $sql ->get_result();
?>
<!DOCTYPE html>
<html>
<head>
<title>Preview</title>
<?php include '_header.html'; ?>
<link rel="stylesheet" href="css/treatment.css">
</head>
<body>
<?php include '_navbar.html'; ?>
<div class="col-sm-12">
<div class="container-fluid">
<div style="text-align:center">
<img src = "img/Ayurvedjya 02.png" alt = "Ayurvedajya Logo" width = "15%">
</div>
<?php
if($result)
{
while($row = $result->fetch_assoc())
{
echo "<h3>".$row['Title']."</h3><hr>";
?>
<div class="col-sm-12">
<div class="row">
<div class="col-sm-9">
<?php echo "<p><b>".$row['Content']."</b></p>";?>
</div>
<div class="col-sm-3">
<?php
echo '<img src="img/'.$row['image'].'" width= 100%/>';
?>
</div>
</div>
</div>
<?php }}else {echo "No Data";}?>
</div>
</div>
<div style="padding:50px"></div>
<?php include '_footer1.html'; ?>
<?php include '_footer.html'; ?>
</body>
</html>
任何人都可以确认我哪里出错了,我该如何解决这个问题?
你将每一行的数据放入 session,每次循环时覆盖该值,然后再重定向(你的 header 值也会在每个循环中被覆盖,只是最后一个发给浏览器)。您输入 session 的标题与实际点击的内容无关。您的表单需要发送点击博客的 ID 然后使用它,而不是从数据库中获取的数据。
同样对于这种情况,确实没有理由 post 将表单 post 到相同的脚本然后重定向(根据您的 original code)。带有查询参数的简单超链接可以很好地完成这项工作:
博客页面:
echo "<h3><a href = 'preview.php?id=".$row["ID"]."' style = 'color:black'>".$row['Title']."</a></h3>";
预览页面:
<?php
session_start();
$id = $_GET["id"]; //get the ID from the URL
//... etc, then
$sql = $db->prepare("SELECT * FROM blogs where ID = ?");
$sql ->bind_param("i",$id);
请注意,我在这里假设您的博客有一个整数 ID 列作为数据库中的主键 - 这是正常做法,使用它作为查询参数比标题更稳健(因为标题可以更改,或者不是唯一的,或者其中包含在 URL 中无法正常工作的字符等。因此我强烈建议您使用 ID 而不是标题来标识博客)。