如何使用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 数据表的每一行中添加多个按钮以及如何在它们上应用事件

如何修复 PHP 中的内存泄漏

如何使用 *CSS2* 而不是 CSS3 选择 HTML 表格中的每一行? [复制]

如何在 Scala/Spark 中为数据框中的每一行编写一个 Json 文件并重命名文件

如何使用 Azure 数据工厂解析 Excel 的每一行