2012-01-28 40 views
0

我有這個代碼應該回顯MySQL數據庫中的一些值。我使用完全相同的代碼兩次,並且該代碼的特定部分不能按預期工作。Php「echo」無法正常使用「onmouseover」事件

我有一個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> 
+2

當您執行查看源代碼時,您呈現的HTML看起來像什麼? – 2012-01-28 17:21:23

+0

生成的HTML看起來像什麼? – 2012-01-28 17:21:43

回答

1

我認爲問題出在事實問題的HTML封裝在onmouseover="" PHP是呼應了\""和生成的HTML是是這樣的:

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

結果,onmouseover實際上只等於"$(this).html('<p style="

要使其起作用,您必須在PHP代碼中的PHP Javascript部分中避免使用雙引號。不幸的是,我不知道該怎麼做。

我成立了一個jsfiddle here,我希望證明我的觀點。

+1

雙引號是'\\\「'。這就是」PHP,打印反斜槓然後是引號「。這會導致JS看到一個逃脫的報價 – Borealid 2012-01-28 21:27:36

+0

@magicalex真的很有用!我設法通過採用另一種解決方案來解決我的問題(改變鼠標懸停的範圍而不是整個Div - cl.ly/DknB)我很好奇,並試圖用我的舊代碼,這實際上工作!將在未來使用!謝謝! – 2012-01-30 15:40:09

+0

不客氣。 – magicalex 2012-01-30 16:52:10

4

有幾件事情。

  • 不要說「它不工作」。請描述如何。我敢肯定,如果你的祖母打電話告訴你她的「電腦無法工作」,那麼你不得不問一大堆問題來解決它。

  • 您通常不應該像使用PHP代碼一樣生成Javascript。相反,寫一組JS,然後從PHP發送不同的數據(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中取出輸入,而不是由PHP編寫的寫入的JS函數。

+0

這些是更多評論/建議,而不是實際的答案。 – j08691 2012-01-28 17:30:12

+0

@ j08691我試圖寫出對未來互聯網用戶閱讀本頁面最有用的答案。許多人在不瞭解他們的情況下複製實例 - 如果我只是說「問題是X」,他們會很樂意跟隨作者的腳步,很快遇到同樣的問題。 – Borealid 2012-01-28 17:34:22

+0

我認爲這是一個很好的帖子,遵循這個建議和重構可能會解決問題,如果它實際上不是由於錯字導致的......但我同意它在SO上行走了被認爲是「答案」的線。 – 2012-01-28 17:37:49

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>"; 
+0

啊!我看着他張貼的截圖。在他的字體中,引號字符之間沒有明顯區別... – Borealid 2012-01-28 17:39:51

+0

這可能不是這樣(示例2沒有顯示它),但我不知道除非隨機捲曲引用會在結尾的帖子中出現它在那裏開始。塞拉芬:下一次「查看HTML源代碼」 - 問題很快就會被發現。 – 2012-01-28 17:43:03

+0

Oups ok!謝謝您的幫助!甚至沒有想到發佈用戶的生成的HTML!在我這邊,沒有引用引用,它是在將我的代碼移植到stackoverflow時完成的! (我首先發布了屏幕截圖,有人花時間編輯我的原始帖子) – 2012-01-30 15:52:54