![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
Avaj |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 212 Регистрация: 14.7.2008 Где: Владивосток. Репутация: нет Всего: 3 |
Такой нубский вопрос
![]() Как сделать объект видимым для нескольких php-файлов, т.е. например переменная $var1 определена в файле 1.php, и как получить её значение в другом файле? |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 12 Всего: 211 |
session_register?
|
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
azesmcar, в общем случае сессии не подходят для ответа на такой неконкретный вопрос
И страшно устаревшая функция session_register - в частности. Avaj, в таком виде, в котором вопрос задан, ответ один - записать её в базу данных. |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 12 Всего: 211 |
||||
|
||||
Avaj |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 212 Регистрация: 14.7.2008 Где: Владивосток. Репутация: нет Всего: 3 |
azesmcar, Ипатьев, ну в базу пока не надо, а конкретней так :
1.php
2.php:
|
||||
|
|||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
Сессия - это в первую очередь сохранение состояния в системе клиент-сервер. И только во вторую - средство передачи данных между скриптами. А если автору надо чтобы и другой клиент имел доступ к этим данным?
|
|||
|
||||
azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 12 Всего: 211 |
Вот цитата с сайта php.net
Но совершенно не важно для чего они в первую очередь, важно что они решают задачу в том варианте, в котором я ее понял.
А если автору надо чтобы другой клиент пользовался другой базой данных? А если автору надо чтобы задача решалась без использования баз данных, а если автору надо чтобы эти клиенты находились на разных концах планеты и вообще не имели друг к другу никакого доступа? А если ... (продолжать?) Какой смысл строить догадки? Добавлено через 3 минуты и 35 секунд Может имеет смысл определить все эти переменные в отдельном inc файле и заинклудить его там, где это надо? |
||||
|
|||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
именно поэтому и было сказано, что прежде чем говорить о сессиях, надо выяснить чего хочет топикстартер Avaj, вот вы своим вторым постом, ну никак не прояснили ситуацию. как связаны эти файлы? можете описать конкретную ситуацию в которой это вам понадобилось? больше текста, больше ясности, получите ответ быстрее и лучше по факту, в такого рода вопросах вдруг оказывается, что в самом деле один файл инклудится в другой, а следовательно вопроса нет как такового |
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
Avaj, в общем случае так невозможно. Скрипты выполняются в раздельном окружении, и так написать не получится. Передать можно только скалярные данные между скриптами.
Вопрос надо написать подробно. Что за переменные, для чего они нужны, кто их устанавливает и кто будет читать. А не повторять то же самое другими словами. Описать реальный пример, в котором это понадобилось Это сообщение отредактировал(а) Ипатьев - 10.8.2009, 09:19 |
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
||||
|
||||
MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
а чем include/require не подходит?
-------------------- Amazing ![]() |
|||
|
||||
youri |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 17.4.2004 Репутация: 6 Всего: 16 |
Ипатьев, +100
azesmcar, надо решать проблему стоящую перед ТС, а не помогать ему реализовывать придуманное им решение (http://ibash.org.ru/quote.php?id=10656 , http://phpfaq.ru/humor - первая гипербола) Это сообщение отредактировал(а) youri - 10.8.2009, 12:58 |
|||
|
||||
Avaj |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 212 Регистрация: 14.7.2008 Где: Владивосток. Репутация: нет Всего: 3 |
Ипатьев,
А реальный пример такой : Из HTML-формы в переменную $tableName считывается название будущей SQL-таблицы и таблица создаётся в скрипте 1.php:
Далее из другой формы вводятся данные $data1 и $data2, которые должны быть записаны в эту созданную таблицу в скрипте 2.php:
Но как вы знаете в скрипте 2.php переменная $tableName не содержит имени таблицы, там пусто. (Извиняюсь, если что-то неправильно понимаю - в PHP недавно.) |
||||
|
|||||
bars80080 |
|
||||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
почему не содержит? наверно, потому что не положил ![]() тут два вариант. если у нас нечто типа визарда, т.е. окошко: "введите имя таблицы", жмём кноку, создаётся таблица, появляется окошко: "введите данные" и т.д. тогда точно надо делать через сессию. записывать имя таблицы в $_SESSION['tablename'] и всё второй вариант. создали таблицу, ну и ладно. несколько позже, с какой-то страницы по ссылке "добавить данные" мы переходим на страницу с формой добавления данных. тут уж извини, но имя таблицы должно передаваться от ссылки, а как - это уже в зависимости от задачи. к примеру, это личная таблица пользователя - тогда записать имя таблицы в БД в учётную запись пользователя. если это просто некая таблица, и ты приводишь список таблиц которые можно редактировать, то тогда просто делаем соответствующую ссылку:
п.с. давать пользователю создавать таблицы - суть дурной тон значит неверно спланирована структура БД |
||||
|
|||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 12 Всего: 211 |
Это твое мнение. Ну и решай их по своему, у тебя тоже есть право голоса на форуме если не ошибаюсь. Я считаю что отвечать надо на поставленные вопросы, а не на придуманные. Это сообщение отредактировал(а) azesmcar - 10.8.2009, 13:51 |
|||
|
||||
lukas |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 23.2.2007 Репутация: 3 Всего: 15 |
Блин, развели демагогию...
Avaj Когда ты подключаешь файл методом include, то все переменные до этого будут доступны в этом файле. Но когда таких инклюдов, и всяких require'ов очень много, следить за зоной видимости переменных становится невыносимо. Поэтому вариант один:
а в другом файле просто:
И тебе станет доступна эта переменная. -------------------- http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi. |
||||
|
|||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
lukas, демагогия - это ответ про $GLOBALS. А точнее - элементарная неграмотность.
Avaj, обычно в подобных случаях (форма 2 зависит от формы1) такие данные передаются через адресную строку, т.е. второй пример bars80080. Но из пользовательского ввода таблицы практически никогда не создаются. Скорее всего, неправильно спроектирована база данных. Не говоря уже о вопиющей небезопасности такого подхода вообще и приведеннного кода - в частности. Это сообщение отредактировал(а) Ипатьев - 10.8.2009, 14:38 |
|||
|
||||
Avaj |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 212 Регистрация: 14.7.2008 Где: Владивосток. Репутация: нет Всего: 3 |
bars80080,
Ну сначала происходит что-то типа регистрации, для юзера создаётся запись в таблице юзеров и создаётся таблица для его заметок (что-то типа блога).
А как оно попадает в html-файл с формой? |
||||
|
|||||
youri |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 17.4.2004 Репутация: 6 Всего: 16 |
создай таблицу заранее для всех пользователей. Если бы ты сразу рассказал, что ты делаешь - быстрее бы получил ответ ;) |
|||
|
||||
Avaj |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 212 Регистрация: 14.7.2008 Где: Владивосток. Репутация: нет Всего: 3 |
youri
Одну на всех?
![]() Это сообщение отредактировал(а) Avaj - 10.8.2009, 15:21 |
||||
|
|||||
gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: -1 Всего: 17 |
ассессор?
|
|||
|
||||
Avaj |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 212 Регистрация: 14.7.2008 Где: Владивосток. Репутация: нет Всего: 3 |
gcc, я не понял что имел ввиду.
|
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
Avaj, это была шутка.
Надо сделать одну таблицу для блогов всех пользователей. Тогда все вопросы разом пропадут. А насчет различных способов передачи данных от скрипта к скрипту следует почитать учебник, для общего развития. |
|||
|
||||
Avaj |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 212 Регистрация: 14.7.2008 Где: Владивосток. Репутация: нет Всего: 3 |
Наверно так и надо, но мне кажется, что не так оно обычно устроено. Или иметь много небольших таблиц значительно накладней, чем одну большую? |
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
Как раз наоборот. Именно так оно обычно и устроено.
И накладность тут совсем не при чем. Есть такое понятие - архитектура базы данных. Она первична. Как сопромат в строительстве. Как сказано по одной из ссылок выше, высотные здания строят из железобетона, а не из дерева не потому, что он дешевле. И не потому, что дороже. Дело вообще не в "накладности". Однотипные данные в базе хранятся в одной таблице. К примеру, все сообщения всех тем в этом форуме хранятся в одной таблице. |
|||
|
||||
lukas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 23.2.2007 Репутация: 3 Всего: 15 |
Я не понимаю в чем неграмотность? Как я понял у человека были проблемы с зоной видимости переменных, по крайне мере стоит прочесть самое начало. Я не виноват, что человек не может нормально выразить свои мысли. Если иначе, наверно стоило человеку объяснить что php-скрипт выполняется один раз и после выполнения все объявленные переменные очищаются. -------------------- http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi. |
|||
|
||||
youri |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 17.4.2004 Репутация: 6 Всего: 16 |
начинающий тоже не виноват в том, что он начинающий |
|||
|
||||
Avaj |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 212 Регистрация: 14.7.2008 Где: Владивосток. Репутация: нет Всего: 3 |
Всем спасибо.
![]() Так правильно ли я понял, что для передачи значений от скрипта скрипту надо использовать сессии? |
|||
|
||||
NewDima |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: 10 Всего: 12 |
Резюмирую вышесказанное:
1. если скрипты взаимодействуют в течении одного времени интерпритации, то ничего, кроме подключения модулей методами include/require, делать не нужно 2. если скрипты связаны только пользователем, который к ним обращается, то можно использовать сессию, либо помещать нужные параметры в строку адреса, и на последующих шагах анализировать установленный параметр |
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
||||
|
||||
Avaj |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 212 Регистрация: 14.7.2008 Где: Владивосток. Репутация: нет Всего: 3 |
Ипатьев, но здесь написано так:
|
|||
|
||||
youri |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 17.4.2004 Репутация: 6 Всего: 16 |
там не написано, что "для передачи значений от скрипта скрипту надо использовать сессии", там написано для хранения информации о пользователе. Например, возьмем твою идею и допустим, что таблицы называются notes_<id пользователя>. Тогда в сессии можно хранить id пользователя, а по id пользователя ты сможешь легко узнать имя таблицы. Можно было бы хранить имя таблицы в сессии, если не учитывать, что имя таблицы легко определяется по id и что под каждого пользователя отдельные таблицы не создают. Еще в сессии хранят список товаров, помещенных в корзину (в случае какого-нибудь электронного магазина) Для передачи значений от одной страницы к другой (а не от скрипта к скрипту) используются параметры запроса (то что после знака вопроса в ссылке, например) |
|||
|
||||
gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: -1 Всего: 17 |
а что делают эти скрипты?
можно демона написать на сокетах, share memory, mysql, серилизировать данные куда-то в файл на сервере Добавлено позже а что делают эти скрипты? можно демона написать на сокетах, share memory, mysql, серилизировать данные куда-то в файл на сервере |
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
Avaj, я не стал ничего писать, потому что к этому
собственно добавить нечего это как основополагающая статья в конституции SQL, которая правке не подлежит. если у тебя одинаковые данные, то они по определению должны находиться в одной таблице. нужно ведь всего лишь ввести одно дополнительное поле id_user и всё. мало того, определяя все записи в одну таблицу ты получаешь неисчислимые преимущества в виде сортировок, удобного поиска ключевых слов во всех блогах сразу, сравнения пользователей. наличие же отдельной таблицы не даёт вообще никаких преимуществ, и приэтом делает систему громозкой и совершенно не гибкой. как в управлении таблицами, так и в работе с данными |
|||
|
||||
Avaj |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 212 Регистрация: 14.7.2008 Где: Владивосток. Репутация: нет Всего: 3 |
Всем спасибо, разобрался.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |