Эхо JavaScript оповещение о значении массива PHP на кнопке HTML? - PullRequest
4 голосов
/ 20 марта 2012

Я пытаюсь использовать 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 ().

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

Спасибо!

Ответы [ 3 ]

5 голосов
/ 20 марта 2012

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

<?php
echo <<<EOT
    <button id="buy" class="btn btn-primary btn-small" onclick="alert('{$stockInfo[0]["name"]}');">Buy</button>
EOT;
?>
2 голосов
/ 20 марта 2012

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

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

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

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

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

0 голосов
/ 20 марта 2012
echo <<<EOT
    <button id="buy" class="btn btn-primary btn-small" onclick="alert({$stockInfo[0]["name"]});">Buy</button>
EOT;
?>
...