2012-07-20 2 views
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> 

아이디어가 있습니까?

+0

왜이 ID를 표시하지 않으시겠습니까? – Kris

+0

나는 그것을 설계하고있는 클라이언트가 드롭 박스의 ID와 ID 번호를보고 싶지 않고 20 초가 오래 걸리므로 나중에 querys를 연결하기 위해 ID를 분리해야합니다. S – Matt

+0

2 ID가 있으십니까?표시하지 않는 기본 키를 갖고 있지만 타임 스탬프 필드 또는 다른 고유 한 열을 대신 사용하여 "id"로 사용 하시겠습니까? – Kris

답변

0

두 가지 즉각적인 방법이 있습니다. 하나는 색인을 사용하는 방식 그대로 유지하는 것입니다. $num; 다른 방법은 실제 회사 ID 필드 ID을 사용하는 것입니다. 사용자가 $num의 색인을 사용하는 경우 사용자가 양식을 제출 (즉, 회사 선택)하면 특정 회사를 찾기 위해 데이터베이스를 다시 쿼리하고 결과를 다시 루프해야합니다 (또는 LIMIT/OFFSET, 답 끝에는 메모).

나는 당신의 형태로 실제 회사 ID를 사용하는 것이 좋습니다 것입니다 : 현재 특정 회사의 ID가됩니다 각각의 값을 제외하고,이 같은

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

이, 옵션의 목록을 생성합니다. 당신이 원하는대로 처리 후 ..

$companyId = (isset($_POST['thing']) && is_numeric($_POST['thing'])) ? intval($_POST['thing']) : false; 
$results = mysql_query('SELECT * FROM company_table WHERE ID=' . $companyId); 

과 : 사용자가 양식을 제출하면, 당신이 ID를 얻을 수의 양식이 POST를 사용하는 가정하자.

코드 예제에 select 필드의 이름이 그대로 있으므로 위의 예에서 $_POST['thing']을 사용합니다. 또한, 나는 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

+0

이제 나는 그것에 대해 생각합니다. 의심의 여지없이 상자를 알파벳 순서로 표시해야합니다. 둘 다 할 수 있습니까? – Matt

+0

@Matt 회사 이름을 사전 순으로 사용하려면'ORDER BY Company_Name'을 쿼리 끝에 추가하십시오 :'SELECT Company_Name, ID FROM company_table ORDER BY Company_Name;'. – newfurniturey

0

의 옵션은에 "생성"필드를 추가하는 것입니다 회사 표가 타임 스탬프이거나 임의의 UUID 열인 두 번째 열만 있습니다. 그런 다음 드롭 다운 값을이 열로 설정하면 ID가 표시되지 않지만 "다른"ID를 사용하고 있기 때문에 여전히 레코드를 알 수 있습니다. 실제로이 방법은 내 프로그램 중 하나에서 사용하는 것과 동일한 상황이지만 클라이언트는 ID를 표시하지 않으려했습니다.

두 번째 열을 원하지 않으므로이 방법을 사용하지 않으려는 경우 ID 또는 다른 해싱 방법을 md5 해시 할 수 있습니다.

그럼 당신은이 방법의 단점은 당신이 인덱스를 사용하지 않을하고 각 ID에 대한 모든 MD5 해시를 계산해야하기 때문에이 비싼 쿼리 때문이다

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

할 것입니다.

관련 문제