2011-12-30 2 views
1

저는 현재 딜레마에 직면 해 있습니다. 데이터베이스의 데이터 배열을 표시하는 메뉴를 작성하려고합니다. 그런 다음 사용자는 해당 목록에서 항목을 선택하고 이에 따라이 항목과 관련된 데이터를 검색하기 위해 데이터베이스 호출을해야합니다. 여기에 현재 코드가 있습니다.PHP와 SQL을 사용하여 하위 목록으로 만들기

function foobar() { 
    $first_option_sql = "SELECT * from {location} l ORDER BY name ASC"; 
    $list_first_option = db_query($first_option_sql); 

    $output .= "<p><b>Please select the primary location that you would like to check.</b><p>" 
    $output .= "<br><b>Location: </b> <select id='list'><option>Available locations</option>"; 

    while($first_option_available = db_fetch_object($list_first_option)){ 
    $output .="<option locationid='$first_option_available->lid'>".$first_option_available->name."</option>"; 
    } 

    $output .="</select><input type=submit value='Search'>"; 
    $output .="<p><b>Children: </b><select id='child'><option selected='yes'>Available children</option><p>"; 

    $children_available_sql = "SELECT complexquery WHERE lid='%d' ORDER BY l.name ASC"; 
    $list_children = db_query($children_available_sql); 

    while($children_available = db_fetcj_object($list_children)){ 
    $output .="<option>".$children_available->name."</option>"; 
    } 

    return $output; 

}

여기에서 문제가이 코드를 사용하여 선택한 "첫 번째 옵션"결코 실제로 일어나고없는 두 번째 쿼리의 값을 검색 할 수 없습니다 오전; 두 번째 목록을 채우지 않습니다.

AJAX 또는 Javascript를 사용하려고 생각했지만 너무 익숙하지 않습니다. 따라서 나는 이것을 어떻게 수행 할 수 있는지에 대한 통찰력을 원했다.

+0

PHP 만 사용하는 경우 PHP가 서버 측에서 처리되므로 양식을 제출하고 페이지를 다시 표시하지 않으면 실제로이 작업을 수행 할 수 없습니다. Ajax를 사용하면 훨씬 더 효과적으로 Ajax를 사용하여 선택한 첫 번째 옵션을 두 번째 목록의 값을 포함하는 db 요청에서 JSON 데이터를 반환하는 PHP 페이지로 전달할 수있다. – julio

+0

저는 AJAX에 너무 익숙하지 않아서 이것이 어떻게 할 수 있는지 궁금합니다. 기본적으로 PHP를 사용하여 웹 페이지를 생성하므로이 함수를 다른 것으로 연결하는 것이 더 나을 것이라고 생각합니다. – Hectron

+0

그러면 양식을 첫 번째 옵션 목록의 onChange에 제출하고 첫 번째 선택 목록의 값을 POST 또는 GET 매개 변수로 전달합니다. 그런 다음 페이지의 머리 부분에서 해당 매개 변수가 '설정'되어 있는지 확인하십시오. 그럴 경우 양식이 제출되었음을 알게되고이 값을 사용하여 두 번째 선택 목록 조회가 시작됩니다. – julio

답변

1

먼저, 귀하의 HTML이 유효하지 않거나 단순히 세부 정보가 누락되었습니다.

당신은 당신의 선택 상자의 이름 요소가 필요합니다

<option value='$first_option_available->lid'> 
:
<option locationid='$first_option_available->lid'> 

당신은 대신 value 속성이 필요합니다 양식을 제출할 때

<select name="lid" id='list'> 

locationid가 작동하지 않습니다

올바른 HTML을 사용하면 $ _POST [ 'lid']가 원하는 위치 ID가됩니다.

$menu = foobar($_POST['lid']); 

function foobar($lid) { 
    //... 
} 
+0

전체 POST [ 'lid'] ... POST 명령은 HTML 태그 내에 값만 전달하고 사용자 정의 값 (즉, locationid)은 전달하지 않기 때문에 간단합니다. – Hectron

+0

수정. 올바른 HTML 속성이 있으면 값이 POST로 끝납니다. – popthestack

+0

자바 스크립트를 사용하는 경우 값을 가져올 속성을 사용할 수 있지만 기본 HTML 이름과 값 속성 이외의 다른 요소는 javascript와 함께 사용할 필요가 없습니다. – popthestack

관련 문제