2012-02-02 80 views
0

我正在使用「mysql_real_escape_string」將數據插入到mySQL中。來自mySQL的PHP​​結果不顯示輸入值內部的引號

爲了檢索它,我通過使用反斜槓來回顯它,並且它工作正常,除了當我將值放入輸入值(如本例中)時。單引號工作正常,例如:Milky's Home ...但是雙引號,剪下腳本,在第一個引號中:。例如:銀河系的「家」到底應該只:銀河的

如果我刪除的stripslashes,它表明:銀河/的/

所以,還是削減它在第一次報價。

這是腳本:

$id=mysql_real_escape_string($_POST[id]); 

<? 
echo stripslashes($Titlez['titlez']); 
?> 
<input type="text" size="150px" name="titlez" value="<? echo stripslashes($Titlez['titlez']); ?>"> 

我也嘗試過這兩個選項,但給出相同的結果:

<? 
$titlez = stripslashes($Titlez['titlez']); 
echo '<input type="text" size="150px" name="titlez" value="'.$titlez.'">'; 
echo "<input type=\"text\" size=\"150px\" name=\"titlez\" value=\"".$titlez."\">"; 
?> 
+0

在傳入數據保存到數據庫之前,您應該對傳入數據進行反斜槓()。另外,正如你發現的那樣,魔語引用非常糟糕。如果可以,然後關閉它們。 – GordonM 2012-02-02 08:14:45

+0

我建議你將你的代碼轉換到PDO,使用準備好的語句,然後它會保護你免受MySQL注入。用PDO你不應該關心mysql_real_escape_string。 – 2018-02-28 13:41:51

回答

2

試試這個

$titlez = htmlentities(stripslashes($Titlez['titlez'])); 
0

,則不應使用mysql_real_escape_string任何東西,但將數據插入到MySQL。另外,一旦數據存儲在數據庫中,由mysql_real_escape_string添加的斜槓(或任何用於轉義特殊字符的內容)將被刪除,因此,當您從數據庫中提取數據時,您不需要使用「stripslashes」或任何其他的不可逃避的方法。

正如其他人已經提到,你會想要禁用你的php.ini中的魔術引號,如果你還沒有。否則,額外的斜線會自動添加到任何請求數據中。

一旦將數據嵌入到HTML中,您將使用htmlentities(正如Rezigned所述)正確地轉義特殊字符。

+0

謝謝大家,我很容易在文件夾MAMP/conf/php5.2/php.ini中找到php.ini,我用文本編輯器打開它,並將magic_quotes_gpc = On改爲 – Sebastian 2012-02-03 12:02:29

+0

@GordonM但是我怎樣才能修改它服務器。這是一個VPS,在ISPconfig中,我看到這個/etc/php5/apache2/php.ini,但在FTP中,我沒有看到一種方式到達那裏。 – Sebastian 2012-02-03 12:08:38