从查询填充下拉框中检索数据

时间:2012-07-20 01:36:45

标签: php mysql drop-down-menu

我创建了一个下拉框,该查询框由查询公司名称数据库中的公司名称填充,这些名称也包含我不想显示但在查询中查找的ID号。我需要ID号链接到公司的网站,所以当我点击网站页面上的提交按钮时,它通过查看位置值找到ID号,并将其与查询数组上的位置相关联,我就是这样知道要做什么。如果它有助于我填充保管箱的方式:

mysql_select_db("DB", $con);
$query = "SELECT Company_Name, ID FROM company_table";
$result = mysql_query($query) or die(mysql_error());
$options ='';
$num = 0;
while ($row=mysql_fetch_array($result)) {
$num = $num+1; 
$options.= "<OPTION VALUE=\"$num\">".$row["Company_Name"]; 
}
<SELECT NAME=thing> 
<OPTION VALUE=0>Choose 
<?=$options?> 
</SELECT>

任何想法?

2 个答案:

答案 0 :(得分:0)

有两种直接的方法可以做到这一点。一种方法是使用索引$num保持它的方式;另一种方法是使用实​​际的公司ID字段ID。如果您坚持使用$num索引,当用户提交表单(即 - 选择公司)时,您将不得不重新查询数据库并重新循环搜索结果以查找特定公司(或您可以使用LIMIT / OFFSET;答案结尾处的注释。)

我建议您在表单中使用实际的公司ID:

while (($row = mysql_fetch_assoc($result))) {
    $options.= '<option value="' . $row['ID'] . '">' . $row["Company_Name"] . '</option>'; 
}

这将生成一个选项列表,就像您目前拥有的一样,除了每个选项的值都是特定的公司ID。当用户提交表单时,假设表单正在使用POST,您可以使用以下代码获取ID:

$companyId = (isset($_POST['thing']) && is_numeric($_POST['thing'])) ? intval($_POST['thing']) : false;
$results = mysql_query('SELECT * FROM company_table WHERE ID=' . $companyId);

..然后按照您的意愿处理。

我在上面的示例中使用了$_POST['thing'],因为这就是您的代码示例名为select字段的内容。另外,我假设ID是一个整数。

如果实际的ID需要保持隐藏状态,那么$num的索引可以与MySQL的LIMIT / OFFSET一起使用,如下所示:

$selectedCompany = (isset($_POST['thing']) && is_numeric($_POST['thing'])) ? intval($_POST['thing']) : -1;
if ($selectedCompany >= 0) {
    $query = "SELECT Company_Name, ID FROM company_table LIMIT " . $selectedCompany . ", 1";
    // process as desired
}

答案 1 :(得分:0)

一个选项是将“created”字段添加到公司表中,该字段是时间戳,或者只是第二列是随机UUID列。然后将下拉列表的值设置为此列,这样您就不会显示ID,但您仍然会知道该记录,因为您也使用了“其他”ID。 我实际上在我的一个程序中使用这种方法,它与你的情况相同,客户端不希望显示ID。

如果您不想使用此方法(因为您不需要第二列),您可以使用md5哈希ID或其他一些哈希方法。

然后你会做

SELECT * FROM company where md5(id) = "$value". 

这种方法的缺点是它是一个昂贵的查询,因为你不会使用索引,它必须计算每个id的所有md5哈希值。