2012-12-04 19 views
2

我有一個用戶也可以添加註釋的文本區域。在下一頁中,我使用$_POST[Comments]來顯示輸入內容。我有一個編輯按鈕可以返回並查看輸入的內容並編輯筆記,但是當我顯示$_POST[Comments]時,它會顯示一直到撇號的所有內容。如何將使用PHP的文本區域中的互斥傳遞給MySQL

例子:

原來錄入:Let's try this.

當編輯:Let

現在,當我把它傳遞給服務器做我用下面的函數來防止SQL注入

的SQL加
function keepSafe($value) { 
     if (get_magic_quotes_gpc()) { 
      $value = stripslashes($value); 
     } 
     if (!is_numeric($value)) { 
      $value = "'" . mysqli_real_escape_string($value) . "'"; 
     } 
     return $value; 
    } 

以下是我用來格式化SQL插入的輸入。

$Comments = str_replace("\n","<br />",$_POST['CustComments']); 
    $Comments = keepSafe($_POST['Comments']); 

我需要能夠在提交前編輯時在筆記部分看到所有的撇號。我想確保當我提交它時,SQL注入會阻止安全代碼。

+0

您第一次使用'$ _ POST [ 'CustComments']'然後'$ _ POST [ '評論']'你的最後一個例子,如果該事項(它應該,對你)。另外(不是答案特定的),你應該替換'\ r \ n'而不是'\ n'(從Windows的角度來看)。同樣也(不回答具體),你應該使用準備語句,而不是直接變量插入(因爲你使用mysqli)。 – newfurniturey

+1

[偉大的逃避現實(或:你需要知道如何處理文本中的文本)](http://kunststube.net/escapism/) – deceze

+0

它看起來像你從一個非常古老的來源獲得示例代碼。很久以前,魔術引號已經從PHP中刪除。至於如何正確處理這個問題,那就是準備好的陳述的目的。 – GordonM

回答

5

與撇號的問題:

你可能使用輸入這樣的:

<input type='text' value='<?php echo $value;?>'/> 

的問題是,如果該值有一個撇號發生這種情況:

<input type='text' value='Let's play'/> 

所以價值標籤因變量中的撇號而結束。

要修復它只需使用用htmlspecialchars與ENT_QUOTES:

<?php 
$value = htmlspecialchars("Let's play", ENT_QUOTES); 
?> 
<input type='text' value='<?php echo $value; ?>'/> 

這樣的撇號的獲得編碼,將在您的形式

關於SQL注入編輯:

只需使用mysqli's prepared statements,你會沒事的。爲了保證您不受XSS的影響,始終使用HTML輸出中的用戶輸入htmlspecialchars。更好的做法是將輸入過濾爲只有你需要的內容,並且只保存過濾後的輸入到你的數據庫。

+0

感謝您的幫助:) – JukEboX

+0

讓我補充一點。如何使用myqsql將文本區域中的撇號存儲到數據庫中插入 – JukEboX

+0

您需要使用準備好的插入。或者你可以使用'mysqli_real_escape_string(「讓我們玩」);'(我推薦一個準備好的聲明,你可以在我的awnser中提供的鏈接中找到所有相關信息) –

-1

使用htmlspecialchars()功能創建textarea標籤時:

<textarea><?=htmlspecialchars($_POST['Comments'])?></textarea> 
+1

撇號在textarea字段中無關緊要。只有htmlspecialchars不編碼撇號。你需要ENT_QUOTES。順便說一句:'<?='是不好的做法,因爲它只能在啓用短標籤的情況下工作'<?php echo'更好。 –

+0

約翰,好點。我想,只是我的習慣。從來沒有一個問題。 – Geo

相關問題