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

max74max

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

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


PHP:
$file_name = "name_of_file";

function my_function(){
$exclude = array("txt");
foreach (new DirectoryIterator('my_folder/') as $file) {
  if ($file->isFile()) {
    $extension = pathinfo($file, PATHINFO_EXTENSION);
    if(in_array($extension, $exclude)) {
        if(md5($file_name) == md5($file)){$selected = 'selected';}
        echo "
    <option ".$selected ." value='".md5($file)."'>$file</option>";
            }
        }
    }
}
 

max74max

Новичок
В итоге сделал так:

PHP:
$file_name = "name_of_file";
function my_function(){
    $md5file_name = md5($file_name);
    $exclude = array("txt");
    foreach (new DirectoryIterator('my_folder/') as $file) {
        if ($file->isFile()) {
            $extension = pathinfo($file, PATHINFO_EXTENSION);
            if(in_array($extension, $exclude)) {
                $md5file = md5($file);
                if($md5file_name == $md5file){
                    $selected = ' selected';
                } else {
                    $selected = '';
                }
                echo "<!--$md5file_name  == $md5file-->
<option $selected value='$md5file'>$file</option>";
            }
        }
    }
}
Меня всё устраивает, но есть один нюанс.
Почему-то переменная $file_name = "name_of_file"; прописанная до function my_function() пустая, а если прописать её после function my_function() то всё ок. Почему так происходит и как задать значение переменной до функции?
 

ksnk

прохожий
Вообще-то php - это не Javascript. Области видимости тут совсем даже не так странно организованы. Так что
file_name внутри функции будет неопределен. В параметрах нельзя передать ?
 
  • Like
Реакции: AmdY

Valick

Новичок
max74max, подмешивая мух в котлеты, трудно наслаждаться трапезой.
Вам просто необходимо изучать основы РНР и двигаться постепенно от простого к сложному.
Вам необходимо реализовать хотя бы какоё-то подобие MVC, т.е. разделить логику обработки данных и их отображение.
Никакого вывода echo в дебрях РНР быть не должно. Для вывода существуют шаблоны.
А ещё лучше начинайте изучать ООП и учитесь думать в этой парадигме. Это сложно, но результат того стоит.
 

max74max

Новичок
Спасибо за ответ. С ООП действительно нужно мне наверное подружиться.
Решения нашел следующее:

Объявить global $file_name;
или
function my_function($file_name){..} и вызвать my_function('name_of_file');
 

weregod

unserializer
Глобальные переменные нужны в очень редких случаях (например, бенчи какие-нить, о которых ты и не знаешь пока), передавай параметром в ф-цию хотя бы.
 
Сверху