Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как вставить код в переменную php?

Кирилл Орлов Ученик (100), закрыт 5 лет назад
Есть такой код:
$text = '$cms->db->query("UPDATE users SET `password` = '$pass' WHERE `email` = '$_POST[email]'")'; (запрос должен быть именно в одинарных кавычках)

Код не работает. Причину знаю - неправильно построенный запрос. Но вот решение никак не могу найти. Помогите пожалуйста.
Лучший ответ
Демиен Мыслитель (5538) 5 лет назад
> $text = '$cms->db->query("UPDATE users SET `password` = '$pass' WHERE `email` = '$_POST[email]'")';
Господи спаси и сохрани. Это же надо додуматься. Как оно тебе заработает, если $text это строка в ОДИНАРНЫХ кавычках. Туда даже значения не подставятся. А что означает твоё `email` = '$_POST[email]' -- господа хацкеры, вкалывайте мне туда что угодно. Я раньше так делал, но я перед этим строку экранировал, убирал все теги и прочий мусор. Ты даже это не удосужился сделать.

$text = $cms->db->query("UPDATE users SET `password` = '$pass' WHERE `email` = '$_POST[email]'"); -- если сделаешь так, что в $text придёт либо true, либо false, в зависимости от итога, а вот САМО действие там НЕЛЬЗЯ хранить -- оно сразу выполняется.

https://www.php.net/manual/ru/book.pdo.php, https://www.php.net/manual/ru/pdo.prepare.php, https://www.php.net/manual/ru/security.database.sql-injection.php и https://www.php.net/manual/ru/language.types.string.php -- это нужно всё прочитать.

P.S. Поигрался я с твоим кодом и спокойно вытащил данные админа при помощи простейшей sql-инъекции, так что безопасность твоего кода равна нулю.
Сигизмунд СигизмундовичИскусственный Интеллект (158502) 5 лет назад
как я понимаю `...` используется только для вызова внешней программы? так описано в подлиннике 7 версии, если я не прав дай ссылку, на оф. сайте не нашел упоминания.
Демиен Мыслитель (5538) Просмотрел документацию, обыскал первые 10 страниц гугла, но о них вообще никто не говорит. Я точно знаю, они используются в SQL запросах для обозначения названий таблиц и их колонок (при попытке заключить значение в запросе в `такие` кавычки, выдаётся ошибка, что такой колонки нет), а насчёт остального... понятия не имею.
Остальные ответы
Андрей Панарин Искусственный Интеллект (242405) 5 лет назад
Интересно, для чего может потребоваться хранить PHP-код в переменной.
Кирилл ОрловУченик (100) 5 лет назад
Для того, чтобы в созданный через fopen файл, вставился этот php-код
Андрей Панарин Искусственный Интеллект (242405) Чтобы не иметь нужды экранировать кавычки, можно указать строку с синтаксисом Heredoc: https://php.net/manual/ru/language.types.string.php#language.types.string.syntax.heredoc
Похожие вопросы