Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > PHP: Общие вопросы > Получить значение переменной в другом файле. |
Автор: Avaj 10.8.2009, 08:33 |
Такой нубский вопрос ![]() Как сделать объект видимым для нескольких php-файлов, т.е. например переменная $var1 определена в файле 1.php, и как получить её значение в другом файле? |
Автор: azesmcar 10.8.2009, 08:39 |
session_register? |
Автор: Ипатьев 10.8.2009, 08:42 |
azesmcar, в общем случае сессии не подходят для ответа на такой неконкретный вопрос И страшно устаревшая функция session_register - в частности. Avaj, в таком виде, в котором вопрос задан, ответ один - записать её в базу данных. |
Автор: Avaj 10.8.2009, 08:49 | ||||
azesmcar, Ипатьев, ну в базу пока не надо, а конкретней так : 1.php
2.php:
|
Автор: Ипатьев 10.8.2009, 08:50 |
Сессия - это в первую очередь сохранение состояния в системе клиент-сервер. И только во вторую - средство передачи данных между скриптами. А если автору надо чтобы и другой клиент имел доступ к этим данным? |
Автор: azesmcar 10.8.2009, 08:58 | ||||||
Вот цитата с сайта php.net
Но совершенно не важно для чего они в первую очередь, важно что они решают задачу в том варианте, в котором я ее понял.
А если автору надо чтобы другой клиент пользовался другой базой данных? А если автору надо чтобы задача решалась без использования баз данных, а если автору надо чтобы эти клиенты находились на разных концах планеты и вообще не имели друг к другу никакого доступа? А если ... (продолжать?) Какой смысл строить догадки? Добавлено через 3 минуты и 35 секунд Может имеет смысл определить все эти переменные в отдельном inc файле и заинклудить его там, где это надо? |
Автор: bars80080 10.8.2009, 09:16 | ||
именно поэтому и было сказано, что прежде чем говорить о сессиях, надо выяснить чего хочет топикстартер Avaj, вот вы своим вторым постом, ну никак не прояснили ситуацию. как связаны эти файлы? можете описать конкретную ситуацию в которой это вам понадобилось? больше текста, больше ясности, получите ответ быстрее и лучше по факту, в такого рода вопросах вдруг оказывается, что в самом деле один файл инклудится в другой, а следовательно вопроса нет как такового |
Автор: Ипатьев 10.8.2009, 09:18 |
Avaj, в общем случае так невозможно. Скрипты выполняются в раздельном окружении, и так написать не получится. Передать можно только скалярные данные между скриптами. Вопрос надо написать подробно. Что за переменные, для чего они нужны, кто их устанавливает и кто будет читать. А не повторять то же самое другими словами. Описать реальный пример, в котором это понадобилось |
Автор: Ипатьев 10.8.2009, 12:24 | ||
А я бы поставил на GET. Интересно, кто выиграет? ))) |
Автор: MoLeX 10.8.2009, 12:53 |
а чем include/require не подходит? |
Автор: youri 10.8.2009, 12:57 |
Ипатьев, +100 azesmcar, надо решать проблему стоящую перед ТС, а не помогать ему реализовывать придуманное им решение (http://ibash.org.ru/quote.php?id=10656 , http://phpfaq.ru/humor - первая гипербола) |
Автор: Avaj 10.8.2009, 13:23 | ||||
Ипатьев, А реальный пример такой : Из HTML-формы в переменную $tableName считывается название будущей SQL-таблицы и таблица создаётся в скрипте 1.php:
Далее из другой формы вводятся данные $data1 и $data2, которые должны быть записаны в эту созданную таблицу в скрипте 2.php:
Но как вы знаете в скрипте 2.php переменная $tableName не содержит имени таблицы, там пусто. (Извиняюсь, если что-то неправильно понимаю - в PHP недавно.) |
Автор: bars80080 10.8.2009, 13:35 | ||||
почему не содержит? наверно, потому что не положил ![]() тут два вариант. если у нас нечто типа визарда, т.е. окошко: "введите имя таблицы", жмём кноку, создаётся таблица, появляется окошко: "введите данные" и т.д. тогда точно надо делать через сессию. записывать имя таблицы в $_SESSION['tablename'] и всё второй вариант. создали таблицу, ну и ладно. несколько позже, с какой-то страницы по ссылке "добавить данные" мы переходим на страницу с формой добавления данных. тут уж извини, но имя таблицы должно передаваться от ссылки, а как - это уже в зависимости от задачи. к примеру, это личная таблица пользователя - тогда записать имя таблицы в БД в учётную запись пользователя. если это просто некая таблица, и ты приводишь список таблиц которые можно редактировать, то тогда просто делаем соответствующую ссылку:
п.с. давать пользователю создавать таблицы - суть дурной тон значит неверно спланирована структура БД |
Автор: azesmcar 10.8.2009, 13:46 | ||
Это твое мнение. Ну и решай их по своему, у тебя тоже есть право голоса на форуме если не ошибаюсь. Я считаю что отвечать надо на поставленные вопросы, а не на придуманные. |
Автор: lukas 10.8.2009, 13:48 | ||||
Блин, развели демагогию... Avaj Когда ты подключаешь файл методом include, то все переменные до этого будут доступны в этом файле. Но когда таких инклюдов, и всяких require'ов очень много, следить за зоной видимости переменных становится невыносимо. Поэтому вариант один:
а в другом файле просто:
И тебе станет доступна эта переменная. |
Автор: Ипатьев 10.8.2009, 14:35 |
lukas, демагогия - это ответ про $GLOBALS. А точнее - элементарная неграмотность. Avaj, обычно в подобных случаях (форма 2 зависит от формы1) такие данные передаются через адресную строку, т.е. второй пример bars80080. Но из пользовательского ввода таблицы практически никогда не создаются. Скорее всего, неправильно спроектирована база данных. Не говоря уже о вопиющей небезопасности такого подхода вообще и приведеннного кода - в частности. |
Автор: Avaj 10.8.2009, 15:09 | ||||
bars80080,
Ну сначала происходит что-то типа регистрации, для юзера создаётся запись в таблице юзеров и создаётся таблица для его заметок (что-то типа блога).
А как оно попадает в html-файл с формой? |
Автор: youri 10.8.2009, 15:13 |
создай таблицу заранее для всех пользователей. Если бы ты сразу рассказал, что ты делаешь - быстрее бы получил ответ ;) |
Автор: Avaj 10.8.2009, 15:17 | ||||
youri
Одну на всех?
![]() |
Автор: gcc 10.8.2009, 15:23 | ||
ассессор?
|
Автор: Avaj 10.8.2009, 15:34 |
gcc, я не понял что имел ввиду. |
Автор: Ипатьев 10.8.2009, 15:38 |
Avaj, это была шутка. Надо сделать одну таблицу для блогов всех пользователей. Тогда все вопросы разом пропадут. А насчет различных способов передачи данных от скрипта к скрипту следует почитать учебник, для общего развития. |
Автор: Avaj 10.8.2009, 15:45 | ||
Наверно так и надо, но мне кажется, что не так оно обычно устроено. Или иметь много небольших таблиц значительно накладней, чем одну большую? |
Автор: Ипатьев 10.8.2009, 15:56 |
Как раз наоборот. Именно так оно обычно и устроено. И накладность тут совсем не при чем. Есть такое понятие - архитектура базы данных. Она первична. Как сопромат в строительстве. Как сказано по одной из ссылок выше, высотные здания строят из железобетона, а не из дерева не потому, что он дешевле. И не потому, что дороже. Дело вообще не в "накладности". Однотипные данные в базе хранятся в одной таблице. К примеру, все сообщения всех тем в этом форуме хранятся в одной таблице. |
Автор: lukas 11.8.2009, 09:28 | ||
Я не понимаю в чем неграмотность? Как я понял у человека были проблемы с зоной видимости переменных, по крайне мере стоит прочесть самое начало. Я не виноват, что человек не может нормально выразить свои мысли. Если иначе, наверно стоило человеку объяснить что php-скрипт выполняется один раз и после выполнения все объявленные переменные очищаются. |
Автор: youri 11.8.2009, 18:48 |
начинающий тоже не виноват в том, что он начинающий |
Автор: Avaj 12.8.2009, 10:43 |
Всем спасибо. ![]() Так правильно ли я понял, что для передачи значений от скрипта скрипту надо использовать сессии? |
Автор: NewDima 12.8.2009, 10:48 |
Резюмирую вышесказанное: 1. если скрипты взаимодействуют в течении одного времени интерпритации, то ничего, кроме подключения модулей методами include/require, делать не нужно 2. если скрипты связаны только пользователем, который к ним обращается, то можно использовать сессию, либо помещать нужные параметры в строку адреса, и на последующих шагах анализировать установленный параметр |
Автор: Ипатьев 12.8.2009, 11:05 | ||
Нет. |
Автор: Avaj 13.8.2009, 05:25 | ||
Ипатьев, но http://www.softtime.ru/bookphp/gl8_1.php написано так:
|
Автор: youri 13.8.2009, 08:14 |
там не написано, что "для передачи значений от скрипта скрипту надо использовать сессии", там написано для хранения информации о пользователе. Например, возьмем твою идею и допустим, что таблицы называются notes_<id пользователя>. Тогда в сессии можно хранить id пользователя, а по id пользователя ты сможешь легко узнать имя таблицы. Можно было бы хранить имя таблицы в сессии, если не учитывать, что имя таблицы легко определяется по id и что под каждого пользователя отдельные таблицы не создают. Еще в сессии хранят список товаров, помещенных в корзину (в случае какого-нибудь электронного магазина) Для передачи значений от одной страницы к другой (а не от скрипта к скрипту) используются параметры запроса (то что после знака вопроса в ссылке, например) |
Автор: gcc 13.8.2009, 08:26 |
а что делают эти скрипты? можно демона написать на сокетах, share memory, mysql, серилизировать данные куда-то в файл на сервере Добавлено позже а что делают эти скрипты? можно демона написать на сокетах, share memory, mysql, серилизировать данные куда-то в файл на сервере |
Автор: bars80080 13.8.2009, 09:37 |
Avaj, я не стал ничего писать, потому что к этому собственно добавить нечего это как основополагающая статья в конституции SQL, которая правке не подлежит. если у тебя одинаковые данные, то они по определению должны находиться в одной таблице. нужно ведь всего лишь ввести одно дополнительное поле id_user и всё. мало того, определяя все записи в одну таблицу ты получаешь неисчислимые преимущества в виде сортировок, удобного поиска ключевых слов во всех блогах сразу, сравнения пользователей. наличие же отдельной таблицы не даёт вообще никаких преимуществ, и приэтом делает систему громозкой и совершенно не гибкой. как в управлении таблицами, так и в работе с данными |
Автор: Avaj 15.8.2009, 06:39 |
Всем спасибо, разобрался. |