Задать вопрос

Как передать переменную?

Здравствуйте! Работаю над админкой, она по запросу создает новый 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);
  • Вопрос задан
  • 2126 просмотров
Подписаться 2 Средний 18 комментариев
Решения вопроса 1
@Vitsliputsli
Используйте prepared statements. И пересмотрите архитектуру, генерировать код нужно только для очень специфичных задач, и уж точно не для того, чтобы "показать новости". Посмотрите на свой код, вы там ничего не генерируете, у вас статичный код и просто меняются данные.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 5
@SidVisceos
Первый вариант: использовать ' вместо ".
Второй вариант: экранирование.
Ответ написан
Комментировать
@Primoos
Перед кавычкой ставить обратный слэш
if($query = $db->query("SELECT * FROM \`news_cards\` WHERE name_src LIKE \`$str\'")){
Ответ написан
Комментировать
@Fourgotten
Способов сделать это -- великое множество, но возникает вопрос, "ЗАЧЕМ?"

Как говаривал классик, "не нужна тебе такая админка, брат". Способ вредный, нерациональный, неудобный.

Вам нужно создать ОДИН файл, например 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"
Ответ написан
Комментировать
@necrodeflorator
sprintf
Ответ написан
Комментировать
@Dredlock
Можно обернуть в функцию, а требуемую переменную дать аргументом
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы