2

我制作了一个下拉框,其中填充了从公司名称数据库中查找公司名称的查询,这些名称也有我不想显示但在查询中查找的 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>

有任何想法吗?

4

2 回答 2

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
}
于 2012-07-20T01:46:40.450 回答
0

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

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

然后你会做

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

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

于 2012-07-20T01:47:26.607 回答