我试图在股票交易游戏中使用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"];
正确打印&#34;公司1&#34;,但它不会在alert()的参数中打印该文本。
我已经阅读了Stackoverflow,很多网页文章,并在过去的一天进行了实验,我无法弄清楚这一点。如果有人能提供任何帮助,我非常感激。
谢谢!
答案 0 :(得分:5)
要在heredoc syntax中使用变量,必须在它们周围加上大括号:
<?php
echo <<<EOT
<button id="buy" class="btn btn-primary btn-small" onclick="alert('{$stockInfo[0]["name"]}');">Buy</button>
EOT;
?>
答案 1 :(得分:2)
理想情况下,您不希望将变量直接放入输出中,因为如果该字符串中只有一个'
,那么您的JavaScript就会搞砸。
相反,不使用HEREDOC并使用正确的方法来避免这两个问题:
echo "<button id=\"buy\" class=\"...\"
onclick=\"alert(".htmlspecialchars(json_encode($stockInfo[0]['name'])).");\">Buy</button>";
json_encode
本质上可以将任何PHP变量(资源除外)直接转储到JavaScript代码中。
htmlspecialchars
可以在HTML属性中安全地使用结果。
答案 2 :(得分:0)
echo <<<EOT
<button id="buy" class="btn btn-primary btn-small" onclick="alert({$stockInfo[0]["name"]});">Buy</button>
EOT;
?>