【问题标题】:Use data from sql table in a html form with php使用 php 以 html 形式使用 sql 表中的数据
【发布时间】:2015-04-09 07:27:36
【问题描述】:

我正在尝试在 html 中创建一个表单,该表单有一个组合框,其中包含一个从我的 SQL 表自动创建的列表。 我已经设法在我的课堂上制作了一个集成的组合框,我在其中使用了我所有的数据库语句。 但是如何在我的表单编写的另一个位置使用代码? 我还在学习 php,这对我来说有点新,所以我希望我的问题很清楚。

代码:

    class Lesdb
    {
        private static $lesdbInstantie = null;

        private $dbh;

        private function __construct($server, $username, $password, $database)
        {
            try
            {
                $this->dbh = new PDO("mysql:host=$server; dbname=$database", $username, $password);
                //Bij error: exception opwerpen
                $this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            }
            catch (PDOException $e)
            {
                die($e->getMessage());
            }
        }

        public static function getLesdbInstantie($server, $username, $password, $database)
        {
            if(is_null(self::$lesdbInstantie))
            {
                self::$lesdbInstantie = new Lesdb($server, $username, $password, $database);
            }
            return self::$lesdbInstantie;
        }
    public function testComboBox()
    {
        echo "<h1> ComboBox functienamen </h1>";

            $sql = "SELECT DISTINCT ftienaam FROM werknemers";
            $stmt = $this->dbh->prepare($sql);
            $stmt->execute();

        $dropdown = "<select name='ftienaam'>";
        foreach ($stmt as $row)
        {
            $dropdown .= "\r\n<option value='{$row['ftienaam']}'>{$row['ftienaam']}</option>";
        }
        $dropdown .= "\r\n</select>";

        echo $dropdown;

    }
}

?>

TestCombobox 函数确实有效,但它应该被实现到我的表单中,该表单不在 Lesdb 类中。 示例:

function ShowForm()
{
    ?>
    <form action="Index.php?actie=zoekInLijst" method=post>
        <label for=ComboBox>ComboBox</label>
            <select name = "the_name">
                <option value="name">SQL STATEMENTS
            </select>
    </form>
<?php
}

所以我只是想从我的表单中的 Lesdb 类中调用函数 testComboBox。

【问题讨论】:

    标签: php html sql


    【解决方案1】:

    您必须创建该类的新实例。然后在那个实例上你必须加载函数。

    不要忘记在文件顶部包含类。

    $theLesDB = new Lesdb();
    
    $theLesDB->testComboBox();
    

    【讨论】:

    • ( ! ) 致命错误:从 C:\wamp\www\PHP\Oefenreeksen\OefenReeks 4 PDOZoekFunctie\ToonFuncties.php 中的无效上下文调用私有 Lesdb::__construct() 第 98 行 php $db = new Lesdb(); $db->testComboBox(); ?>
    • 类的构造函数是私有的。当你尝试创建它的实例时,构造函数总是首先被加载。公开。
    • __construct($server, $username, $password, $database) --> 需要参数
    • 有没有关于本章的教程?我认为参数是自动生成的,因为它是在 Lesdb 类中生成的?
    • 只需在类中声明变量$server、$username、$password、$database。我认为您目前不会使用多个数据库。你一次尝试了太多事情。我会拆分代码。首先,只需创建一个在第一次构造时建立连接并返回它的 dbClass。您可以使用静态函数来做到这一点:阅读:stackoverflow.com/questions/20732897/php-oop-database-connect 然后您可以加载该类并在其他类(如 werknemers)中使用它。
    【解决方案2】:

    假设你的类在一个文件中,我们称它为 Lesdb.php 并且你的表单在另一个文件中,例如Form.php,那么你必须在表单文件中包含你的类(就在顶部,在其他代码之前),

    include_once "<PATH_TO_YOUR_FILE>\Lesdb.php";
    

    创建你的类的一个实例(你想在哪里使用那个实例),

    Lesdb db = new Lesdb();
    

    并在 ShowForm 函数中使用该函数。

    db->testComboBox();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-02
      • 2016-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多