Эхо 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;
?>