Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблемы с eval() и $

345
08 апреля 2011 года
vadim_k
312 / / 01.08.2006
Всем привет !
Столкнулся с такой проблемой

нужно с помощью функции eval() выполнить строку

$class1=new dok();

если пишу непосредственно в программе

eval("\$class1=new dok();");

то работает, но у меня эти строки хранятся в базе(MySQL)
а при вызове переменной результата запрос из базы в которой такая же строка

eval($rezult);

PHP ругается на символ \ в eval()

Может кто сталкивался подскажите пожалуйста

Заранее всем спасибо..
244
08 апреля 2011 года
UAS
2.0K / / 19.07.2006
Так eval в php? Вы язык указывайте, а то я половину поста думал про JS.
По идее и правильно делает, что ругается, т.к. строка воспринимается в разных контекстах:
1) eval("\$class1=new dok();"); - \ экранирует $, ввод строки ручной
2) eval($rezult) - здесь экранирования не надо, т.к. строка получена из БД, а не вводится вручную в скрипте.
Т.е. в первом случае будет выполнена корректно команда, а во втором - \ будет физически находится, а это ошибка синтаксиса.

Предполагаю что проблема в этом. Также, неплохо было бы текст ошибки указывать, ага. Не первый день же на форуме.
А ещё:
1) eval использовать плохо
2) не $rezult, а $result
4
08 апреля 2011 года
mike
3.7K / / 01.10.2002
Цитата: UAS
Так eval в php? Вы язык указывайте, а то я половину поста думал про JS.


И часто в JavaScript проблемы с eval() с "$" ? :) За всех не говорите.

244
08 апреля 2011 года
UAS
2.0K / / 19.07.2006
Так я, как бэ, и сказал про себя.
345
08 апреля 2011 года
vadim_k
312 / / 01.08.2006
Цитата: UAS
Так eval в php? Вы язык указывайте, а то я половину поста думал про JS.
По идее и правильно делает, что ругается, т.к. строка воспринимается в разных контекстах:
1) eval("\$class1=new dok();"); - \ экранирует $, ввод строки ручной



Но эта строка написанная в программе работает

Цитата: UAS

2) eval($rezult) - здесь экранирования не надо, т.к. строка получена из БД, а не вводится вручную в скрипте.
Т.е. в первом случае будет выполнена корректно команда, а во втором - \ будет физически находится, а это ошибка синтаксиса.



А строка из БД (без \) не работает экземпляр класса не создаётся


Предполагаю что проблема в этом. Также, неплохо было бы текст ошибки указывать, ага. Не первый день же на форуме.
А ещё:
1) eval использовать плохо
2) не $rezult, а $result


Ругается вот так
Unexpected character in input: '\' (ASCII=92) state=1 in C:\class_cms.php(196) : eval()'d code on line 3

345
08 апреля 2011 года
vadim_k
312 / / 01.08.2006
Спасибо конечно но а Англицком не силён..
244
08 апреля 2011 года
UAS
2.0K / / 19.07.2006
Цитата:
Но эта строка написанная в программе работает


Естественно она будет работать. Потому что \ в строке, введенноего в программе отличается от \ указанного в результате БД.
В первом случае - это экранирование $, во втором случае - это просто символ \, он ничего не экранирует. Потому и возникает ошибка во втором случае, описанная явно в ругательстве.

Цитата:
А строка из БД (без \) не работает экземпляр класса не создаётся


В БД строка как раз со слэшем, иначе не было бы ошибки.

Код:
class dok {}

$eval1 = "\$class1=new dok();"; // вводится руками в скрипте
$eval2 = '\$class1=new dok();'; // эквивалентно тому, что хранится в БД
$eval3 = '$class1=new dok();'; // то же, что и выше, только без слэша

echo($eval1);
echo($eval2);
echo($eval3);

eval($eval1); // нормально работает
eval($eval2); // ошибка (которая возникает у вас)
eval($eval3); // а этот вариант работает норм
13
08 апреля 2011 года
RussianSpy
3.0K / / 04.07.2006
Цитата: vadim_k
Спасибо конечно но а Англицком не силён..



Как вы в таком случае вообще работаете, если не знаете английского языка? Сочувствую. То же самое на русском:

http://www.php.su/functions/?stripslashes

345
08 апреля 2011 года
vadim_k
312 / / 01.08.2006
В БД у меня без слэша и не работает

если дописываю в БД слэш то ругается
345
08 апреля 2011 года
vadim_k
312 / / 01.08.2006
Цитата: RussianSpy
Как вы в таком случае вообще работаете, если не знаете английского языка? Сочувствую. То же самое на русском:

http://www.php.su/functions/?stripslashes



Понимаю но не полностью так и мучаюсь

13
08 апреля 2011 года
RussianSpy
3.0K / / 04.07.2006
Перед записью в базу использовать mysql_real_escape_string()
 
Код:
$str = '$var = new Obj();';
$str = mysql_real_escape_string($str);

mysql_query("INSERT INTO table1 (mytext) VALUES ('$str')");


Потом после получения данных, которые записаны таким образом, никаких слешей в них наблюдаться не будет.
http://www.php.su/functions/?f=mysql_real_escape_string&choice=info


Ежели вы только достаете данные, то применять stripslashes которую я упомянул выше
 
Код:
eval(stripslashes($result));
345
08 апреля 2011 года
vadim_k
312 / / 01.08.2006
Чёть запутался

В БД вставляю (без слэша) с помощью mysql_escape_string

eval делаю без stripslashes

не работает

в БД смотрю с помощью PhpMyAdmin слэша нет

давайте плясать от того как вытащить и БД и чтобы заработало
13
08 апреля 2011 года
RussianSpy
3.0K / / 04.07.2006
Еще раз ВНИМАТЕЛЬНО прочитайте мое последнее сообщение. Третий раз вам кидать ссылку на одну и ту же функцию?

Если так как я показал не работает - значит ошибка в чем-то другом. Показывайте код.
345
09 апреля 2011 года
vadim_k
312 / / 01.08.2006
Да какой там код в БД храниться
только
$class1=new dok();

вставляю в скрипт так

eval($result); не работает

eval(stripslashes($result)); не работает

а если просто в скрипт пишу eval("\$class1=new dok();"); работает
274
09 апреля 2011 года
Lone Wolf
1.3K / / 26.11.2006
Код в студию!
что такое $result ? как вы его получаете?
345
09 апреля 2011 года
vadim_k
312 / / 01.08.2006
$result - это результат выборки строки из БД


$q = mysql_query("SELECT * FROM mytable WHERE ....");
$f =mysql_fetch_array($q);
$result=$f['php'];
244
09 апреля 2011 года
UAS
2.0K / / 19.07.2006
У меня такое чувство, что автор нас либо где-то на*бывает, либо у него код кривой.
Если возникает так же ошибка, то приводите весь код целиком с примером сохранения данных в БД, выемкой и т.д.
13
09 апреля 2011 года
RussianSpy
3.0K / / 04.07.2006
В этот код что вы привели вставьте var_dump($f); после строки $f =mysql_fetch_array($q); и скопируйте нам сюда результат выполнения
345
09 апреля 2011 года
vadim_k
312 / / 01.08.2006
А то что echo $result ;

Выдаёт

$class1=new dok();

недостаточно ?
13
09 апреля 2011 года
RussianSpy
3.0K / / 04.07.2006
Если вы хотите, чтобы вам помогли - делайте то, что вас просят.
345
09 апреля 2011 года
vadim_k
312 / / 01.08.2006
Я не могу скопировать в ответ вывод var_dump() он на другом компе,
но PhpMyAdmin показывает в содержимом поля только

$class1=new dok();
13
09 апреля 2011 года
RussianSpy
3.0K / / 04.07.2006
Ну значит как будете у того компа так и сделайте. Мы не можем вам помочь пока не поймем как выглядит ваш код и какие данные приходят из БД.
345
09 апреля 2011 года
vadim_k
312 / / 01.08.2006
Простите дурака понял в чём проблема

экземпляр класса создаётся но создаётся внутри метода другово класса и поэтому не виден в общем скрипте
теперб думаю как сделать экземпляр класса видимым во всей программе,
Прошу ещё раз прощенья что ввёл всех в заблуждение
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог