多个下拉菜单,带有一个PHP脚本

时间:2014-09-10 13:21:10

标签: php sql-server forms

网站有几页表格。其中许多都有下拉菜单。我想写一个PHP脚本,它将填充多个drop菜单。我已经包含了我到目前为止的代码,但我不认为我在这里是正确的。

order.php

<?php 
    include 'functionsFile.php'; 
?>

<form method="post" action="order.php">
    <select name="order_status" id="order_status">
        <?php foreach ($data as $row): ?>
        <option><?=$row["order_status"]?></option>
        <?php endforeach ?>
    </select>
    <!-- 3 More Drop Menus -->
</form>
<?php
    $table = array('order_status', 'customer', 'warehouse_id', 'order_description');
    fillForm($conn, $table);
?>

functionsFile.php

<?php
    require 'databaseConnection.php';

 function fillForm($conn, $table)
 {
    foreach ($table as $menu)
    {
        $query = 'SELECT * FROM $table';
        $smt = $conn->prepare($query);
        $smt->execute();
        $data = $smt->fetchAll();
    }
}

其他信息

  1. 我想知道是否必须在fillForm()函数中添加一个参数,以便它也知道字段名称。或者,我正在查询只有一个相关数据字段的表,所以将(一个重要的)数据字段命名为与表相同是不好的做法吗?

  2. 我已经不确定如何控制此代码中输出的内容。如果我要在参数中添加第二个数组,我将完全迷失。

2 个答案:

答案 0 :(得分:2)

我可以在您的代码中看到两个错误

试试这个:

function fillForm($conn, $table)
 {
    foreach ($table as $menu)
    {
        $query = 'SELECT * FROM' .$menu;
        $smt = $conn->prepare($query);
        $smt->execute();
        $data = $smt->fetchAll();
    }
}

答案 1 :(得分:1)

我在您的代码中看到了一些错误,所以希望这些修补程序可以帮助您解决问题。首先,在尝试使用它生成的数据后调用functionsFile.php文件。这需要在您尝试使用$data变量之前进行。其次,您的fillForm()函数不返回值。相反,您正在创建一个无法从函数外部访问的范围变量。尝试重写您的文件functionsFile.php,如下所示:

<?php
    require_once ('databaseConnection.php');

    // No need to pass in connection information if this file is the one loading it and it's not scoped.
    function fillForm($table)
    {
        $query = "SELECT * FROM $table";
        $smt = $conn->prepare($query);
        $smt->execute();
        $rows = $smt->fetchAll();

        return $rows;
    }

现在,在order.php文件中,您可以加载此文件,然后在执行后使用此函数的返回数据,如下所示:

<?php
    require_once ('functionsFile.php');
?>

<form method="post" action=""><!-- You can leave the action blank if it is posting to the same file. -->
    <select name="order_status" id="order_status">
    <?php
        $rows = fillForm('order_status');

        foreach ($rows as $row)
        {
            echo '<option value="' . $row['order_status'] . '">' . $row['order_status'] . '</option>';
        }
    ?>
    </select>
    <select name="customer" id="customer">
    <?php
        $rows = fillForm('customer');

        foreach ($rows as $row)
        {
            echo '<option value="' . $row['customer'] . '">' . $row['customer'] . '</option>';
        }
    ?>
    </select>
    <!-- Next groups, etc. -->
</form>

这样,您只需传入表名,就可以根据需要重复使用fillForm()函数,还可以更好地控制每个表的数据显示方式。

对于您的其他问题,

  1. 如果要选择所有内容,则不一定需要传入字段名称。如果您不介意抓取所有列,这将允许您在fillForm()函数之外访问所需的内容。至于命名约定,我不会将该列命名为与该表相同的名称。相反,我会给表格一个宽泛的复数名称,我会专门将该列命名为该列存储的内容。例如。表 - &gt;客户|第1列 - &gt; Id |第2列 - &gt;名称

  2. 我不确定如何回答这个问题。在您真正尝试使用它之前,请确保您理解您正在编写的所有内容。你的意思是函数的输出,还是php的html输出?