2012-02-25 24 views
2

我的第一篇文章在這裏。我有一個mysql表, - InnoDB - latin1-bin 大約有300行/ 9列。這是一個合唱庫,所以大多數列都是varchar,除了自動遞增的鍵索引列。很像一本書集合;標題,作者,作曲家等mysql結果在這裏被截斷,但不存在

在CMS中有兩種類型的視圖,列表視圖和記錄視圖。它們非常像桌面應用程序中的典型列表和記錄視圖,例如Lotus Approach或MS Access。

列表視圖建立在包含標題(th),行(tr)和數據(td)的表上。每頁30個結果。記錄視圖建立在文本輸入上,可以修改數據,創建/刪除記錄或搜索記錄,並且一次只顯示一條記錄。

問題是在列表視圖中包含字幕(雙引號字符串)的標題不會被截斷,並且數據完美顯示(來自「聖塞西莉亞彌撒」的Santus和Bendictus)。

echo "<td class='whiteData'>$row[TITLE]</td>"; 

然而,在文本輸入相同的代碼無法正常工作: 允許轉義字符,代碼更改爲:

echo "<input type='text' name='title' id='title' value= \"$row[TITLE]\" style='width:390px; margin-right:150px; maxlength:75; margin-top:15px' />"; 

產量「Santus和本尼迪塔斯從」。請記住,第一個代碼片段來自索引視圖,第二個代碼片段來自瀏覽/編輯視圖。我試過其他組合如:

...'$row[TITLE]' or $row["TITLE"] or $row['TITLE'] 

最後兩個語句中的任何一個拋出php錯誤,只是殺死頁面。帶雙引號的轉義字符產生一切直至雙引號。用單引號括住這個表達可以糾正這個問題,但是隨後會在標題「上帝的奇妙的愛」中產生另一個問題,在這個標題中,它被截斷爲撇號。同樣,問題只存在於記錄視圖(文本輸入)上,而不存在於表格上(列表視圖)。

我的問題:爲什麼行爲上的差異?數據不會被查詢截斷。我知道我可以簡單地指導用戶不要使用雙引號字符串,這似乎解決了問題。但我只是覺得好奇。

希望我沒有遺漏任何東西。第一篇文章不允許我張貼圖片,所以我希望沒有任何內容不存在。

謝謝。

+0

考慮添加更多代碼(視圖函數/文件和控制器)。也許controll不會傳遞這些數據,或者它會通過一個名爲$ row的變量傳遞它。 – 2012-02-25 17:53:53

+0

只是嘗試了一個普通的舊回聲,而不是一個輸入和工作正常,但它仍然在文本輸入截斷。 – jazcam 2012-02-25 18:57:21

回答

0

我不知道爲什麼會發生這種情況,但是您總是可以使用正則表達式來解析值並在您的視圖中轉義任何顯眼的字符。

+0

確定添加了這個:$ temp = $ row [TITLE]; $ temp = preg_replace('#[「]#',」'「,$ temp);最後,echo」」;這是有效的,在這裏沒有看到任何格式化規則,希望我的理解正確 – jazcam 2012-02-25 18:58:29

0

當您在框中插入值時,問題在於「值」屬性的引號與值本身中的引號衝突。此衝突導致值被截斷。

下面是如何的輸出會看起來像假設$行爲例[「標題」]包含(Santus和Bendictus從「聖塞西莉亞質量」):

<input type='text' name='title' id='title' value="Santus and Bendictus from "St. Cecilia Mass"" style='width:390px; margin-right:150px; maxlength:75; margin-top:15px' /> 

所以這裏發生了什麼是該值中的第一個報價將作爲'value'屬性的結束報價。因此,文本框只顯示(Santus和Bendictus from)

我認爲你需要的是對htmlentities()的調用。就像這樣:

- 用單引號值

echo "<input type='text' name='title' id='title' value='" . htmlentities($row[TITLE]) . "' style='width:390px; margin-right:150px; maxlength:75; margin-top:15px' />"; 

- 值用雙引號

echo "<input type='text' name='title' id='title' value=\"" . htmlentities($row[TITLE]) . "\" style='width:390px; margin-right:150px; maxlength:75; margin-top:15px' />"; 

希望它能幫助!

+0

Abhay,謝謝,沒有2的作品,我嘗試過類似於你的第一個建議,但是在第二個例子中,奇妙的愛情「,它會把頁面扔出去,標籤和輸入分散,而且值仍然被截斷,你的第二個建議工作:頁面不是分散的,結果不會被任何一個樣本截斷。而不是必須用preg_replace來調整它 – jazcam 2012-02-25 20:18:53

+0

它的工作原理@jazcam甚至我的第一個建議應該適用於像「神的奇妙的愛」這樣的價值觀,除非單引號實際上不是單引號 – Abhay 2012-02-25 20:57:28

+0

試圖回覆,但頁面已經死了,散佈是我錯過了第二個concat操作符後的空間, '。 「'style = ...'在單引號和」空格「之間,outerhtml越來越受到重擊 – jazcam 2012-02-26 00:20:21