Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2023, 05:14   #1
max74max
Пользователь
 
Регистрация: 19.01.2012
Сообщений: 22
По умолчанию Не выводится значение переменной в <option>

Здравствуйте! Помогите, пожалуйста разобраться.
Есть функция, которая ищет в директории файлы, которые заканчиваются .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($filePATHINFO_EXTENSION);
    if(
in_array($extension$exclude)) {
        if(
md5($file_name) == md5($file)){$selected 'selected';}
        echo 
"
    <option "
.$selected ." value='".md5($file)."'>$file</option>";
            }
        }
    }

max74max вне форума Ответить с цитированием
Старый 28.04.2023, 05:33   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

А разве md5 надо считать не для basename? Иначе $file_name должна быть равна
Код:
$file_name = "/path_to_file/name_of_file";
И еще. Зачем в цикле пересчитывать кучу раз константное значение md5($file_name) и по 3 раза считать md5($file). Стоит объявить переменные и сохранить результат работы функции в них, чтобы избавиться от повторных вычислений константных значений.

Для того, чтобы понять почему $selected не устанавливается, достаточно просто вывести в option значение md5($file_name) хотя бы в виде комментария, чтобы иметь возможность визуально сравнить значения в value и понять, что нет совпадений.

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($filePATHINFO_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>";
            }
        }
    }


Последний раз редактировалось macomics; 28.04.2023 в 05:57.
macomics вне форума Ответить с цитированием
Старый 28.04.2023, 08:11   #3
max74max
Пользователь
 
Регистрация: 19.01.2012
Сообщений: 22
По умолчанию

Спасибо, большое. Это то что нужно.
Но только есть один нюанс.
Почему-то переменная $file_name = "name_of_file"; прописанная до function my_function() пустая, а если прописать её после function my_function() то всё ок. Почему так происходит и как задать значение переменной до функции?

Последний раз редактировалось max74max; 28.04.2023 в 08:16.
max74max вне форума Ответить с цитированием
Старый 28.04.2023, 09:12   #4
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

почитайте про видимость переменных... функция по сути отдельная программа и что было вне её не знает - да и не должна.

Для передачи в функцию тех или иных значений используются параметры... в этом как бы и заключается суть функций.... передал в функцию параметр(ы) = получил результат(ы)

в вашем случае -
Код:
function  my_function($file_name){..}
а вызов функции с нужным параметром
Код:
my_function('name_of_file1');
...
my_function('name_of_file2');

Последний раз редактировалось ADSoft; 28.04.2023 в 09:18.
ADSoft вне форума Ответить с цитированием
Старый 28.04.2023, 12:24   #5
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

еще можно сделать так
PHP код:
$file_name "name_of_file";
function 
my_function(){
    global 
$file_name;
    
$md5file_name md5($file_name);
    
$exclude = array("txt");
    foreach (new 
DirectoryIterator('my_folder/') as $file) {
        if (
$file->isFile()) {
            
$extension pathinfo($filePATHINFO_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>";
            }
        }
    }

macomics вне форума Ответить с цитированием
Старый 28.04.2023, 15:53   #6
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

можно - но не нужно учить плохому... глобальные переменный в целом - зло
ADSoft вне форума Ответить с цитированием
Старый 28.04.2023, 16:13   #7
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

И что в них злого? Глобальные переменные это просто переменные. Ещё одна возможность задавать и хранить значения у программы. Кстати, не будь глобальных переменных, то большинство программ просто не существовало бы. Возможность адресации данных глобально необходима.

Если бы от неё так просто можно было бы отказаться, тогда из php давно бы уже выпилили $GLOBALS

Последний раз редактировалось macomics; 28.04.2023 в 16:18.
macomics вне форума Ответить с цитированием
Старый 28.04.2023, 17:10   #8
Valick
Форумчанин
 
Регистрация: 27.04.2022
Сообщений: 493
По умолчанию

macomics, не выпиливают из-за обратной совместимости. Но использовать $GLOBALS в наше время - это себе дороже.
https://snipp.ru/php/registry
Valick на форуме Ответить с цитированием
Старый 28.04.2023, 17:31   #9
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Тогда почему нету пометки, что это устарело. Да и появились $GLOBALS не с самой первой версии. Её ввели, если я правильно помню в 4+ версии или вообще в 5.

Хорошо. Не нравится $GLOBALS, тогда как обойтись без $_GET, $_POST или $_FILES? Это тоже глобальные массивы.

Последний раз редактировалось macomics; 28.04.2023 в 17:36.
macomics вне форума Ответить с цитированием
Старый 28.04.2023, 17:55   #10
Valick
Форумчанин
 
Регистрация: 27.04.2022
Сообщений: 493
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
тогда как обойтись без $_GET, $_POST или $_FILES
С ними тоже уже давно никто не работает напрямую, но вы правы без них ни как.
А ещё и $_SESSION есть))
Но от конструкции global $file_name; больше проблем, чем пользы.
Valick на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не выводится значение переменной Женя32 PHP 6 26.12.2017 16:12
Не выводится значение переменной woodman02 PHP 3 03.03.2017 16:02
Как значение переменной передать другой переменной? - jQuery serauto79 JavaScript, Ajax 4 05.08.2015 17:03
Установить значение в списке option Даниил_глазко JavaScript, Ajax 1 22.08.2011 16:40
Найти значение переменной y в зависимости от значения переменной х Rishi Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 11.05.2011 20:25