繁体   English   中英

如何在同一 HTML 页面上显示 HTML GET 请求数据,使用单独的 PHP 文件来获取它?

[英]How do I display the HTML GET request data on the same HTML page, using a separate PHP file to fetch it?

我正在尝试从 MySQL 数据库中获取数据,该数据库是从 HTML 文件的下拉列表中选择的,并将数据显示在从中选择的同一 HTML 页面上。 我已经使用 HTML 和 PHP 来检索数据并显示它,但它没有显示在用户请求它的同一页面上,而是显示在 PHP 页面上。

这是 get_project_form.html 的 HTML 代码:

<html>
    <head>
        <title>Get Project Form</title>
        <!--Link this html page to the project_style.css page-->
        <link rel="stylesheet" type="text/css" href="project_style.css">
    </head>
    <body>
        <div class="container">
            <form action="get_project_action.php" autocomplete="off" method="get">
                <label for="Query Selections">Query Selections : (You can only select
                    all data from "Projects"
                    for now):</label>
                <select id="first_query" name="queries" required>
                    <option value="" disabled selected>Make a Selection</option>
                    <option value="Projects">Projects</option>
                </select><br />
                <input type="submit" value="Submit"><br />
        </div>
    </body>
</html>

做出选择并单击提交后,数据将显示在带有 URL http://localhost:8015/get_project_action.php?queries=Projects 的页面上

这是 php 文件 get_project_action.php 的代码:

<?php
    echo "<table style='border: solid 1px black;'>";

    class TableRows extends RecursiveIteratorIterator
    {
        function __construct($it) {
            parent::__construct($it, self::LEAVES_ONLY);
        }

        function current() {
            return "<td style='width: 150px; border: 1px solid black;'>" .
                parent::current() . "</td>";
        }

        function beginChildren() {
            echo "<tr>";
        }

        function endChildren() {
            echo "</tr>" . "\n";
        }
    }

    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "pmo";

    try {
        $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username,
            $password);
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $query = $_GET["queries"];
        $stmt = $conn->prepare("SELECT * FROM $query");
        $stmt->execute();

        // set the resulting array to associative
        $result = $stmt->setFetchMode(PDO::FETCH_ASSOC);

        foreach (new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as
                 $k => $v) {
            echo $v;
        }
    } catch (PDOException $e) {
        echo "Error: " . $e->getMessage();
    }
    $conn = null;
    echo "</table>";
?>

如果可能,我想将 HTML 和 PHP 分开。 但从我正在阅读的内容来看,我猜这是不可能的。 我听说最好将逻辑保留在单独的 PHP 文件中,但最好将执行显示的 PHP 的其余部分放在 HTML 文件中,并将 .html 文件改为 .php。 但我希望有一种方法可以将数据显示在表单下方的 get_project_form.html 页面中,而无需在 get_project_form.html 文件中组合任何 PHP 并将其更改为 .php。 如果这是可能的,请告诉我如何。 如果没有,请随时向我展示如何做任何被认为是在网页上显示数据的良好做法。 任何帮助将不胜感激!

假设在 php 文件中,您使用 $dropdownData 数组变量来存储来自 db 的数据。

//PHP file
<?php
   //query to fetch data from db.
   $dropdownData;
   $this->view('get_project_form.html',$dropdownData);
?>

//然后在你的 HTML 文件中使用这个数组变量 $dropdownData 用 "for loop" 来显示 //HTML 文件 //如果 $dropdownData 不为空,你也可以验证它; 否则 php 会报错。

<select id="first_query" name="queries" required>
<option value="" disabled selected>Make a Selection</option>
   <? foreach ($dropdownData as $val => $text) { ?>
       <option value="<? echo $val; ?>" > <? echo $text;?> </option>
   <? } ?>
</select> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM