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


Retrieve data from query filled drop down box

我制作了一个下拉框,由一个从公司名称数据库中查找公司名称的查询填充,这些名称还有一个我不想显示但在查询中查找的ID号。我需要ID号来链接到公司的网站,所以当我点击网站页面上的提交按钮时,它会通过查看位置值并将其与查询数组上的位置联系起来来找到ID号,我只是不知道该怎么办。如果它有帮助,这就是我填充dropbox的方式:

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>

有什么想法吗?

有两种直接的方法可以做到这一点。一种是使用索引$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
}

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

如果你不想使用这个方法(因为你不想要第二列),你可以用md5散列ID或其他一些散列方法。

然后你会做

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

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