Каскадный выпадающий CSV

У меня есть форма, в которой пользователь выбирает курс из раскрывающегося списка, местоположение из раскрывающегося списка и вручную вводит дату в текстовое поле.

Мне нужно, чтобы пользователь выбрал курс и местоположение, и пользователь мог выбрать из списка доступных дат.

Я хотел бы использовать файл CSV. У меня действительно нет другого выбора, потому что я не могу иметь нашу локальную базу данных в Интернете. Это то, что будет генерироваться два раза в неделю из нашей базы данных.

Файл CSV просто содержит курс, местоположение и даты. Например:

Course            Location        Date
Dreamweaver Intro Minneapolis, MN 1/5/2015
Dreamweaver Intro Minneapolis, MN 3/5/2015
Dreamweaver Intro Minneapolis, MN 5/5/2015
Illustrator Intro Orlando, FL     3/5/2015
Illustrator Intro Orlando, FL     1/5/2015
Illustrator Intro Orlando, FL     5/5/2015

Я знаком с PHP и не знаю, с чего начать. Я нашел мало информации о работе с каскадными выпадающими меню с файлами CSV. Любая помощь будет оценена.

0

Решение

Я считаю, что файл CSV выглядит следующим образом

Dreamweaver Intro Minneapolis, MN, 5/5/2015
Illustrator Intro Orlando, FL, 3/5/2015

Сказав, что вы можете прочитать каждую строку, разнесите каждую строку на «,».
Это приведет к массиву, как,

array("Dreamweaver Intro Minneapolis", "MN", "3/5/2015");

Создайте три массива — для курса, местоположения и даты. Продолжайте добавлять элементы в отдельный список.

Создайте раскрывающийся список, используя список. Пример кода будет выглядеть так:

<?php

generateDropdownFromCsv(
"Course,            Location,        Date
Dreamweaver Intro Minneapolis, MN, 1/5/2015
Dreamweaver Intro Minneapolis, MN, 3/5/2015
Dreamweaver Intro Minneapolis, MN, 5/5/2015
Illustrator Intro Orlando, FL,     3/5/2015
Illustrator Intro Orlando, FL,     1/5/2015
Illustrator Intro Orlando, FL,    5/5/2015");

function generateDropdownFromCsv($fileContent){
$courses = array();
$locations = array();
$dates = array();

foreach( explode( "\n", $fileContent ) as $eachLine ){
$column = explode( ",", $eachLine );
array_push( $courses, $column[0] );
array_push( $locations, $column[1] );
array_push( $dates, $column[2] );
}

echo "<select>\n";

foreach( $courses as $course ){
echo "<option>" . trim($course) . "</option>\n";
}

echo "</select>\n";
echo "<select>\n";

foreach( $locations as $location ){
echo "<option>" . trim($location) . "</option>\n";
}

echo "</select>\n";
echo "<select>\n";

foreach( $dates as $date ){
echo "<option>" . trim($date) . "</option>\n";
}

echo "</select>\n";
}?>
0

Другие решения

Мы будем использовать ответ на этот вопрос читать ваш файл CSV построчно, который использует fgets() и внутри цикла while мы соберем массив значений вашего списка опций следующим образом:

<?php
$handle = fopen("path/to/your/inputfile.csv", "r");
$courses = array();
$locations = array();
$dates = array();
if ($handle) {
$l = 0;
while (($line = fgets($handle)) !== false) {
if ($l === 0){
//escaping the csv header line
$l++;
continue;
}
$options = explode("," $line);
$courses[] = trim($options[0]);
$locations[] = trim($options[1]);
$dates[] = trim($options[2]);
$l++;
}
} else {
echo "<h1>Error: Opening the file has been failed.</h1>";
}
fclose($handle);
?>
<!-- HTML and inside a form-->
<select name="courses">
<?php for ($i = 0; $i < count($courses); $i++): ?>
<option value="<?php echo $courses[$i]; ?>"><?php echo $courses[$i]; ?></option>
<?php endfor; ?>
</select>
<select name="locations">
<?php for ($i = 0; $i < count($courses); $i++): ?>
<option value="<?php echo $locations[$i]; ?>"><?php echo $locations[$i]; ?></option>
<?php endfor; ?>
</select>
<select name="dates">
<?php for ($i = 0; $i < count($courses); $i++): ?>
<option value="<?php echo $dates[$i]; ?>"><?php echo $dates[$i]; ?></option>
<?php endfor; ?>
</select>

уведомление

Вы должны проверить действительность вашего CSV-файла. т.е. в начале нет пустых строк, а в каждой строке по три значения
разделенные двумя запятыми.

0