2014-02-18 172 views
-1

我只是一個新手程序員,我正在提出一個論壇來提高我的技能,但我現在正在解決問題。 這是代碼問題:論壇評論部分與PhP

問題是:我們不能使用單引號,我們想要使用它們和配音引號。

這是它進入數據庫:

// get data that sent from form 
$topic=$_POST['topic']; 
$detail=$_POST['detail']; 
$name=$_SESSION['display']; 
$email=$_POST['email']; 

,這是形式的一部分:

<tr> 
    <td width="14%"><strong>Topic</strong></td> 
    <td width="2%">:</td> 
    <td width="84%"><input name="topic" type="text" id="topic" size="50" /></td> 
</tr> 
<tr> 
    <td valign="top"><strong>Detail</strong></td> 
    <td valign="top">:</td> 
    <td><textarea name="detail" cols="50" rows="3" id="detail"></textarea></td> 
</tr> 

我有什麼補充,所以我們可以使用單和DUBBLE報價?我需要做什麼?因爲如果有一個人使用單引號消息崩潰..

這是我給

if($result){ 
echo "Successful<BR>"; 
echo "<a href=index.php>View your topic</a>"; 
header("Location: localhost/forum/"); 
} 
else { 
echo "ERROR"; 
} 

的錯誤消息,這是它進去:

$sql="INSERT INTO $qtbl_name(topic, detail, name, email, datetime)VALUES('$topic', '$detail', '$name', '$email', '$datetime')"; 
$result=mysql_query($sql) 

;

+1

我猜你正在使用mysql_函數,所以[轉義你的變量](http://uk3.php.net/mysql_real_escape_string),更好的解決方案是注意該頁面上的大紅色框,並按照它的建議進行操作。 – MLeFevre

回答

1

你正在運行一個名爲「sql注入」的東西,這是一個你應該關心的嚴重問題。

請閱讀http://php.net/mysql_real_escape_string並使用此函數來轉義輸入數據的特殊字符。

看來,你有一個查詢,如:

$query = "INSERT INTO tbl (`topic`) VALUES ('$topic');" 

所以你生成的查詢字符串是也許像

$topic = "foobar"; 
$query = "INSERT INTO tbl (`topic`) VALUES ('$topic');" 
echo $query; 

將導致:

INSERT INTO tbl (`topic`) VALUES ('foobar'); 

這是不錯。但是:

$topic = "f'); delete from tbl;"; 
$query = "INSERT INTO tbl (`topic`) VALUES ('$topic');" 
echo $query; 

將返回:

INSERT INTO tbl (`topic`) VALUES('f'); delete from tbl; 

,這是你不希望會發生什麼。

達到在PHP編程技能,一個新的水平,你應該閱讀PDO的文檔(http://php.net/pdo),瞭解更多關於使用參數在SQL語句:)

+0

Soo我必須對導入的東西做一個變量?我也改變了上面的代碼,所以你可以看到它是如何在 – Harryaars

+0

我沒有什麼可以添加到我的答案;請按照我的鏈接。您的代碼與預期一致。使用mysql_real_escape_string或 - 更好 - 閱讀關於PDO。 如果您滿意,請接受我的回答。 – tjati

+0

好的,我會感謝你。我只是想補充一點。 – Harryaars