Эхо JavaScript оповещение о значении массива PHP на кнопке HTML?

Я пытаюсь использовать PHP для отображения набора кнопок (покупка и продажа) в игре на бирже. В конечном итоге кнопки будут иметь обработчик события onclick=, который вызывает функцию JavaScript для заполнения некоторых полей в форме, но я просто пытаюсь заставить alert() работать с одним фрагментом данных. Я просто не могу получить результаты из моего оператора echo, чтобы правильно распечатать предупреждение, поэтому оно даже не срабатывает. Я также использовал print_r ($stockInfo), чтобы убедиться, что мой массив правильно заполнен тестовыми данными.

Вот мой массив:

$stockInfo = array(
    array('name' => 'Company 1', 'description' => 'Description 1', 'price' => '100', 'yield' => '.05'),
    array('name' => 'Company 2', 'description' => 'Description 2', 'price' => '89', 'yield' => '.06'),
    array('name' => 'Company 3', 'description' => 'Description 3', 'price' => '110', 'yield' => '.03')
);

И мой PHP-код, который пытается сгенерировать кнопку:

<?php
echo <<<EOT
    <button id="buy" class="btn btn-primary btn-small" onclick="alert('$stockInfo[0]["name"]');">Buy</button>
EOT;
?>

Результат этого кода:

<button id="buy" class="btn btn-primary btn-small" onclick="alert('Array["name"]');">Buy</button>

Я просто не могу понять, почему я не могу получить даже простую тревогу. Бег:

echo $stockInfo[0]["name"];

Правильно выводит "Company 1", но он не печатает этот текст в аргументе alert().

Я читал Stackru, много веб-статей и экспериментировал в течение последнего дня, и я просто не могу понять это. Если кто-то может оказать какую-либо помощь, я был бы очень признателен.

Спасибо!

3 ответа

Решение

Чтобы использовать переменные в синтаксисе heredoc, вы должны заключить их в фигурные скобки:

<?php
echo <<<EOT
    <button id="buy" class="btn btn-primary btn-small" onclick="alert('{$stockInfo[0]["name"]}');">Buy</button>
EOT;
?>

В идеале, вы не хотите помещать переменные прямо в ваш вывод, потому что если есть только один ' в этой строке ваш JavaScript облажается.

Вместо этого, избегайте обеих проблем, не используя HEREDOC и используя правильный метод:

echo "<button id=\"buy\" class=\"...\"
   onclick=\"alert(".htmlspecialchars(json_encode($stockInfo[0]['name'])).");\">Buy</button>";

json_encode фактически делает любую PHP-переменную (кроме ресурсов) способной быть выгруженной непосредственно в код JavaScript.

htmlspecialchars делает результат безопасным для использования в атрибуте HTML.

echo <<<EOT
    <button id="buy" class="btn btn-primary btn-small" onclick="alert({$stockInfo[0]["name"]});">Buy</button>
EOT;
?>
Другие вопросы по тегам