2016-04-06 53 views
0

以下是我嘗試發送到數據庫的報告。 PHP代碼工作正常,我相信,行被創建。但reportdata列始終爲空。列類型爲varchar。是否因爲報告以#開始?以下調用會在reportdata列中創建一行但沒有任何內容。給出自動遞增ID。報告去了哪裏? php to mysql

http://www.someaddress.com/savereport.php?reportdata=#98#1#4#14#3#48#8#88#04/06/2016%2008:05:54%20PM 

如果我將報告更改爲基本文本,它將起作用。這是怎麼回事?

http://www.someaddress.com/savereport.php?reportdata=basictext 

這裏是PHP代碼,不會的東西:

mysqli_set_charset($dbc, 'utf8'); 

$reportdata = mysqli_real_escape_string($dbc, $_GET['reportdata']); 

$query = "INSERT INTO `onwordreports`(`reportdata`) VALUES ('$reportdata')"; 

$result = mysqli_query($dbc, $query) or trigger_error("Veri yükleme başarısız: " . mysqli_error($dbc)); 

echo $result; 

mysqli_close($dbc); 
+1

[您的腳本存在SQL注入攻擊風險。](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)瞭解[prepared]( http://en.wikipedia.org/wiki/Prepared_statement)[MySQLi]的聲明(http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)。 –

+0

感謝您的警告..它傷害了我的大腦試圖做到這一點,因爲我實際上並沒有明白這一點。除非有人願意展示如何將我的代碼轉換爲更安全的代碼,否則我將面臨風險。 – Ugur

回答

1

我將與警告,這是一個非常糟糕的方式來處理這個同意。即使是mysql_real_escape_string,你仍然對注射有一定的擔憂。

由於您已經在使用mysqli,因此切換到準備好的語句是fairly trivial

現在,說...我只是做一個echo ("$reportdata");看看它實際上試圖插入什麼價值。取這個值並手動運行查詢 - 你有什麼錯誤嗎?你可以看到mysqli_real_escape_string是如何清理輸入的,你可以看到這是否打破了查詢。

+0

'INSERT INTO onwordreports(reportdata)VALUES(12);' 該代碼沒有使用'#',但下面的代碼沒有。有任何想法嗎? 'INSERT INTO onwordreports(reportdata)VALUES(#12)' – Ugur

+0

你試圖插入什麼類型的列? Varchar,int等? – csyria

+0

嗨。我試圖插入到一個varchar。 – Ugur