网站有几页表格。其中许多都有下拉菜单。我想写一个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();
}
}
其他信息
我想知道是否必须在fillForm()函数中添加一个参数,以便它也知道字段名称。或者,我正在查询只有一个相关数据字段的表,所以将(一个重要的)数据字段命名为与表相同是不好的做法吗?
我已经不确定如何控制此代码中输出的内容。如果我要在参数中添加第二个数组,我将完全迷失。
答案 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()
函数,还可以更好地控制每个表的数据显示方式。
对于您的其他问题,
如果要选择所有内容,则不一定需要传入字段名称。如果您不介意抓取所有列,这将允许您在fillForm()
函数之外访问所需的内容。至于命名约定,我不会将该列命名为与该表相同的名称。相反,我会给表格一个宽泛的复数名称,我会专门将该列命名为该列存储的内容。例如。表 - &gt;客户|第1列 - &gt; Id |第2列 - &gt;名称
我不确定如何回答这个问题。在您真正尝试使用它之前,请确保您理解您正在编写的所有内容。你的意思是函数的输出,还是php的html输出?