如何使用 php 从数据库的每一行中 select 数据

How to select data from each row of database using php

我正在创建一个博客页面,我想使用 php 从数据库中检索数据。我创建了 2 个页面:

  1. 博客页面
  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 而不是标题来标识博客)。