использование поля со списком для заполнения другого поля со списком, чтобы пользователь мог выполнить запрос

0

Я пытаюсь позволить пользователю запросить базу данных, используя комбинированные поля. В первом поле со списком отображается список таблиц в базе данных. Когда пользователь выбирает таблицу, запускается другой запрос, который должен заполнять второе поле со списком с именами столбцов в этой таблице (это будет использоваться как выбор для запроса). У меня есть первый комбинированный блок, но я не могу получить второй - для заполнения. Может кто-нибудь помочь с этим? Большое спасибо

вот мой 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 ответ

1

Вы можете использовать:

'DESCRIBE ' . $_POST[ 'Tables' ]

Скорее, чем

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

Это должно возвращать массив столбцов с их именем, типом, лимитом и т.д. Затем вы можете прокручивать каждый столбец и отображать его.

ПРЕДУПРЕЖДЕНИЕ

Вам нужно будет убедиться, что ваши данные POST безопасны для ввода запроса. Поскольку @andy предположил, что ваша таблица потенциально может быть удалена, если вы просто используете это.

  • 0
    Я могу ошибаться, но это не очень безопасно
  • 0
    Если бы я опубликовал {'Tables' => "*tablename*; DROP TABLE *tablename*"} то он просто отбросил бы эту конкретную таблицу.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню