Здравствуйте! Я работаю над админкой, которая по запросу создает новый PHP файл и передает в него информацию. Как можно передать переменную, если требуется использовать одинарные кавычки (''), но также необходимо обернуть переменную в одинарные кавычки? <br/> <br/> <pre><code class="php">$myfile = fopen("../news/$latin.php", "w") or die("Unable to open file!"); $txt = '<?php $db = new PDO(dsn:"mysql:host=localhost;dbname=BorkiFestival_site", username:"root", password: "root"); $info = []; $str = pathinfo(__FILE__, PATHINFO_FILENAME); // осторожно! необходима экранизация if($query = $db->query("SELECT * FROM `news_cards` WHERE name_src LIKE ' $str'")){ $info = $query->fetchAll(fetch_style: PDO::FETCH_ASSOC); }else{ print_r($db->ErrorInfo()); } foreach($info as $data):?>' fwrite($myfile, $txt); fclose($myfile);</code></pre>
Чтобы передать переменную и обернуть её в одинарные кавычки в PHP, вы можете использовать двойные кавычки для всего текста, а внутри них использовать одинарные кавычки, когда это необходимо. В таком случае вы сможете без проблем вставлять переменные PHP. Вот как можно это сделать в вашем примере: ```php $myfile = fopen("../news/$latin.php", "w") or die("Unable to open file!"); $txt = "<?php \$db = new PDO('mysql:host=localhost;dbname=BorkiFestival_site', 'root', 'root'); \$info = []; \$str = pathinfo(__FILE__, PATHINFO_FILENAME); // осторожно! необходима экранизация if(\$query = \$db->query(\"SELECT * FROM `news_cards` WHERE name_src LIKE '$str'\")){ \$info = \$query->fetchAll(PDO::FETCH_ASSOC); } else { print_r(\$db->ErrorInfo()); } foreach(\$info as \$data): ?>"; fwrite($myfile, $txt); fclose($myfile); ``` Обратите внимание на следующие моменты: 1. Я использовал двойные кавычки для строки `$txt`, чтобы вставить переменные, такие как `$str`, передавая их значение. 2. Внутри строки я использовал экранирование символа `$` с помощью обратной косой черты `\`, чтобы PHP не интерпретировал его как начало переменной, если она не должна быть подставлена в ходе выполнения. Так как это будет записано в файл, мы экранируем всё, кроме частей, где мы хотим, чтобы переменные были интерпретированы. 3. Также я использовал одинарные кавычки для параметров PDO, чтобы избежать конфликтов с двойными кавычками. Этим образом вы сможете создать файл с нужным вам PHP-кодом, в котором будет использоваться переменная и при этом корректно оформлены кавычки.
Перед кавычкой ставить обратный слэш
if($query = $db->query("SELECT * FROM \`news_cards\` WHERE name_src LIKE \`$str\'")){
Первый вариант: использовать ' вместо ".
Второй вариант: экранирование.
Способов сделать это -- великое множество, но возникает вопрос, "ЗАЧЕМ?"
Как говаривал классик, "не нужна тебе такая админка, брат". Способ вредный, нерациональный, неудобный.
Вам нужно создать ОДИН файл, например news.php в котором будет только тот код, который вы экранируете.
И затем, просто подставлять в SQL запрос вашу переменную $str с уникальным slug новости.
В браузере будет выглядеть так:
site.ru/news.php?slug=pervomai
В php-скрипте получаете slug 'pervomai' (как и любые другие параметры адресной строки) через массив $_GET;
А именно
$str = $_GET['slug'];
В SQL пишете примерно
SELECT ...... WHERE name_src LIKE '$_GET["slug"]'
В итоге: один файл и хоть тысячу новостей через него можно посмотреть.
P.S Все, что получается из массива $_GET, нужно экранировать и обрабатывать, дабы не подставиться под SQL-инъекцию. Загуглите потом "prepared statements в PDO"
sprintf
Можно обернуть в функцию, а требуемую переменную дать аргументом
Используйте prepared statements. И пересмотрите архитектуру, генерировать код нужно только для очень специфичных задач, и уж точно не для того, чтобы "показать новости". Посмотрите на свой код, вы там ничего не генерируете, у вас статичный код и просто меняются данные.