这应该不难,但我正在努力,所以我想我会请求帮助,因为我在网上找不到任何具体内容。
我从表单上的复选框发帖。当我在冻结输出时查看浏览器窗口中的查询字符串时,它显示变量名称= on。同样,当我回显它们显示的已发布值时。问题是插入dbase虽然输入TRUE有效,但是没有。 Fieldtype是tinyint(1)。我是否必须将所有ons转换为TRUE。我觉得这在以前从来都不是问题。
<form action="processform.php" method="post">
<input type = "checkbox" name="var1" CHECKED>
<input type = "checkbox" name="var2" CHECKED>
<input type="submit" name="submit" value="submit"></form>
另一端是脚本。
$var1 = $_POST['var1'];
$var2 = $_POST['var2'];
echo $var1; //echoes "on"
$sql = "INSERT into table (var1,var2) VALUES (TRUE,TRUE)"; //works
$sql = "INSERT into table (var1,var2) VALUES ($var1,$var2)"; //does not work.
$sql = "INSERT into table (var1,var2) VALUES ('$var1','$var2')"; //does not work.
mysql_query($sql);
这是一个错字吗?无法想象您确实需要将每个变量的“on”空白更改为TRUE或FALSE
答案 0 :(得分:4)
如果要返回ON
以外的值,则需要包含value=""
字段
<input type = "checkbox" name="var2" value="1" CHECKED>
答案 1 :(得分:1)
您可以为HTML中的每个复选框添加value="TRUE"
。
或者,您对$var1
和$var2
的分配可以将其设置为TRUE
/ FALSE
或1
/ 0
,具体取决于{是否{ {1}}和$_POST['var1']
已设置或未设置。我对HTML中复选框的回忆是,如果设置它们,它们会出现在$_POST['var2']
中,如果没有设置则不存在。
$_POST[]
我希望你实际上并没有在你的问题中使用代码,这对于SQL注入攻击来说是一个很好的开放。
答案 2 :(得分:1)
目前,您的代码很容易受到SQL注入攻击。考虑将其更改为类似的东西,你将能够避免SQL注入,你应该做的事情应该工作:
$var1 = isset($_POST['var1']) ? 1 : 0;
$var2 = isset($_POST['var2']) ? 1 : 0;
echo $var1; //echoes "on"
$sql = "INSERT into table (var1,var2) VALUES (TRUE,TRUE)"; //works
$sql = "INSERT into table (var1,var2) VALUES ($var1,$var2)"; //should work.
$sql = "INSERT into table (var1,var2) VALUES ('$var1','$var2')"; //should also work.
mysql_query($sql);
答案 3 :(得分:0)
TRUE布尔值计算结果为1,= int
另外2个字符串是实际文本$ var1的“on”字符串,但是字段类型是int,所以这没有意义
你可以将输入值设置为1并完成它。
答案 4 :(得分:0)
该字段是tinyint(1)。你不能把字符串“on”放入整数字段!
所以你可以使用TRUE / FALSE或1/0。
如果传入的值是“on”并且返回FALSE或者返回0,那么写一个返回TRUE或1的小函数并不会有太多工作...
function ConvertCheckboxValue($value) {
return $value == "on" ? 1 : 0;
}
答案 5 :(得分:0)
TRUE有效,因为PHP不是强类型的,任何“truthy”转换为字符串“1”,这是在构建sql语句时发生的。最简单的解决方案是使输入的value属性=“1”。当你从$ _GET数组中取出它时,它将是一个字符串“1”,它将在数据库中的tinyint字段中起作用。
<input type="checkbox" name="var2" value="1" />
您肯定希望对其进行预处理以避免像其他人提到的那样进行SQL注入
$var2 = $_GET['var2'] === '1' ? '1' : '0';
我特意将$ var2设置为一个'1'或'0'的字符串,这样你就可以更清楚地知道你的tinyint字段的那些值了。
答案 6 :(得分:0)
我就是这样做的:
var myVal = ( $('#myCheckbox').is(':checked') ) ? 1 : 0;
alert('myVal is: ' +myVal); //alerts 1 if checked, 0 if not checked