Я пытаюсь создать динамические выпадающие списки для производителей автомобилей и моделей автомобилей. Я хотел бы, чтобы пользователь мог выбрать марку автомобиля в первом раскрывающемся списке, а затем во втором раскрывающемся списке указать соответствующие модели для выбранной марки автомобиля. У меня есть CSV, содержащий все марки и модели автомобилей - в файле более 900 моделей. Я успешно справился с этой задачей, используя только Javascript, но существует слишком много моделей транспортных средств, чтобы кодировать его таким образом.
Я попытался с помощью PHP прочитать файл CSV и построить массив, а затем отобразить код Javascript в цикле foreach PHP. Если я запускаю только цикл foreach в PHP, я могу успешно отобразить эту часть кода Javascript на странице HTML. Однако, как только я помещаю код PHP в функцию и вызываю функцию на странице, я получаю сообщение об ошибке. Устранение неполадок заставляет меня поверить, что мне нужно использовать что-то вроде Ajax, но я незнаком с Ajax и надеялся, что я близок к решению, как есть, просто нужно некоторое понимание того, как продолжить. Кроме того, я не писал здесь код Javascript, я нашел его с помощью поиска Google. Хотя я понимаю основы, я не очень хорошо разбираюсь в Javascript. Любая помощь будет принята с благодарностью. Спасибо.
Javascript: это работает как есть, но я не хочу вводить 900 пунктов, таких как:
<script language="javascript" type="text/javascript">
function dynamicdropdown(listindex)
{
switch (listindex)
{
case "Acura" :
document.getElementById("status").options[0]=new Option("Select","");
document.getElementById("status").options[1]=new Option("CL","CL");
document.getElementById("status").options[2]=new Option("Integra","Integra");
document.getElementById("status").options[3]=new Option("Legend","Legend");
break;
case "Audi" :
document.getElementById("status").options[0]=new Option("Select","");
document.getElementById("status").options[1]=new Option("80","80");
document.getElementById("status").options[2]=new Option("90","90");
document.getElementById("status").options[3]=new Option("100","100");
break;
}
return true;
}
</script>
<div class="category_div" id="category_div">Make:
<select id="source" name="source" onchange="javascript:dynamicdropdown(this.options[this.selectedIndex].value);">
<option value="">Select Make</option>
<option value="Acura">Acura</option>
</select>
</div>
<div class="sub_category_div" id="sub_category_div">Model:
<script type="text/javascript" language="JavaScript">
document.write('<select name="status" id="status"><option value="">Select status</option></select>')
</script>
PHP: если я удаляю функцию и просто отображаю результаты на странице, она правильно создает Javascript:
<?php
$filename = 'list.csv';
// The nested array to hold all the arrays
$vehicle_array = [];
// Open the file for reading
if (($h = fopen("{$filename}", "r")) !== FALSE){
// Each line in the file is converted into an individual array called $data
// The items of the array are comma separated
while (($data = fgetcsv($h, 1000, ",")) !== FALSE){
// Each individual array is being pushed into the nested array
$vehicle_array[] = $data;
}
// Close the file
fclose($h);
}
// Display the code in a format I can read
foreach ($vehicle_array as $row) {
if ($row[2] == -1) {
unset($vehicle_array[$row[2]]);
echo 'break;';
} elseif ($row[2] == 0) {
echo 'case "';
echo $row[0];
echo '" :';
echo 'document.getElementById("status").options[';
echo $row[2];
echo ']=new Option("';
echo $row[1];
echo '","';
echo "";
echo '");';
} else {
echo 'document.getElementById("status").options[';
echo $row[2];
echo ']=new Option("';
echo $row[1];
echo '","';
echo $row[1];
echo '");';
}
}
?>
Вот где он ломается: я помещаю цикл foreach внутри функции и позже вызываю функцию на странице, чтобы построить эту часть Javascript.
<script language="javascript" type="text/javascript">
function dynamicdropdown(listindex)
{
switch (listindex)
{
<?php buildForm(); ?>
}
return true;
}
</script>
Я получаю эти ошибки:
- неопределенная переменная: vehicle_array
- В foreach указан неверный аргумент ()
Вот сообщение об ошибке прямо из Google Chrome:
функция dynamicdropdown (listindex) {switch (listindex) {
Примечание : неопределенная переменная: vehicle_array в C: \ xampp \ htdocs \ test \ drop.php в строке 25
Предупреждение : В foreach () указан неверный аргумент в C: \ xampp \ htdocs \ test \ drop.php в строке 25
Пожалуйста, смотрите изображение для полных сообщений об ошибках. Опять же, любая помощь здесь будет принята с благодарностью. Еще раз спасибо!
Сообщения об ошибках в Google Chrome
Пример файла CSV