2013-03-05 44 views
0

我有我的網站的用戶可以輸入的HTML表單,然後單擊提交,然後mysql插入到數據庫中,由於某種原因,當它被提交到我的'生物'列是longtext和utf8_unicode_ci格式,如果用戶鍵入jame的顯示爲jame的,我不想要這些斜槓。

有誰知道爲什麼會發生這種情況,以及我如何擺脫斜槓?感謝

HTML:

<form action="includes/changebio.php" method="post" id="form1">   
<textarea id="bio" style="width: 448px; 
    margin-top:3px; 
    text-align:left; 
    margin-left:-2px; 
    height: 120px; 
    resize: none; 
    border: hidden;" textarea name="bio" data-id="bio" maxlength="710"><?php echo htmlspecialchars($profile['bio']); ?></textarea> 
<input type="image" src="assets/img/icons/save-edit.png"class="bio-submit" name="submit" value="submit" id="submit"/> 
</form> 

PHP:

<?php ob_start(); ?> 
<?php 
require_once("session.php"); 
require_once("functions.php"); 
require('_config/connection.php'); 
?> 
<?php 
session_start(); 
include '_config/connection.php'; 
$bio = htmlspecialchars($_POST['bio']); 
$result = mysql_query("SELECT bio FROM ptb_profiles WHERE id=".$_SESSION['user_id'].""); 
if(!$result) 
{ 
echo "The username you entered does not exist"; 
} 
else 
if($bio!= mysql_result($result, 0)) 
{ 
echo ""; 
    $sql=mysql_query("UPDATE ptb_profiles SET bio ='".mysql_real_escape_string($bio)."' WHERE id=".$_SESSION['user_id'].""); 
} 
header("Location: {$_SERVER['HTTP_REFERER']}"); 
?> 
<?php ob_end_flush() ?> 
+0

您使用的是哪個版本的PHP? – SDC 2013-03-05 12:19:42

回答

0

使用strip_slashes

echo strip_slashes($string);

使用此:

<?php echo htmlspecialchars(strip_slashes($profile['bio'])); ?> 
+0

編輯代碼請現在檢查 – 2013-03-05 12:11:21

+1

這是一種可能的解決方法,但我建議解決根本問題:魔術引號。 – 2013-03-05 12:17:24

+1

如果你打算使用這樣的工作,至少首先檢查魔術引號設置,以便在升級PHP時修復不會導致事情中斷。 – SDC 2013-03-05 12:18:32

-1

你在你的SQL查詢mysql_real_escape_string()有這個「通過將在\它成爲前引號\」轉義任何

所以\」被存儲在數據庫中,你則需要當顯示輸出刪除斜槓沒有屏幕,所以你會做<?php echo stripslashes($profile['bio']); ?>在文本區域

請參閱stripslashes()mysql_real_escape_string()

您可能也想看看轉換爲使用而不是舊mysql_函數PDO或mysqli的,因爲他們現在已棄用

+0

你其實是錯的。這是來自mysql_real_escape_string()文檔的直接引用。 「mysql_real_escape_string()調用MySQL的庫函數mysql_real_escape_string,它將反斜槓預置爲以下字符:\ x00,\ n,\ r,\,',」和\ x1a。 「這意味着如果你使用它,並且你試圖在數據庫中插入一個'',那麼它在''之前預先存儲一個',這樣存儲在數據庫中'它不會創建有效的sql語法,它只是將特殊字符轉義爲打破SQL插入 – Dave 2013-03-05 12:20:23

+0

謝謝我試過這個雖然和IM仍然有\'顯示? – 2013-03-05 12:22:03

+0

把你的echo聲明的stripslashes(),它應該工作得很好,如果它不請你重新發布你的新嘗試代碼,所以我們可以檢查它的進一步錯誤 – Dave 2013-03-05 12:22:44

1

您的服務器可能很舊,它啓用了一個名爲Magic Quotes的舊「PHP」功能。該功能應該從來沒有存在過,最好的想法是嘗試disable it

+1

值得澄清的是,在最近的PHP版本中,Magic Quotes已被棄用。關掉它是件好事;將PHP升級到最新版本甚至更好。 – SDC 2013-03-05 12:19:11