2012-11-19 21 views
3

我有通過textarea(同一頁面上的所有代碼)更新MySQL錶行的代碼。更新表單(HTML部分)在PHP if語句中被回顯出來。當用戶點擊'編輯'按鈕時,會彈出一個textrea(使用Javascript)。他們輸入更新並點擊提交,並立即在MySQL數據庫和網站上更新它。下面的代碼:MySQL文本字段行更新時產生不需要的反斜槓


PHP(echo'ed HTML表單)

echo "<span id=\"about_me\">".$row['aboutme']."</span><span style=\"font-size:10px;\"><a id=\"popup\">Edit</a></span></p> 
    <form style\"display:none;\" method=\"post\"> 
    <textarea rows=\"5\" cols=\"31\" id=\"area\" name=\"about_update\" style=\"display:none\" placeholder=\"Type 140 characters or less and press submit.\"></textarea> 
    <input style=\"display:none;\" type=\"submit\" id=\"aboutsubmit\" value=\"Submit\" /> 
    </form>"; 

PHP

if (isset($_POST['about_update'])) { 
    $about_update = $mysqli->real_escape_string($_POST['about_update']); 
    $update = "UPDATE tbl_name SET aboutme='$about_update' 
     WHERE firstname='$firstname' && lastname='$lastname'"; 
    $mysqli->query($update); 
} 

它正確的所有功能,除了當您使用撇號將它放置在一個\之前e it。 MySQL中的aboutme行的類型是TEXT btw。爲什麼textarea生成這個\

+0

這與轉義。至少,我想不出另一個原因。 – Digitalis

+0

是的,我也想到了,我假設PHP正在解釋它,我只是不知道如何防止它... – MillerMedia

+3

stripslashes()或stripcslashes()可能會訣竅。閱讀這個http://php.net/manual/en/function.stripslashes.php – Digitalis

回答

1

如果你沒有訪問php.ini文件,下面的功能應該工作:

function escapeString($value){ 
global $mysqli; 
    if(get_magic_quotes_gpc()){ 
    $value=stripslashes($value); 
    } 
    $value=$mysqli->real_escape_string($value); 
    return $value; 
} 

確保你把函數打開數據庫連接:)

相反的後您

$mysqli->real_escape_string(); 

$someVariable=escapeString($variableYouWantToEscspe); 

希望這個作品!

編輯:正在發生的事情是撇號被魔術引號轉義了一次,然後轉義字符串被real_escape_string函數再次轉義。你想要做的只是在魔術引號插入它們(如果是語句首先)然後轉義字符串,或者如果魔術引號沒有打開,只需轉義字符串,就刪除任何反斜槓:)

+0

我認爲escapeString需要打開SQLite3。不會使用stripslashes嗎? – Popnoodles

+0

escapeString是一個自定義函數嗎?除了打開的數據庫連接,它不需要其他任何東西。只有在啓用了魔術引號的情況下才需要使用任何行爲,否則只是將其轉義。 –

+0

是的:)你可以重命名的功能,如果你想:)看看我的編輯的工作原理 –