Php 在单个SQL数据库列中插入多个复选框值
我正在寻找一个简单的解决方案,将多个复选框选择插入到单个数据库列中。用户选择框1、4和6,这样数据库将反映“1、4、6”。。逗号很好,但不是必需的。如果选中一个复选框,则信息将按其应有的方式插入。如果选择了多个,则只将最后一个插入数据库。其他一切都很好,但这些该死的复选框。我试着用Php 在单个SQL数据库列中插入多个复选框值,php,sql,insert,checkbox,multipleselection,Php,Sql,Insert,Checkbox,Multipleselection,我正在寻找一个简单的解决方案,将多个复选框选择插入到单个数据库列中。用户选择框1、4和6,这样数据库将反映“1、4、6”。。逗号很好,但不是必需的。如果选中一个复选框,则信息将按其应有的方式插入。如果选择了多个,则只将最后一个插入数据库。其他一切都很好,但这些该死的复选框。我试着用 <?php if(isset($_POST['mode'])) { $mode = implode(",", $_POST['mode']); } else { $mode = ""; }
<?php
if(isset($_POST['mode'])) {
$mode = implode(",", $_POST['mode']);
} else {
$mode = "";
}
?>
<?php
您可以使用以下代码将复选框转换为字符串,其中所选框用逗号分隔
function checkboxToString($check){
while (list ($key,$val) = @each ($check)) {
$string .= $val.",";
}
return $string;
}
例如:选中框1,3和4时,它将返回1,3,4,。是的,它在结尾加了一个逗号。您可以使用一行简单的代码删除最后一个逗号(可能不是最好的)。只需在末尾添加以下内容:
$string = substr($string,0,strlen($string)-1);
这将删除字符串的最后一个字符。您覆盖了正确的$mode
变量,这就是您在表数据中看到数组的原因
从代码中删除此行:
$mode=$_POST['mode'];
关于易受攻击:您应该以这种方式转义字符串:
$gamename = mysql_escape_string($_POST['gamename']);
$region = mysql_escape_string($_POST['region']);
$notes = mysql_escape_string($_POST['notes']);
请不要使用mysql_*函数,它已弃用(请参阅),易受sql注入攻击。使用SQL,或者您可以为SQL的新手详细说明一下吗?漏洞到底在哪里?在保持现有功能的同时,我可以用什么替换漏洞代码?如果您阅读我在评论中发布的链接,您所有的问题都会得到回答是的,我已经意识到这一点。谢谢你的指导。谢谢你提供的信息,我会在没有那一行的情况下尝试它,看看它给了我什么。删除那一行代码已经解决了这个问题。现在,在我的数据库的一列中正确显示了多个选择的复选框。我很高兴能帮助您buddythats这是一个不好的方法,以后将加入的数组()更好
$mode=$_POST['mode'];
$gamename = mysql_escape_string($_POST['gamename']);
$region = mysql_escape_string($_POST['region']);
$notes = mysql_escape_string($_POST['notes']);