2012-11-17 74 views
1

我有一個Mysql表,checkboxsaved。它有一個名爲checked的列varchar(45)

此列的可能的值是Check1Check2

接着,我送與jQuery的請求和傳遞值作爲GET變量。例如:

"http://xyz?checkbox=" + checkbox // checkbox = Check1 

我找回它在PHP中使用$checkbox = $_GET['checkbox'],再火查詢:

$rv = mysql_query("insert into checkboxsaved (checked) values ('$checkbox')"); 

的價值沒有得到插入。奇怪的是,當我在前面添加空間或其他角色時,例如

$rv = mysql_query("insert into checkboxsaved (checked) values (' $checkbox')"); // space 
$rv = mysql_query("insert into checkboxsaved (checked) values ('r$checkbox')"); 

然後值插入。誰能告訴我爲什麼會發生這種情況?據我所知, 當列是varchar我應該能夠插入像Check1

+3

您可以開放SQL注入。請了解如何確保您的SQL查詢。提示:這意味着使用準備好的語句和PDO(或MySQLi)。 – Ryan

+1

運行查詢之前,您知道$ checkbox的值是什麼嗎?你可以用'var_dump($ checkbox)'打印它。在此發佈輸出將有助於我們更好地爲您提供幫助。 –

回答

0

我希望你在做一些衛生。您應該對所有用戶輸入的值運行mysql_real_escape_string()。另外,就你而言,你也可以在值上運行一個正則表達式,以便它匹配/^Check[0-9]+$/

如果這樣不能解決您的問題(並且可能不會),那麼您的腳本可能不會像您認爲的那樣接收數據。

即。

$checkbox = mysql_real_escape_string($_GET['checkbox']); 
$sql = "insert into checkboxsaved (checked) values ('$checkbox');"; 
//echo $sql; // uncomment this to debug 
$rv = mysql_query($sql); 
+0

(並且不要忘記錨定正則表達式。) – Ryan

+0

是的。更新.. – dtbarne

+0

我試着用mysql_real_escape_string($ _ GET ['checkbox']);它不工作..我很困惑,爲什麼當我添加一個空格或字符它被插入..是否必須做一些與MySQL中的數據類型..這是varchar – user1472972