2016-05-02 40 views
0

此代碼,例如將無法逃脫數據庫的註釋的字符串:

if ($_POST['comment']) { 
    $comment = mysql_real_escape_string(htmlentities($_POST['comment_txt'])); 
    $comment_insert = mysql_query("UPDATE msgs SET msg='$comment' WHERE user='$username'") 
    or die; 
    } 

但是這一次將:

if ($_POST['comment']) { 
    $comment_p = $_POST['comment_txt']; 
    $comment = mysql_real_escape_string(htmlentities($comment_p)); 
    $comment_insert = mysql_query("UPDATE msgs SET msg='$comment' WHERE user='$username'") 
    or die; 
    } 

爲什麼?爲什麼我不能逃避$ _POST值?爲什麼我必須爲$ _POST定義新的$變量才能轉義它?這是安全鉗。我會在某個時候轉向PDO,但目前我陷入了舊的mysql API。

+0

是啊,對不起,我在這裏出現打印錯誤。現在編輯代碼。謝謝。 –

+0

它也適用於'$ _POST' ..我總是直接在'$ _POST'上使用這個函數,在我的代碼中似乎沒有問題,我想可能是因爲'mysql',一旦用'mysqli'嘗試 – phpfresher

回答

0

這只是錯誤的。您沒有之前把價值$_POST數組中到一個變量,它直接作用於$_POST值,也

考慮使用mysqliPDO代替mysql雖然。

3

試試這個,它可以幫助你:

$comment = mysql_real_escape_string(htmlentities($_POST['comment_txt'], ENT_QUOTES, "UTF-8")); 

從這裏看到的細節: PHP $_POST doesn't take accents

+0

會不會如果我一起將數據庫更改爲utf-8,請做同樣的事情嗎? –

+1

我認爲不是數據庫問題,你必須添加utf-8元標記。按照我給的鏈接.... –

相關問題