使用组合框填充另一个组合框,以便用户可以运行查询

时间:2013-09-24 09:18:18

标签: javascript php jquery

我试图让用户使用组合框查询数据库。第一个组合框显示数据库中的表列表。当用户选择一个表时,运行另一个查询,该查询应该填充第二个组合框,其中包含该表中的列名(这将用作查询的选择)我有第一个组合框工作,但我无法得到第二个填充。有人能帮忙吗?非常感谢

这是我的HTML代码

<form id="ownQueryForm" name="ownQueryForm" method="POST" action="">

    <div id = "tableSelect_div">
        <P> Select table to Query: </P>

            <select name = "Tables" id = "Tables" onchange = 'this.form.submit()'>
                <option value = "blank"> Please choose a Table</option>
                <?php foreach (($tableContent) as $row) : ?>
                <option value = "<?php echo $row['Tables_in_DB_EXECUTION_MANAGER_TEST']; ?>"><?php echo $row['Tables_in_DB_EXECUTION_MANAGER_TEST'];?></option>
                <?php endforeach ?>

            </select>   


    </div>

    <div id = "columnSelect_div">
        <p>SELECT</p>
            <select name = "Columns" id = "Columns">
                <?php foreach (($columnContent) as $row) : ?>
                <option value = "<?php echo $row['COLUMN_NAME']; ?>"><?php echo $row['COLUMN_NAME'];?></option>
                <?php endforeach ?>
            </select>
    </div>


</form>

这是我到目前为止的两个问题

    public static function getTables(){
    global $db;

    $st = $db->prepare("show tables");
    $st ->execute();
    $table = $st->fetchAll(PDO::FETCH_ASSOC);

    return $table;


}

public static function getColumns(){
    global $db;
    $st = $db->prepare("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = :value ");
    $st->bindParam(':value', $_POST['Tables'], PDO::PARAM_STR);

    $st -> execute();
    $column = $st -> fetchAll(PDO::FETCH_ASSOC);

    return $column;
    //print_r($column);
}

}

我使用的控制器用于渲染getTable(在模型中)以及getColumns作为同一控制器上的两个单独函数。这可以吗?
我在控制器中有这个但它永远不会运行(除非我取出if语句)然后它在页面加载时运行

if (isset ( $_POST ['Tables'] )) {


$c = new ownQueryController();
$c ->queryRequest();

}

1 个答案:

答案 0 :(得分:1)

您可以使用:

'DESCRIBE ' . $_POST[ 'Tables' ]

而不是

"SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = :value "

这应该返回一个列的数组,包括它们的名称,类型,限制等。然后你可以遍历每一列并显示它。

警告

您需要确保将POST数据安全放入查询中。正如@andy所建议的,如果您只是使用它,您的表可能会被丢弃。