За последние 24 часа нас посетили 37259 программистов и 7910 роботов. Сейчас ищут 1782 программиста ...

Не выводится значение переменной в <option>

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

  1. max74max

    max74max Активный пользователь

    С нами с:
    2 дек 2020
    Сообщения:
    26
    Симпатии:
    1
    Здравствуйте! Помогите, пожалуйста разобраться.
    Есть функция, которая ищет в директории файлы, которые заканчиваются .txt и формирует их в выпадающее меню. Здесь всё работает как нужно. Но сейчас задача, добавить в <option значение selected, если переменная $file_name равна переменной $file

    Проблема заключается в том, что переменная $selected которая находится в <option всегда пустая. Не потому что данного файла нет в директории, а потому что любая переменная после <option будет пустой. В общем, переменную $selected в <option что-то блокирует или очищает значение. Но я не могу разобраться что именно. Прошу помочь :)


    PHP:
    1. $file_name = "name_of_file";
    2.  
    3. function my_function(){
    4. $exclude = array("txt");
    5. foreach (new DirectoryIterator('my_folder/') as $file) {
    6.   if ($file->isFile()) {
    7.     $extension = pathinfo($file, PATHINFO_EXTENSION);
    8.     if(in_array($extension, $exclude)) {
    9.         if(md5($file_name) == md5($file)){$selected = 'selected';}
    10.         echo "
    11.    <option ".$selected ." value='".md5($file)."'>$file</option>";
    12.             }
    13.         }
    14.     }
    15. }
     
  2. max74max

    max74max Активный пользователь

    С нами с:
    2 дек 2020
    Сообщения:
    26
    Симпатии:
    1
    В итоге сделал так:

    PHP:
    1. $file_name = "name_of_file";
    2. function my_function(){
    3.     $md5file_name = md5($file_name);
    4.     $exclude = array("txt");
    5.     foreach (new DirectoryIterator('my_folder/') as $file) {
    6.         if ($file->isFile()) {
    7.             $extension = pathinfo($file, PATHINFO_EXTENSION);
    8.             if(in_array($extension, $exclude)) {
    9.                 $md5file = md5($file);
    10.                 if($md5file_name == $md5file){
    11.                     $selected = ' selected';
    12.                 } else {
    13.                     $selected = '';
    14.                 }
    15.                 echo "<!--$md5file_name  == $md5file-->
    16. <option $selected value='$md5file'>$file</option>";
    17.             }
    18.         }
    19.     }
    20. }
    Меня всё устраивает, но есть один нюанс.
    Почему-то переменная $file_name = "name_of_file"; прописанная до function my_function() пустая, а если прописать её после function my_function() то всё ок. Почему так происходит и как задать значение переменной до функции?
     
  3. Aleksandr.B

    Aleksandr.B Активный пользователь

    С нами с:
    2 фев 2023
    Сообщения:
    159
    Симпатии:
    41
    Адрес:
    Барнаул
  4. Александр Петрович

    Александр Петрович Активный пользователь

    С нами с:
    14 ноя 2019
    Сообщения:
    12
    Симпатии:
    0
    $file_name определена вне функции, поэтому внутри функции она не видна. Надо добавить строку
    PHP:
    1. globala $file_name;
    в теле функции.
     
  5. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    947
    Симпатии:
    147
    Петрович, свою глобалу сам себе добавь, не учи плохому с опечатками.
     
  6. Александр Петрович

    Александр Петрович Активный пользователь

    С нами с:
    14 ноя 2019
    Сообщения:
    12
    Симпатии:
    0
    Объясни, а то не понятно)
     
  7. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    947
    Симпатии:
    147
    1. "globala" нет такого в языке;
    2. глобальные переменные -- зло, хорошо, когда скрипт из 1-го файла и 20-ти строк, а если 1к файлов, с зоопарком глобалок будет один лишь геморрой.
     
  8. Александр Петрович

    Александр Петрович Активный пользователь

    С нами с:
    14 ноя 2019
    Сообщения:
    12
    Симпатии:
    0
    Все понятно теперь объяснил, сразу все по местам стало)
    А если серьезно, то аргументы слабоваты. В данном конкретном случае нет никаких скриптов, файлов и тем более 1К файлов. А есть функция и переменная, которая определена вне функции, то есть в глобальном пространстве имен. То есть глобальная переменная. И чтобы ее использовать в пространстве имен функции, ее нужно там определить. Это делается при помощи ключевого слова global. И да, этим нужно пользоваться осторожно, потому что глобальная переменная доступна к изменению внутри функции.
    Еще ее можно передать в качестве параметра функции. Тогда не будет необходимости юзать глобальную переменную, так как параметр передается по значению. Просто не всегда есть возможность добавлять параметры функции. Надо смотреть по конкретной ситуации.
     
  9. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    947
    Симпатии:
    147
  10. antoniii

    antoniii Активный пользователь

    С нами с:
    16 мар 2022
    Сообщения:
    419
    Симпатии:
    71
    [​IMG]
    Вместо слова Пешеходы надо вставить Функции, а вместо Автомобилистов - Методы...
     
    don.bidon нравится это.