두 개의 드롭 다운 목록이 있습니다. 첫번째는 좌석, BMW, 아우디 등의 자동차 브랜드를 포함합니다. 두 번째는 사용자가 목록 1에서 선택한 특정 브랜드의 모델을 포함하고자합니다. 현재 코드 상태에서 목록 1에서 브랜드를 선택하면 두 번째 리스트는리스트 1에서 같은 엘리먼트로 채워집니다. 그래서 똑같은 레코드를 가진 중복리스트가 있습니다.Ajax를 사용하여 다른 목록에서 값을 선택한 후 드롭 다운 목록 채우기
주요 파일 :
<?php
defined('_JEXEC') or die('Restricted access');
$css='css.css';
$doc = JFactory::getDocument();
$doc->addStyleSheet('modules/mod_alpha_table/assets/'.$css);
$db= JFactory::getDbo();
$ready = $db->getQuery(true);
$query="SELECT category_name,virtuemart_category_id from uhhu_virtuemart_categories_el_gr INNER JOIN uhhu_virtuemart_category_categories ON uhhu_virtuemart_categories_el_gr.virtuemart_category_id = uhhu_virtuemart_category_categories.category_child_id WHERE uhhu_virtuemart_category_categories.category_parent_id = 105";
$db->setQuery($query);
$options=$db->loadObjectList();
$model="";
?>
<script>
function showUser(str) {
var xmlhttp;
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else {
// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
document.getElementById("txtHint").innerHTML = xmlhttp.responseText;
}
}
xmlhttp.open("GET","query.php?q="+str,true);
xmlhttp.send();
}
</script>
<div class="srchcr">
<div class="srch">
<form name="searchcar">
<form>
<select onchange="showUser(this.value)" name="cats">
<option value="none">Select Make</option>
<?php foreach ($options as $row) {
echo '<option value=' . $row->virtuemart_category_id . '>'. $row->category_name . '</option>';
}
?>
</select>
<select name="subcats" id="txtHint">
<option value="none">Select Model</option>
</select>
</form>
</div>
</div>
query.php 파일 : phpMyAdmin을하고 작업을 미세에서 테스트
<?php
$doc = JFactory::getDocument();
$db= JFactory::getDbo();
$ready = $db->getQuery(true);
$q = htmlspecialchars($_REQUEST['q']);
$query='SELECT category_name,virtuemart_category_id from #__virtuemart_categories_el_gr INNER JOIN #__virtuemart_category_categories ON #__virtuemart_categories_el_gr.virtuemart_category_id = #__virtuemart_category_categories.category_child_id WHERE #__virtuemart_category_categories.category_parent_id = $q';
$db->setQuery($query);
$options=$db->loadObjectList();
foreach ($options as $row) {
echo '<option name='. $q .' value=' . $row->virtuemart_category_id . '>'. $row->category_name . '</option>';
}
?>
쿼리. 어떻게 든 첫 번째 쿼리가 $ query.php 파일 내의 쿼리 대신 두 번 실행되는 것 같습니다. 나는 또한 메인 파일 내부의 코드를 포함하고 있지만 동일한 스토리를 가지고있다. 두 번째 $ 쿼리를 $ query2로 이름을 바꾸고 $ query2를 실행했지만 아무 것도 변경하지 않았다. 누군가가 잘못되어 가고있는 것에 대해 나를 화나게 할 수 있을까?
편집 : 휴식과 좀 더 디버깅 내가 문제의 시작은 곳이라고 생각 후 :
xmlhttp.open("GET","query.php?q="+str,true);
그것은 어떤 이유에 대한 요청 것 같아, 대신 query.php의는 인덱스에 전송됩니다. PHP는 동일한 쿼리를 다시 트리거합니다. 나는 die(); query.php의 시작과 아무것도 일어나지 않았다. 나는 joomla 문법이나 다른 것을 사용할 필요가 있을까?
동일한 코드가 아닙니다. WHERE id = 105의 첫 번째 쿼리에서 (자동차 브랜드는 상위 카테고리 105의 자동차라는 상위 카테고리에도 포함됨) 처음으로 브랜드를 선택합니다. 두 번째 쿼리 WHERE id = $ qi에서 Brand.for의 하위 카테고리를 선택하십시오. 예 : Audi의 id는 166입니다. 위의 쿼리를 phpmyadmin의 id = 166에 사용하면 원하는 모든 결과를 얻을 수 있습니다.) – IseNgaRt
올바른 정보 내가 오해했다면. 내가 List1을 만들면서 각 브랜드의 하위 범주를 실제로 구문 분석하고 배열에 숨겨 두는 것이 좋습니다. 브랜드가 목록 1에서 선택되면 해당 배열이 목록 2에 표시됩니다. 맞습니까? – IseNgaRt