За последние 24 часа нас посетили 39475 программистов и 7589 роботов. Сейчас ищут 1745 программистов ...

Фильтрация данных и вывод из файла csv

Тема в разделе "PHP для новичков", создана пользователем Irzy, 24 авг 2023.

Метки:
  1. Irzy

    Irzy Новичок

    С нами с:
    24 авг 2023
    Сообщения:
    3
    Симпатии:
    0
    Всем здравствуйте (не уверена там ли создаю тему), пишу код и возникла проблема в том, что результат первого post-запроса стирается при отправке второго, из-за этого данные не выводятся после установки параметров с помощью выпадающих списков. Помогите, пожалуйста, решить данную проблему, код возможно не совсем рациональный, но как есть. В прикрепленном файле csv файл, из которого читаются данные. Заранее спасибо!

    Задание: есть файл CSV, в котором хранятся адреса в формате "9 запятых". Необходимо создать скрипт на PHP, который читает адреса из файла и выводит их на экран. Также нужно реализовать возможность фильтрации адресов с помощью выпадающих списков. Данные в выпадающем списках должны подставляться динамически (например, если выбран населенный пункт, то в списке улиц должны подставиться только улицы выбранного нас. пункта).

    PHP:
    1. <?php
    2. echo '<form id='addressForm' action='' method='POST'>';
    3. //выделяем НП и записываем в выпадающий список
    4.         $file = fopen("addreses.csv", 'r');
    5.         $rowCount = 0;
    6.         $cityColumnArray = array();
    7.         while(false !== ($rowData = fgetcsv($file))) {
    8.             if($rowCount >= 0 && $rowCount <= count($cityColumnArray)){
    9.                 array_push($cityColumnArray, $rowData[5]);
    10.             }
    11.             $rowCount = $rowCount + 1;
    12.         }
    13.         fclose($file);
    14.         //вывод данных при 2 совпадающих параметрах  
    15.         if(isset($_POST['street']) && isset($_POST['city']))
    16.         {
    17.         $optionSelect = $_POST['city'];
    18.         $optionSelect1 = $_POST['street'];
    19.         $streetColumnArray = array();
    20.         echo "<table>\n\n";
    21.         $file = fopen("addreses.csv", "r");
    22.         while (($data = fgetcsv($file)) !== false) {
    23.             echo "<tr>";
    24.             foreach ($data as $i) {
    25.                 if ($optionSelect == $data[5] && $optionSelect1 == $data[6])
    26.                 {
    27.                     echo "<td>   " . htmlspecialchars($i) . "   </td>";
    28.                 }
    29.             }
    30.             echo "</tr> \n";
    31.         }
    32.         fclose($file);
    33.         echo "\n</table>";
    34.         }
    35.      
    36.         //сравнение option с данными файла и при совпадении запись 6 столбца в массив
    37.         if(isset($_POST['city'])) {
    38.             $optionSelect = $_POST['city'];
    39.             $streetColumnArray = array();
    40.             $file1 = fopen("addreses.csv", "r");
    41.             while (($data = fgetcsv($file1)) !== false) {
    42.                 if ($optionSelect == $data[5])
    43.                 {
    44.                     array_push($streetColumnArray, $data[6]);
    45.                 }
    46.             }
    47.             fclose($file1);
    48.         }
    49.             echo "<label for='city'>Выберите населенный пункт:</label>
    50.                  <select class='city' id='city' name='city' onchange='checkField(this.value)'>
    51.                  <option selected>--Select--</option>";
    52.             // заполнение select массивом CITIES
    53.             $proglang = array_unique($cityColumnArray);
    54.             foreach($proglang as $item) {
    55.                 echo "<option value='$item'>$item</option>";
    56.             }
    57.             echo '</select>';
    58.      
    59.      
    60.      
    61.         echo $_POST['city'].'<br>'.$city;
    62.  
    63.         if(isset($_POST['city']))
    64.         {
    65.             echo '<label for="street">Выберите улицу:</label>
    66.                  <select id="street" name="street" onchange="checkField(this.value)">
    67.                  <option selected>--Select--</option>';
    68.             // заполнение select массивом STREETS
    69.             $proglang1 = array_unique($streetColumnArray);
    70.             foreach($proglang1 as $item1){
    71.                 echo "<option value='$item1'>$item1</option>";
    72.             }
    73.             echo '</select>';
    74.         }
    75.      
    76.         echo $_POST['street'].'<br>';
    77. ?>
    78.  
    79.         </form><hr>
    80.             <center>
    81.                 <h1>Данные файла</h1>
    82.                     <table>
    83.  
    84. <?php
    85.         echo "\n\n";
    86.         $file = fopen("addreses.csv", "r");
    87.         while (($data = fgetcsv($file)) !== false) {
    88.             echo "<tr>";
    89.             foreach ($data as $i) {
    90.                 echo "<td>" . htmlspecialchars($i) . "</td>";
    91.             }
    92.             echo "</tr> \n";
    93.         }
    94.         fclose($file);
    95.         echo "\n";
    96. ?>
    97.                  
    98.                     </table>
    99.             </center><hr>
    100.          
    101.          
    102.     <script>
    103.     function checkField(val) {
    104.         document.getElementById('addressForm').submit()
    105.     }
    106.     </script>
    107.    
     

    Вложения:

    • addreses.zip
      Размер файла:
      4,4 КБ
      Просмотров:
      1
    #1 Irzy, 24 авг 2023
    Последнее редактирование: 24 авг 2023
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    753
    Адрес:
    Татарстан
    если выпадающие списки связанные - то делается это не так... а с помощью ajax запросов... если нет - отправляйте все данные вместе а не по отдельности
     
    #2 ADSoft, 24 авг 2023
    Последнее редактирование: 24 авг 2023
  3. Irzy

    Irzy Новичок

    С нами с:
    24 авг 2023
    Сообщения:
    3
    Симпатии:
    0
    а можете, пожалуйста, подсказать как это сделать с помощью ajax
     
  4. nothingtosee

    nothingtosee Новичок

    С нами с:
    12 ноя 2023
    Сообщения:
    2
    Симпатии:
    0
    Доброго времени суток, удалось решить проблему?
     
  5. Irzy

    Irzy Новичок

    С нами с:
    24 авг 2023
    Сообщения:
    3
    Симпатии:
    0
    да, спасибо
     
  6. nothingtosee

    nothingtosee Новичок

    С нами с:
    12 ноя 2023
    Сообщения:
    2
    Симпатии:
    0
    Можете поделиться решением?