我无法在getItems函数中转义PHP变量:
while($row = mysql_fetch_array( $data ))
{
echo "<div class='favorite'>";
echo "<div style='display: inline;'>".$row['Item']."</div>";
if ($row['UID'] = $uid) {
echo "<div id='unlock'>Info</div>";
} else {
echo "<div id='unlock' onclick='getItems('".$row['Item']."')'>Unlock</div>";
}
echo "</div>";
}
无论如何,当渲染(渲染单词?)时,当我在我的网站上看到它时,它会说:
onclick="getItems(" whatever')'
我做错了什么?
您可以在此处查看代码: http://www.chusmix.com/game/insert/get-items.php?user=19
答案 0 :(得分:4)
您的问题是您的属性值被单引号包围,但您也在javascript中使用单引号。
你必须在你的javascript中使用双引号。但是,由于整个字符串(在PHP中)被双引号括起来,因此您必须将它们转义。因此:
echo "<div id='unlock' onclick='getItems(\"".$row['Item']."\")' style='display: inline; float: right;'>Unlock</div>";
或者像这样:
echo "<div id='unlock' onclick='getItems(\"{$row['Item']}\")' style='display: inline; float: right;'>Unlock</div>";
澄清大括号的作用(来自the PHP docs):
复杂(卷曲)语法
这不称为复杂,因为语法很复杂,但是因为 它允许使用复杂的表达式。
带字符串的任何标量变量,数组元素或对象属性 可以通过此语法包含表示。简单地写一下 表达式与字符串外部的表达方式相同,并且 然后将其包装在{和}中。
为了进一步解释,我们假设我们有以下情况:
$name = 'Apple';
$sentence = "$names are my favorite fruit";
我想要的是:Apples are my favorite fruit
。但是,这不起作用。 PHP将改为寻找一个名为$names
的变量,当它找不到它时,它会抱怨。
所以,为了解决这个问题,我们可以用花括号包围我们的变量:
$name = 'Apple';
$sentence = "{$name}s are my favorite fruit";
大!现在,PHP将知道变量名称的结束位置以及字符串的开始位置。
旁注:您可能会考虑切换到双重引用您的属性,因为您现在的方式不是有效的xHTML(除非您不关心)。
答案 1 :(得分:3)
是的,您的报价存在问题。它应该是这样的:
echo "<div id='unlock' onclick='getItems(\"".$row['Item']."\");' style='display: inline; float: right;'>Unlock</div>";
问题在于,onclick
的开头引号和函数争论的引号必须是另一种引用。
这与html相比要容易得多,然后只需插入变量:
<div id="unlock" onclick="getItems('<?=$row['Item'];?>');" style="display: inline; float: right;">Unlock</div>
以这种方式做事而不是在可能的情况下回显HTML将节省大量的时间和混乱,并且您不必担心所有的报价转义
答案 2 :(得分:0)
或者像这样:
echo '<div id="unlock" onclick="getItems('."'".$row['Item']."'".')" style="display: inline; float: right;">Unlock</div>';
如果我必须这样做,它看起来像是:
<?php while(true) :?>
<div class="favorite">
<div style="display: inline;"><?php echo $row['Item'];?></div>
<?php if ($row['UID'] = $uid):?>
<div id="unlock">Info</div>
<?php else: ?>
<div id="unlock" onclick="getItems('<?php echo $row['Item']; ?>)">Unlock</div>
<?php endif;?>
</div>
<?php endwhile;?>
答案 3 :(得分:0)
onclick中的'
正在关闭onclick本身。将其更改为:
onclick='getItems(\"".$row['Item']."\")'
这样,在JS中,它使用不同类型的引用。
更好......你可以留下PHP,并且可以减少一些引用类型。
else { ?>
<div id='unlock' onclick='getItems("<?=$row['Item'];?>")' style='display: inline; float: right;'>Unlock</div>
<?php
}
答案 4 :(得分:0)
尝试以下方法。 修改:已更改以确保引号已正确转义
echo "<div id='unlock' onclick=\"getItems('{$nameArray[0]}')\" ></div>";