0

我正在尝试使用 PHP 来使用来自单独表的某些列的数据填充下拉菜单。但是,我有很多菜单要填充,所以我不想为每个菜单创建一个特定的函数,而是想将列名(这是字段,对吗?)传递给函数。

目前我有一个菜单

function print_dropdown($query, $link){
   $queried = mysql_query($query, $link);
   $menu = '<select name="wholesaler" id="wholesaler">';
   while ($result = mysql_fetch_array($queried)) {
       $menu .= '<option value="' . $result['id'] . '">' . $result['wholesaler'] . '</option>';
   }
   $menu .= '</select>';
   return $menu;
}
...
<?php echo print_dropdown("SELECT id, wholesaler FROM wholesaler_flag LIMIT 0, 10", $connect_normas_boudoir);
?>

但是,我想这样做:

function get_field($table){
    $col_2 = mysql_query('SHOW COLUMNS FROM "$table" WHERE FIELD = 2');
    return $col_2;
}

function print_dropdown($query, $link){
    $queried = mysql_query($query, $link);
    $menu = '<select name="'$col_2'" id="'$col_2'">';
    while ($result = mysql_fetch_array($queried)) {
        $menu .= '<option value="' . $result['id'] . '">' . $result['$col_2'] . '</option>';
    }
    $menu .= '</select>';
    return $menu;
}

...

<?php
    get_field(wholesaler_flag);
    echo print_dropdown("SELECT id, wholesaler FROM wholesaler_flag LIMIT 0, 10", $connect_normas_boudoir);
?>

尝试选择每个表格的第二个字段是不是很糟糕?就我而言,每个相关表中只有两列。但是,我知道将来可以在 id 之后插入一个新列。有一个更好的方法吗?如果我搞砸了我的单引号和双引号,请原谅。还在学习。

注意:我已经SHOW COLUMNS FROM wholesaler_flag WHERE FIELD = 2;在 MySQL 控制台中尝试过。当然它没有用,但我认为可能有一种方法可以访问它。这是我的问题所关注的特定领域。

4

2 回答 2

0
function print_dropdown($query, $link,$field0,$field1){
    $queried = mysql_query($query, $link);
    $menu = '<select name="'.$field1.'" id="'.$field1.'">';
    while ($result = mysql_fetch_array($queried)) {
        $menu .= '<option value="' . $result[0] . '">' . $result[1] . '</option>';
    }
    $menu .= '</select>';
    return $menu;
}

<?php
     echo print_dropdown("SELECT id, wholesaler FROM wholesaler_flag LIMIT 0, 10", $connect_normas_boudoir,"id","wholesaler");
?>

既然你将sql语句传递给函数,为什么不传递你想要的选项id和选项值名称。使用上述内容,您应该始终在 sql 语句中提供 id 作为第一列,将 name 作为第二列,因为选项值固定为第一列,值固定为第二列,即$result[0]$result[1]分别。你可以试试上面的方法。谢谢。

于 2013-04-25T03:44:29.073 回答
0

你到底想做什么?要从字段中选择第 n 行,如果您正在执行SELECT查询,将是:

SELECT * FROM table LIMIT n-1,1

但是,您在查询SHOW COLUMNS上执行此操作,该查询不依赖于行号。您可以选择第 5 行或第 50 行(在该查询中无论如何都不可能),它仍然会返回相同的结果(有关表列的信息)。

您可以轻松地将字段/表名称传递给函数并构建这样的查询。但是,在您给定的示例中,由于 PHP/SQL 语法不正确,尚不清楚您要使用函数完成什么。

根据评论反馈进行编辑: 您可以编写一个函数来获取表和目标列号,然后将列名传回给您。以下函数获取您的 SQL 表(即“wholesaler_flag”)和您想要的列数(即示例中所述的 2)。

function getColumnName($sqlTable, $targetColumn = 2) {
    $currentColumn = 1; // indicate our starting position for the column traversal

    $theQuery = mysql_query("SHOW COLUMNS FROM " . $sqlTable); // get columns from table

    // traverse columns until we reach the desired column number; return column name
    while ($theColumn = mysql_fetch_array($theQuery)) {
        if ($currentColumn == $targetColumn) {
            return $theColumn["Field"];
        }

        $currentColumn++;
    }

    return false; // returns Boolean false if column number is not found
}

这可以通过以下方式调用:

$columnName = getColumnName("wholesaler_flag", 2);
// $columnName = getColumnName("wholesaler_flag"); also works since 2 is set as the function's default column

您也可以使用它来获取第 3、4 列等或任何您想要的。稍加修改,您还可以使其返回一系列列。

于 2013-04-25T03:34:21.627 回答