我已经做了一个下拉框,它由一个查询填充,该查询从公司名称数据库中查找公司名称,这些名称还具有我不希望显示但在查询中查找的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>有什么想法吗?
发布于 2012-07-20 09:46:40
有两种直接的方法可以做到这一点。一种方法是使用索引$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-20 09:47:27
一种选择是在company表中添加一个"created“字段,它是一个时间戳,或者只是第二个列,它是一个随机的UUID列。然后将下拉列表的值设置为此列,这样您就不会显示ID,但您仍然可以知道该记录,因为您也使用了“其他”id。我实际上在我的一个程序中使用了这个方法,其中一个程序的情况与您相同,客户不希望显示ID。
如果你不想使用这个方法(因为你不想要第二列),你可以用md5散列ID或者其他散列方法。
那么你就会这么做
SELECT * FROM company where md5(id) = "$value". 这种方法的缺点是它是一个开销很大的查询,因为您不会使用索引,而且它必须计算每个id的所有md5散列。
https://stackoverflow.com/questions/11571695
复制相似问题