Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Функция: передать аргумент внутрь включенного файла через require

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Как передать переменную через функцию внутрь файла подключенного через require
code_maker
Отправлено: 17 Сентября, 2014 - 13:51:34
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Июнь 2014  


Помог: 0 раз(а)




Есть сайт, с автоматизацией вывода некоторой информации из бд. Структура: несколько пхп файлов объединненых индексом, с пересылкой переменных внутри методом GET.

Делаю еще один index.php, старый индекс переименовываю в main.php.

Код в новом индексе:

CODE (htmlphp):
скопировать код в буфер обмена
  1.  <?php
  2.    $idc="somecompany";
  3.  function site_exec()
  4.  {
  5.      require_once '../некий путь/main.php';  
  6.  }
  7.    site_exec($idc);

$idc работает только в пределах данного файла index.php.
Как мне $idc передать внутрь не только main.php, но и других файлов (не всех, какие понадобятся в процессе).
Метод GET я не понимаю как тут использовать, да и POST - все примеры через формы.
Буду благодарен просто за ссылку на то куда копать. Функции в новинку еще.

Может вообще через сессию сделать?

(Отредактировано автором: 17 Сентября, 2014 - 14:03:05)

 
 Top
Tyoma5891
Отправлено: 17 Сентября, 2014 - 14:13:11
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 621
Дата рег-ции: Авг. 2013  


Помог: 5 раз(а)




запишите $idc в куки вот функция
 
 Top
IllusionMH
Отправлено: 17 Сентября, 2014 - 14:23:10
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




code_maker, вы вызываете функцию с параметром, а она его вообще ожидает?

(Отредактировано автором: 17 Сентября, 2014 - 14:25:48)

 
 Top
code_maker
Отправлено: 17 Сентября, 2014 - 14:34:55
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Июнь 2014  


Помог: 0 раз(а)




Tyoma5891
решил сделать session_start(), через куки нельзя эту инфу записывать.

IllusionMH
хотел ожидание сделать внутри подключаемого файла. то есть там сделал _REQUEST этого аргумента. Но то ли я что-то не так понимаю в работе функций. то ли просто так нельзя делать.
Делаю через session_start.
Сделал так:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $_SESSION['idc'] = "somecompany";
  3.           require_once '../некий путь/main.php';  
  4.  

Теперь переменную видно где угодно, через $_SESSION. Но еще взамен получил очередную ошибку новичков -
session_start(): Cannot send session cache limiter - headers already sent
Проверил файл, нет ли там доп. символов. Кодировку поменял еще раз. Все равно выскакивает. Делаю session_start сразу после <?php, без лишних пробелов.
Если в файле хтмл код, то делаю закрытие ?>, но ошибка есть.

(Отредактировано автором: 17 Сентября, 2014 - 14:35:32)

 
 Top
Tyoma5891
Отправлено: 17 Сентября, 2014 - 15:10:02
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 621
Дата рег-ции: Авг. 2013  


Помог: 5 раз(а)




code_maker пишет:
Tyoma5891
решил сделать session_start(), через куки нельзя эту инфу записывать.


это почему это? данные переменной сессий будут одинаково доступны, только во время ее работы, так само можно и настроить куки на определеное время жизни...
 
 Top
DelphinPRO
Отправлено: 17 Сентября, 2014 - 15:13:02
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




>> $_SESSION['idc'] = "somecompany";

В $GLOBALS['idc'] пишите. она тоже глобальная Улыбка Разумеется, если переменная нужна в пределах одного запроса


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
IllusionMH
Отправлено: 17 Сентября, 2014 - 17:59:20
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




code_maker, если вы передаете параметры в функцию, не пробовали их описывать в объявлении функции?
 
 Top
code_maker
Отправлено: 18 Сентября, 2014 - 08:58:49
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Июнь 2014  


Помог: 0 раз(а)




Tyoma5891
я к тому что куки же на стороне пользователя создаются? заказчик против такой реализации, плюс он легко читает код. С одной стороны задачи четкие и понятные, с другой полный контроль над выполнением.

DelphinPRO
ваш вариант не сработал. В main.php есть инклуды, плюс с нее идет переход на обработчик через аякс. много я там нагородил)) по идее в обработчике надо принять переменную и еще на одной странице. Ну и на Main.php. В итоге 3 страницы всего.
я постом хотел сначала. Но примеры нашел только через формы. а у меня нет форм, только индексы имеющие разные значения переменной.

IllusionMH
если я вас правильно понял:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?php
  3.  
  4. function site_exec()
  5. {
  6. $idc="somecompany";    
  7. require_once '../некий путь/main.php';  
  8. }
  9.   site_exec($idc);

пробовал, не сработало. А если неправильно понял, то буду благодарен за уточнение.


У меня по пути возникла еще такая глупая проблема.
Файл index.php может быть где угодно. Он ссылается на папку с сайтом-шаблоном.
Там есть файл main.php с относительными путями (хидер и футер подгружаю).
при переходе на сайт через индекс, хидер и футер не подгружаются.
Делаю костыль - еще один индекс внутри папки, ссылаюсь через основной индекс на него и внутри костыля делаю абсолютные пути.
Тогда все грузится нормально, а при переходе внутри сайта нас незаметно скидывает на main, который после первого щелчка по меню уже корректно отображается.
Сделать в main абсолютные пути пробовал - крашится.

p.s с ошибкой сессий разобрался - надо было ее открывать в файле к которому инклуды подкючаются.

(Отредактировано автором: 18 Сентября, 2014 - 09:17:55)

 
 Top
IllusionMH
Отправлено: 18 Сентября, 2014 - 11:39:06
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




code_maker, нет.
CODE (htmlphp):
скопировать код в буфер обмена
  1. function site_exec($idc) {

этого достаточно чтобы параметр который передается в функцию был виден внутри файла как $idc
 
 Top
code_maker
Отправлено: 18 Сентября, 2014 - 12:59:53
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Июнь 2014  


Помог: 0 раз(а)




IllusionMH в пределах текущего файла да. а в main.php мне говорят Undefined variable.
 
 Top
Sail
Отправлено: 18 Сентября, 2014 - 13:05:57
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




code_maker пишет:
Как мне $idc передать внутрь не только main.php, но и других файлов (не всех, какие понадобятся в процессе).

Если переменная определяется/инициализируется в файле, то она без проблем доступна во всех подключаемых через include или require файлах, если подключение осуществляется после инициализации.
Если надо использовать эту переменную в теле функции, то эту переменную надо либо передавать в функцию как параметр, либо в теле функции объявлять эту переменную глобальной.
Применительно к участку кода из первого сообщения, примерно так:
PHP:
скопировать код в буфер обмена
  1.  $idc="somecompany";
  2.  function site_exec()
  3.  {
  4.      global $idc;
  5.      require_once '../некий путь/main.php';  
  6.  }
  7.    site_exec();

Или, если вникнуть в сообщение IllusionMH:
PHP:
скопировать код в буфер обмена
  1.  $idc="somecompany";
  2.  function site_exec($idc)
  3.  {
  4.      require_once '../некий путь/main.php';  
  5.  }
  6.    site_exec($idc);


И в теле функции, однако, лучше использовать не require_once, а include_once, особенно, если путь формируется "на лету"...

(Отредактировано автором: 18 Сентября, 2014 - 13:20:00)

 
 Top
IllusionMH
Отправлено: 18 Сентября, 2014 - 13:17:15
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




code_maker, да ну?
test.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $internal = 'Works';
  3. function test($external) {
  4.         require('./main.php');
  5. }
  6. test($internal);

main.php
 
 Top
code_maker
Отправлено: 18 Сентября, 2014 - 13:43:42
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Июнь 2014  


Помог: 0 раз(а)




SailIllusionMH спасибо! у меня наступило просветление по поводу функций!
для тех страниц что подключаются напрямую - работает.

(Отредактировано автором: 18 Сентября, 2014 - 13:45:56)

 
 Top
esterio
Отправлено: 18 Сентября, 2014 - 18:24:26
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




[зануда ON]
Sail пишет:
И в теле функции, однако, лучше использовать не require_once, а include_once, особенно, если путь формируется "на лету"...

Дайте угадаю - потому что require подключаеться до испонения скрипта, а include во время?
должен вас огорчить. когда-то так и было, но сейчас они отличаються только уровнем ошибок, когда файл не найден
[зануда OFF]

(Отредактировано автором: 18 Сентября, 2014 - 18:24:56)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB