Php“echo”在“onmouseover”事件中无法正常工作

时间:2012-01-28 17:19:08

标签: php

我有这个代码应该从MySQL数据库中回显一些值。我使用完全相同的代码两次,并且代码的特定部分不能按预期工作。

我有一个DIV,可以在鼠标悬停时更改内容(使用$(this).html(''))。

基本上我们有类似的东西:

echo "<a href=\" event.php?id=".$donnees['event_ID']." \">";
echo "<div class=\"" ;
//here, check which category we have, and select the appropriate CLASS (DP_0, _1, _2, _3).
if ($donnees['event_category'] == 'universitaire') {
    echo "DP_0";
} else if ($donnees['event_category'] == 'sociol') {
    echo "DP_1";
} else if ($donnees['event_category'] == 'artiste') {
    echo "DP_2";
} else if ($donnees['event_category'] == 'aventurier') {
    echo "DP_3";
} else {
    echo "DP_0";
}
echo "\" id=\"".$donnees['event_ID']."\" onmouseover=\"$(this).html('";
echo "Institution: ".$donnees['event_institution']. "</br>";
echo "Association: ".$donnees['event_association']. "</br></br>";
echo "')\” onmouseout=\"$(this).html('";

echo $donnees['event_name'] . "</br></br>";
echo "Adresse: ".$donnees['event_adresse'] . "</br></br>";

if ($donnees['event_payant'] == '0') {
    echo "PAYANT"; //Works
    echo "<p>BLABLA</p></br'>"; // Works
    echo "<p style=\"background-color:red;\”>BLABLA</p></br>"; // doesn't work
}


echo "')\" sty1e=\" ";
//here, check which category we have, and select the appropriate background
if ($donnees['event_category'] == 'universitaire') {
    echo "background-image:url('images/universitaireCategory.png');";
} else if ($donnees['event_category'] == 'sociol') {
    echo "background-image:url('images/socialCategory.png');";
} else if ($donnees['event_category'] == 'artiste') {
    echo "background-image:url('images/artisteCategory.png');";
} else if ($donnees['event_category'] == 'aventurier') {
    echo "background-image:url('images/aventurierCategory.png');";
} else {
    echo "background-image:url('images/universitaireCategory.png');";
}
echo " \"> ";

我评论了奇怪的部分。如果我这样做:

echo "<p>BLABLA</p></br>"; // That code works fine

但:

echo "<p style=\"background-color:red;\">BLABLA</p></br>"; // doesn't work

只要我添加\"\"' '的内容,之后的所有内容都会被破坏。为什么呢?

我的代码后面的代码完全相同:

<div> <p style=\"background-color:red;\">BLABLA</p></br> </div>

3 个答案:

答案 0 :(得分:4)

一些事情。

  • 不要说“它不起作用”。请描述一下。我敢肯定,如果你的祖母叫你告诉你她的“电脑无法正常工作”,你就不得不提出一堆问题来解决它。

  • 您通常不应该像使用PHP代码一样生成Javascript。相反,编写一组JS,然后从PHP发送不同的 data (JSON,也许?)。它使调试更容易,代码更清晰,而且你可以从不同的来源提供JS - 你可以对Javascript进行单元测试!

  • 如果您放入JS的数据包含任何用户提供的输入,则您的代码很容易受到XSS攻击。如果event_name类似于!"--;;^$&\\\*$'#,该怎么办?你生成的JS在语法上是否正确?

  • 请勿使用style属性来避免它。请改用样式表和类。它使您的网站的调试,维护和重新设置更容易。

  • 您可以避免使用字符串周围的单引号来转义引号,因为在PHP中,任何一种引用都是有效的。请注意,变量不会在单引号字符串中进行插值。

  • </br>不是有效标记。试试<br />,这是有效的HTML和XHTML。

  • 您的echo声明没有任何问题。它将在输出文档中生成以下HTML:<p style="background-color:red;">BLABLA</p></br>。问题出在其他地方,但我没有足够的信息说明在哪里。很可能您生成的JS会抛出错误:查看Google Chrome中的开发人员控制台,并检查生成的Javascript是否存在因错误地将输入注入代码而导致的错误。然后,当问题出现时,按照我之前的建议编写一个JS函数,该函数从PHP获取 input ,而不是由PHP 编写的JS函数。 / p>

答案 1 :(得分:3)

不知何故,你的代码中出现了“卷曲的引用”:

echo "<p style=\"background-color:red;\”>BLABLA</p></br>";
//                                    ^^^

这会产生破碎的HTML。

<p style="background-color:red;\”>BLABLA</p></br>

将其替换为普通双引号:

echo "<p style=\"background-color:red;\">BLABLA</p></br>";

答案 2 :(得分:1)

我认为问题在于,有问题的html被封装在onmouseover=""中,PHP正在将\"作为"回显,并且生成的html类似于:

onmouseover="$(this).html('<p style="background-color:red">BLABLA</p></br>')"

因此,onmouseover实际上只等于"$(this).html('<p style="

要使其正常工作,您必须在代码的PHP Javascript部分中转义双引号。不幸的是我不知道该怎么做。

我设置了jsfiddle here,我希望能够证明我的观点。