Проблемы с eval() и $
Столкнулся с такой проблемой
нужно с помощью функции eval() выполнить строку
$class1=new dok();
если пишу непосредственно в программе
eval("\$class1=new dok();");
то работает, но у меня эти строки хранятся в базе(MySQL)
а при вызове переменной результата запрос из базы в которой такая же строка
eval($rezult);
PHP ругается на символ \ в eval()
Может кто сталкивался подскажите пожалуйста
Заранее всем спасибо..
По идее и правильно делает, что ругается, т.к. строка воспринимается в разных контекстах:
1) eval("\$class1=new dok();"); - \ экранирует $, ввод строки ручной
2) eval($rezult) - здесь экранирования не надо, т.к. строка получена из БД, а не вводится вручную в скрипте.
Т.е. в первом случае будет выполнена корректно команда, а во втором - \ будет физически находится, а это ошибка синтаксиса.
Предполагаю что проблема в этом. Также, неплохо было бы текст ошибки указывать, ага. Не первый день же на форуме.
А ещё:
1) eval использовать плохо
2) не $rezult, а $result
И часто в JavaScript проблемы с eval() с "$" ? :) За всех не говорите.
По идее и правильно делает, что ругается, т.к. строка воспринимается в разных контекстах:
1) eval("\$class1=new dok();"); - \ экранирует $, ввод строки ручной
Но эта строка написанная в программе работает
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
Естественно она будет работать. Потому что \ в строке, введенноего в программе отличается от \ указанного в результате БД.
В первом случае - это экранирование $, во втором случае - это просто символ \, он ничего не экранирует. Потому и возникает ошибка во втором случае, описанная явно в ругательстве.
В БД строка как раз со слэшем, иначе не было бы ошибки.
$eval1 = "\$class1=new dok();"; // вводится руками в скрипте
$eval2 = '\$class1=new dok();'; // эквивалентно тому, что хранится в БД
$eval3 = '$class1=new dok();'; // то же, что и выше, только без слэша
echo($eval1);
echo($eval2);
echo($eval3);
eval($eval1); // нормально работает
eval($eval2); // ошибка (которая возникает у вас)
eval($eval3); // а этот вариант работает норм
Как вы в таком случае вообще работаете, если не знаете английского языка? Сочувствую. То же самое на русском:
http://www.php.su/functions/?stripslashes
если дописываю в БД слэш то ругается
http://www.php.su/functions/?stripslashes
Понимаю но не полностью так и мучаюсь
$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 которую я упомянул выше
В БД вставляю (без слэша) с помощью mysql_escape_string
eval делаю без stripslashes
не работает
в БД смотрю с помощью PhpMyAdmin слэша нет
давайте плясать от того как вытащить и БД и чтобы заработало
Если так как я показал не работает - значит ошибка в чем-то другом. Показывайте код.
только
$class1=new dok();
вставляю в скрипт так
eval($result); не работает
eval(stripslashes($result)); не работает
а если просто в скрипт пишу eval("\$class1=new dok();"); работает
что такое $result ? как вы его получаете?
$q = mysql_query("SELECT * FROM mytable WHERE ....");
$f =mysql_fetch_array($q);
$result=$f['php'];
Если возникает так же ошибка, то приводите весь код целиком с примером сохранения данных в БД, выемкой и т.д.
Выдаёт
$class1=new dok();
недостаточно ?
но PhpMyAdmin показывает в содержимом поля только
$class1=new dok();
экземпляр класса создаётся но создаётся внутри метода другово класса и поэтому не виден в общем скрипте
теперб думаю как сделать экземпляр класса видимым во всей программе,
Прошу ещё раз прощенья что ввёл всех в заблуждение