2012-07-20 51 views
2

我做了一個下拉框,由查詢從公司名稱數據庫中查找公司名稱的下拉框,這些名稱也有和我不想顯示的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> 

任何想法?

+0

爲什麼你不想顯示ID? – Kris 2012-07-20 01:40:24

+0

我設計的客戶端不想在收件箱中看到ID和ID號,現在需要20 0的長度,我需要隔離Id以便爲以後的querys進行鏈接:S – Matt 2012-07-20 01:46:37

+0

您可以嗎?有2個ID?有沒有顯示的主鍵,但有一個時間戳字段或另一個獨特的列,並將其用作「ID」? – Kris 2012-07-20 02:05:23

回答

0

這可以通過兩種直接方式來完成。其一是使用索引$num保持它的樣子;另一種方法是使用實​​際的公司ID字段ID。如果你堅持索引$num,當用戶提交表單(即 - 選擇一家公司)時,你將不得不重新查詢數據庫並重新循環查找結果以找到特定的公司(或者你可以使用LIMIT/OFFSET;答案結束時的註釋)。

我會建議使用實際的公司ID在你的形式:

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

,這將產生一個選項列表,就像你現在有,除了各自的價值將是具體的公司標識。當用戶提交表單,讓我們假設形式使用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 
} 
+0

非常感謝您,我使用了您推薦的部分,現在它工作得很完美,對不起,如果我錯過了導致ID顯示的問題,我的意思是它在屏幕上的下拉框中顯示爲物理可見狀態,而您的方法沒有那。 – Matt 2012-07-20 02:26:06

+0

現在我想起來了,我毫無疑問必須使它按字母順序出現在框中,是否可以同時做到這一點? – Matt 2012-07-20 02:44:37

+0

@Matt要按公司名稱的字母順序添加'ORDER BY Company_Name'到您的查詢結尾,例如:'SELECT Company_Name,ID FROM company_table ORDER BY Company_Name;'。 – newfurniturey 2012-07-20 12:53:37

0

的選擇是一種「創造」字段添加到公司表是一個時間戳,或者只是一個隨機UUID列的第二列。然後將下拉列表的值設置爲該列,以便您不顯示ID,但由於您使用的是「其他」ID,您仍然會知道該記錄。 我實際上在我的一個程序中使用了這種方法,它與您的情況相同,客戶端不希望顯示ID。

如果你不想使用這種方法(因爲你不想第二列),你可以只是md5散列ID或其他散列方法。

然後,你會怎麼做

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

這樣做的缺點方法是,它是一個昂貴的查詢,因爲你不會使用索引,它需要計算所有的每個ID的MD5哈希值。