如何使用php从数据库的每一行中选择数据
Posted
技术标签:
【中文标题】如何使用php从数据库的每一行中选择数据【英文标题】:How to select data from each row of database using php 【发布时间】:2021-05-08 14:36:00 【问题描述】:我正在创建一个博客页面,我想使用 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>
谁能确认我哪里出错了,我该如何解决这个问题?
【问题讨论】:
因为您将每一行的数据放入会话中,每次循环时都会覆盖该值,然后再重定向(您的标头值也会在每个循环中被覆盖,只有最后一个是发给浏览器)。您放入会话的标题与实际点击的内容无关。您的表单需要发送点击博客的 ID,然后使用它,而不是从数据库中获取的数据 为什么还要发布和重定向?您可以直接从表格中获得一个超链接,而无需会话或重定向 - 这就是网络正常工作的方式 您好 @ADyson,感谢您就我的问题提出了一些 cmets 建议,您能否建议一段代码,以便我了解如何执行此操作。 您是说您不知道如何制作超链接?还是别的什么? 嘿@ADyson,我实际上对选择数据的逻辑感到困惑,比如,我点击第一个博客,然后预览页面应该显示第一个博客的内容。如果我点击第二篇博客,那么我可以在预览页面上看到第二篇博客的所有内容等等。你能帮我解决一下php逻辑吗? 【参考方案1】:您将每一行的数据放入会话中,每次循环时覆盖该值,然后重定向(您的标头值也会在每个循环中被覆盖,只有最后一个被发送到浏览器)。您放入会话的标题与实际点击的内容无关。您的表单需要发送被点击博客的 ID,然后使用它,而不是从数据库中获取的数据。
同样对于这种情况,确实没有理由将表单发布到同一个脚本然后重定向(根据您的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 来标识博客而不是标题)。
【讨论】:
@MayankSharma 没问题。如果答案对您有所帮助,请记住将其标记为“已接受” - 单击答案旁边的勾号,使其变为绿色。 (有关如何对答案做出反应的更多指导,请参阅***.com/help/someone-answers。另请参阅***.com/tour)-谢谢。以上是关于如何使用php从数据库的每一行中选择数据的主要内容,如果未能解决你的问题,请参考以下文章
如何在 JQuery 数据表的每一行中添加多个按钮以及如何在它们上应用事件
如何使用 *CSS2* 而不是 CSS3 选择 HTML 表格中的每一行? [复制]