![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Frozen_Coyote |
|
||||||||||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 20.9.2007 Репутация: нет Всего: нет |
Приветствую!
Сейчас постараюсь сформулировать проблему значит так: есть файл second.php. Его нутро следующее без (<? и ?> кстати, просто текстовый файл как бы)
все. больше ничего. это просто запрос к базе. Есть также файл index.php со следующийм нутром
так вот: в финальном файле $MysqlCode после eval так и осталась $DataField вместо ожидаемого мною ЗНАЧЕНИЯ $DataField т.е. вместо
я получаю все ту же
но при этом если я в файле second.php заменю запрос к базе на просто
то в таком случае замена происходит нормально, получаю
в более сложной строке всё: евал перестает производить подстановку вместо имени его значения. Скажите пожалуйсьа, как мне сделать, чтобы евал нормально заменял все имена переменных в строке на их значения? preg_replace неспортивно, конечно же.
Это сообщение отредактировал(а) skyboy - 16.11.2007, 16:11 |
||||||||||||||
|
|||||||||||||||
| flashaa |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 19 Всего: 25 |
eval() выполняет определенный код,
в данном случае вот этот
Но она ни коим образом не влияет на свой аргумент. Да и зачем? При каждом обращении к своей строке "SELECT *, DATE_FORMAT(test_data_data, '%d.%m.%Y') AS FDate FROM $tablename ORDER BY test_data_data DESC" ты будешь получать уже результат подстановки. |
|||
|
||||
| kasmanaft |
|
||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 16.11.2007 Репутация: 1 Всего: 2 |
Нуну.. А eval() спрортивно, да? Попробуйте так:
Выполнит тот, который в нее передать. Передали "\$MysqlCode=\"$MysqlCode\";" - выполнит его.
То есть? Это сообщение отредактировал(а) kasmanaft - 16.11.2007, 16:30 |
||||||||
|
|||||||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
что это значит? если тебе просто вывести - почему сразу не вывести $MysqlCode? Если выполнить - почему бы просто не выполнить?
У меня все работает, если в eval не плодить кавычки на кавычках. В противном случае, одинарное экранирование при выполнении кода eval убирается и получается наложение двойных кавычек. |
|||
|
||||
| Frozen_Coyote |
|
||||||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 20.9.2007 Репутация: нет Всего: нет |
Добавлено через 5 минут и 12 секунд версия пхп какая? 5? или 4+? в 4+ однозначно не работает. а если убрать эти, как ты говоришь "кавычки на кавычках" перестает работать даже упрощенный, указанный мною выше, вывод
вмето него тогда выходит изначальное
|
||||||||||
|
|||||||||||
| kasmanaft |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 16.11.2007 Репутация: 1 Всего: 2 |
Да, вариатнов не много. Я бы использовал обычную str_replace(). А в шаблоне бы использовал не php переменные, а что-то вроде "{DATAFIELD}". Моё "Попробуйте так" попробовали? Да и в 5 работать не будет. Тут различий между версиями принципиальных нет. Чтобы не было "наложения двойных кавычек" я у себя в примере применил addslashes().. |
|||
|
||||
| HotHead |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 26.10.2007 Репутация: 3 Всего: 4 |
Frozen_Coyote, если вы собрались хранить в таком виде исключительно запросы к БД, то почему бы их не хранить без mysql_query? Т.е. хранить строку запроса. Вместо переменной ставить %s, а потом пропускать строку через sprintf($MysqlCode, $DataField). Т.е. конечный код будет типа:
Правда не знаю насколько вам понравится такой метод. Проценты придётся делать двойными, чтоб sprintf не наформатировал лишнего, а цифрами после процента указывать, какой аргумент подставлять. И ещё указывать чем является аргумент ($s - строка). Но вообще sprintf очень удобен для подобных задач. |
|||
|
||||
| Frozen_Coyote |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 20.9.2007 Репутация: нет Всего: нет |
ну Ваш метод конечно хорош, но применяя сторонние воздействия тогда уж регулярки несокрушимы: прег реплэйс спасет от чего угодно! мне то хотелось поянть, может я неправильно евал долбаю, что он мне некорректно обрабатывает )) а так - я регэкспами любую строку-переменную раздолбаю как хочу )) но спасибо все равно Добавлено через 7 минут и 4 секунды Вы знаете - интересное кино! именно мой пример - упрощенный - заработал нормально. Но как только я "навернул" код внутри подгружаемого в переменную файла поболее - т.е. с иф-ами елсасми - опять таже канитель! Притом поверхностный анализ намекает на то, что именно вложение переменной внутри строки - неважно - запроса к базе, или простой конкатенации строк - срфзу дает негативный эффект - ну в смысле вместо значения переменной выводит имя ..Прритом применимо сразу ко всему коду, где эта перменная задействована, а не к этому конкретному участку. Мдас.. Наверно какие то особености я не знаю |
|||
|
||||
| kasmanaft |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 16.11.2007 Репутация: 1 Всего: 2 |
Что-то слабо верится.. Эту строку "eval('$MysqlCode = stripslashes("' . addslashes($MysqlCode) . '");');" никак не меняете? |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |