首页 > 解决方案 > 如何在网页上显示数据库中的内容并允许用户选择以获取更多信息

问题描述

首先,如果有人问过类似的问题,请快速道歉。我已经尽我所能找到以前发布的解决方案,但由于我对 Web 开发的了解有些基础,我可能很难正确解释这个问题。

由于我觉得有必要在下面做很多解释以尝试清楚我正在尝试做什么,因此实际查看该站点以尝试了解它的功能以及我正在解释的内容可能会更有用为了完全理解我正在尝试做的事情。它目前在 000freewebhost 上可用,因此只需点击以下链接:

https://legal-bytes.000webhostapp.com/topics.php

TL;DR 我正在从数据库表中选择记录,将它们存储在一个数组中,然后将每个记录显示为指向另一个页面的单独超链接,该页面将包含更多信息,具体取决于已选择的链接。我如何确定选择了哪个链接,然后我可以再次查询数据库以选择我想要显示的附加信息?

现在,关于问题。(请注意,我将在我的解释下方发布我的代码。)

对于一个大学项目,我正在设计一个包含英国法律信息的网站。本网站的部分内容包含法律主题列表。用户可以单击任何主题并被带到一个新页面,在那里他们可以选择他们正在寻找的材料类型。在此之后,他们将被带到另一个页面,在那里他们可以选择他们想要的特定资源。

一个简单的例子应该澄清这一点:用户导航到“主题”页面并从可用主题中选择“公司法”。然后,他们可以从“文章”、“书籍”、“案例”或“立法”(均与公司法相关)中进行选择(我将这 4 个选项统称为“资源类型”)。所以他们选择“案例”。他们将看到的下一页是公司法网站上所有可用案例的列表(这些是“资源”本身)。最后一步是选择他们想要更多信息的案例,并将其显示在新页面上。

到目前为止,我设计网站的方式是使用数据库来存储有关这些资源的信息。例如,对于一个案件,我会存储案件的名称和案件的事实。为了显示资源,我正在查询数据库并从相关表中选择所有具有相同主题类型(公司法、土地法等)和相同资源类型(案例、文章等)的记录。这些记录存储在一个数组中,页面最终使用“FOR”循环填充这些记录。记录显示在页面上,然后作为使用上述循环动态创建的链接。

以上所有内容均按预期工作-以下是我的问题所在:

这个想法是,当用户选择这些链接(这些资源)时,他们将被带到一个新页面,该页面将显示信息(例如上面示例中的案例事实)。但是,我无法弄清楚如何检查用户单击了哪个链接(资源)以便能够在下一页上显示正确的信息。

以下是相关页面的代码: 这是提到的“FOR”循环:

    <?php for ($x=0; $x < count($resource_info); $x++): ?>
    <a href="info-page.php?<?php echo $pageref ?>&<?php echo $pagetype ?>&<?php echo $resource_info[$x] ?>">
        <div class="topic-group">
            <div class="cases">  
                <p><?php echo $resource_info[$x] ?></p>
            </div>
        </div>
    </a>  
<?php endfor ?>

只是对上述内容的快速解释: $resource_info 变量是我的数组,它存储从数据库中选择的记录。$pageref 是我用来确定选择哪个主题的变量(例如,'company' 将是 $pageref 指的是'Company Law') $pagetype 是另一个变量,它指的是正在显示的资源类型(例如'cases ' 将是引用 'Cases' 的 $pagetype)

如上所述,我正在查询数据库以选择相关记录。代码如下所示。您会注意到 topic_id 设置为 4 并且 type_id 设置为 1 - 这是有原因的,这与当前问题无关,但是足以说明 sql 设置为搜索与公司法相关的任何案例 (type_id) (主题 ID)。

包括('主题信息.php');$resource_info = 数组();

if ($searchdb == true) {

    $conn = new mysqli($servername, $username, $password, $dbname);
    $sql = "SELECT * FROM resource_info WHERE topic_id= '4' AND type_id= '1'";
    $result = $conn->query($sql);
    $x = 0;
    if ($result->num_rows > 0) {
        while ($row = $result->fetch_assoc()) {
            array_push($resource_info, ($row['title']));
        }
    } 
    $conn->close();

对上述内容的进一步解释: topic-info.php 是另一个文件,用于定义我在上面解释的变量的值。您会注意到它会检查 $searchdb 布尔值是否设置为 true。这是在 topic-info.php 文件中建立的(见下文)。这段代码还显示了 $resource_info 数组是如何被填充的,在这种情况下,我们看到它将数据存储在找到的记录的“标题”字段中——这只是它在这种情况下找到的任何案例的名称。

最后,这是 topic-info.php 文件中与解释上述各种变量的定义相关的代码:

if (isset($_GET['cases'])) {
    $pagetype = "cases";
}

/* ------ 省略无关代码 --------- */

if (isset($_GET['company'])) {
    $pagetitle = "Company Law";
    $pageref = "company";
    if (isset($_GET['cases'])) {
        $typeref = "case";
        $searchdb = true;
    }
}

上面的解释:这是 $pagetype 和 $pageref 变量是如何定义的,基于用户到目前为止选择的链接。它还会在满足条件时将 $searchdb 布尔值设置为 true - 当用户单击“公司法”和“案例”时,将满足此条件。

我确实为漫无目的道歉,但我对这种规模的项目仍然相当陌生,并且觉得我可能无法完成我正在尝试做的事情。因此,我不确定我需要包含多少来解释这个问题。另一方面,我想知道它是否会像使用 onclick 事件来设置变量一样简单 - 还是需要更复杂的东西,例如 Javascript 或 AJAX?

请理解,其中绝大多数都有效,但这只是我无法弄清楚的最后一部分 - 我如何确定我需要从表中选择哪条记录?

非常感谢。

标签: javascriptphphtmlmysqlarrays

解决方案


我更喜欢使用 foreach 循环,它会恭敬地为您提供所需的结果。

<?php
foreach (array(1, 2, 3, 4) as &$value) {
    $value = $value * 2;
}
?>

http://php.net/manual/en/control-structures.foreach.php


推荐阅读