2012-11-17 111 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