Эхо-предупреждение JavaScript о значении массива PHP на кнопке HTML?


Я пытаюсь использовать PHP для отображения набора кнопок (покупка и продажа) в игре по торговле акциями. Кнопки в конечном итоге будут иметь обработчик событий onclick=, который вызывает функцию JavaScript для заполнения некоторых полей в форме, но я просто пытаюсь получить предупреждение() с одним фрагментом данных для работы. Я просто не могу получить результаты из своего заявления 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"];

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

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

Спасибо!

Author: Kyle Carlson, 2012-03-20

3 answers

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

<?php
echo <<<EOT
    <button id="buy" class="btn btn-primary btn-small" onclick="alert('{$stockInfo[0]["name"]}');">Buy</button>
EOT;
?>
 5
Author: jeroen, 2012-03-19 21:28:57

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

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

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

json_encode по сути, любая переменная PHP (кроме ресурсов) может быть сброшена непосредственно в код JavaScript.

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

 1
Author: Niet the Dark Absol, 2012-03-20 20:33:06
echo <<<EOT
    <button id="buy" class="btn btn-primary btn-small" onclick="alert({$stockInfo[0]["name"]});">Buy</button>
EOT;
?>
 0
Author: ncremins, 2012-03-19 21:27:08