根据之前的选择选择字段

时间:2015-05-05 11:13:06

标签: php mysql select

我正在尝试从前一个选择字段(在同一页面上)填充选择下拉列表

第一个选择,显示来自MYSQL数据库的表名。 第二个选择应显示所选表格中的列名称

这是我的代码

page.php文件

<label class="">Select a Database Table</label>
 <select class="full-width" data-placeholder="Select Table" data-init-plugin="select2" onchange="showColumn(this.value);">
  <optgroup label="Table">

<?php

   $table_count = mysql_query("SELECT TABLE_NAME FROM information_schema.tables WHERE table_schema = 'cl49-vclients'"); 

    $tables = array();
    while($row = mysql_fetch_array($table_count))
    { ?>
  <option value="<?php echo $row["TABLE_NAME"]; ?>"><?php echo $row["TABLE_NAME"]; ?></option>
<?php
   }
?>
 <!-- </optgroup>-->
</select>
<script>
function showColumn(tablename)
{
    if(tablename !='')
    {
        $.ajax({ 
            type:"POST",
            url :"ajax.php"; 
            data:{tablename:tablename},
            success:function(data){
                alert(data); //This will alert column name comma separated  
            }       
        });
    }
}
</script>

ajax.php

<?php
//make database connection
$column_count = mysql_query("SHOW COLUMNS FROM '".$_POST['tablename']."'"); 
    $columns = array();
    while($columnRow = mysql_fetch_array($column_count))
    {
        $columns[] = $columnRow['Field'];
    }   
    echo implode(',',$columns); //This will return column name comma separated 
?>

<label class="">Table</label>
  <select class="full-width" data-placeholder="Select Table" data-init-plugin="select2" onchange="showColumn(this.value);">
  <optgroup label="Table">

<?php
$table_count = mysql_query("SELECT TABLE_NAME FROM information_schema.tables WHERE table_schema = 'cl49-vclients'"); 

    $tables = array();
    while($row = mysql_fetch_array($table_count))
    {
?>
  <option value="<?php echo $row["TABLE_NAME"]; ?>"><?php echo $row["TABLE_NAME"]; ?></option>
<?php
   }
?>
  </optgroup>
</select>

第一个选择似乎显示表名很好,但是当我选择另一个选择字段应该出现但它没有,任何人都可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

在第二个查询中,您没有选择任何数据库。你需要

mysqli_select_db($con,"information_schema");

SHOW COLUMNS FROM '".$_POST['tablename']."'

或者,替换您的第二个查询

SELECT COLUMN_NAME FROM information_schema.columns 
WHERE table_schema = 'cl49-vclients' AND TABLE_NAME = '".$_POST['tablename']."';

答案 1 :(得分:0)

您的ajax.php应该只返回CSV中的列名或HTML下拉选项,无法理解为什么它还包含表名下拉列表的HTML。 showColumn()应将返回的数据放在当前页面的HTML中。

您的 page.php JS功能应为:

function showColumn(tablename)
{
    if(tablename !='')
    {
        $.ajax({ 
            type:"POST",
            url :"ajax.php"; 
            data:{tablename:tablename},
            success:function(data){
                $('#selColumns').html(data); // Assign the HTML returned by ajax.php to the second dropdown
            }       
        });
    }
}

并且对于列的第二个下拉列表也应该有以下HTML:

<select id="selColumns" data-placeholder="Select Column">
</select>

<强> ajax.php

<?php
    //make database connection
    $column_count = mysql_query("SHOW COLUMNS FROM '".$_POST['tablename']."'"); 
    while($columnRow = mysql_fetch_array($column_count))
        echo "<option value='" . $columnRow['Field'] . "'>" . $columnRow['Field'] . "</option>";
?>