首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从已填充的查询下拉框中检索数据

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

Stack Overflow用户
提问于 2012-07-20 09:36:45
回答 2查看 807关注 0票数 2

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

代码语言:javascript
复制
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>

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-20 09:46:40

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

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

代码语言:javascript
复制
while (($row = mysql_fetch_assoc($result))) {
    $options.= '<option value="' . $row['ID'] . '">' . $row["Company_Name"] . '</option>'; 
}

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

代码语言:javascript
复制
$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一起使用,方法如下:

代码语言:javascript
复制
$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
}
票数 0
EN

Stack Overflow用户

发布于 2012-07-20 09:47:27

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

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

那么你就会这么做

代码语言:javascript
复制
SELECT * FROM company where md5(id) = "$value". 

这种方法的缺点是它是一个开销很大的查询,因为您不会使用索引,而且它必须计算每个id的所有md5散列。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11571695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档