Мне нужна серьезная помощь или совет по тому, что я потратил бесчисленное количество часов на исследование и ничего не нашел.
У меня есть проект, в котором мне нужно извлечь данные из базы данных MDB с помощью PHP. Мне удалось подключиться к базе данных, я могу запрашивать базу данных и отображать результаты в таблице, и я даже могу выполнять поиск в базе данных с помощью ввода текста.
Моему клиенту нужна расширенная функция поиска с несколькими раскрывающимися списками. Эти раскрывающиеся списки получают значения из базы данных. Все это еще хорошо. Я могу заполнить выпадающие списки из базы данных.
База данных представляет собой базу данных транспортных средств (идентификатор, инвентарный номер, марка, модель, год, цена, характеристики и т. д.). К сожалению, все данные о транспортном средстве находятся в одной таблице. Так, например, в базе есть четыре автомобиля ASTON MARTIN, каждый со своим ID и моделью.
Я знаю, что было бы лучше иметь как минимум две отдельные таблицы: марка и модель. Но база данных создается сторонним приложением, которое сохраняет копию базы данных на сервере, к которому я подключаюсь.
Вопрос в том, можно ли с помощью PHP и AJAX иметь каскадные выпадающие списки при рисовании данных из одной и той же таблицы? Так, например, если я выберу ASTON MARTIN из списка Make, во втором раскрывающемся списке будут показаны только модели, относящиеся к ASTON MARTIN?
См. приведенную ниже попытку попробовать это... Этот сценарий успешно загружает столбец Make из базы данных в первый раскрывающийся список и столбец Modal из базы данных во второй раскрывающийся список, но они не связаны. В настоящее время первый вариант — ASTON MARTIN, а соответствующая ему модель — CORSA (это совсем не правильно).
<script type="text/javascript">
function loadXMLDoc() {
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.frm.modelSelection.innerHTML=xmlhttp.responseText;
}
}
var makevalue=document.frm.makeSelection.value;
xmlhttp.open("GET","?ajaxmake="+makevalue,true);
xmlhttp.send();
}
</script>
<?php
$dbName = "C:/xampp/htdocs/new/db/savvyautoweb.mdb";
// Throws an error if the database cannot be found
if (!file_exists($dbName)) {
die("Could not find database file.");
}
// Connects to the database
// Assumes there is no username or password
$conn = odbc_connect("Driver={Microsoft Access Driver (*.mdb)};Dbq=$dbName", '', '');
?>
<form action="" method="post" name="frm">
<select name="makeSelection" onchange="loadXMLDoc()">
<?php
$resultMake = odbc_exec($conn, "SELECT Make FROM Vehicle ORDER BY Make") or die (odbc_errormsg());
while ($rowMake = odbc_fetch_array($resultMake)) {
echo "<option value='$rowMake[Make]'>$rowMake[Make]</option>";
}
?>
</select>
<select name="modelSelection">
<?php
if (isset($_REQUEST['ajaxmake'])) {
$resultModel = odbc_exec($conn, "SELECT Model FROM Vehicle") or die (odbc_errormsg());
while ($rowModel = odbc_fetch_array($resultModel)) {
echo "<option value='$rowModel[Model]'>$rowModel[Model]</option>";
}
die();
}
?>
</select>
<input type="submit" name="submit" value="Go">
</form>
РЕДАКТИРОВАТЬ приведенный выше код на основе вашего решения. Спасибо тебе за это.
Кажется, что функция работает, но она заполняет второй раскрывающийся список столбцом make, а не столбцом модели. Есть идеи, почему?
Спасибо, Деон Джонкер.