2013-01-21 54 views
1

我正在寻找一种将多个复选框选择插入单个数据库列的简单解决方案。用户选择框1,4和6 - 因此数据库会反映“1,4,6”..逗号会很好,但不是必需的。如果选中了一个复选框,信息将按照它应该插入。如果选择了多个,则只有最后一个将被插入到数据库中。其他一切工作正常,但这些沉重的复选框。我试图用将多个复选框值插入到单个SQL数据库列中

<?php 
if(isset($_POST['mode'])) { 
    $mode = implode(",", $_POST['mode']); 
} else { 
    $mode = ""; 
} 
?> 

<?php 

由另一有人问同样的问题表明,虽然这种方法给我留下了“阵列”之列,而不是任何数字里面无论选择什么。

我试图发布一些图片来更好地解释,但它不会允许我。我不是SQL或PHP专业人员,只是尽量学习尽可能多地获取这个数据库的速度。如果有解决这个问题,请赐教。

这里是我使用的动作脚本提交代码:

<?php 
if(isset($_POST['mode'])) { 
$mode = implode(",", $_POST['mode']); 
} else { 
$mode = ""; 
} 
?> 

<?php 

// Connect to server and select database. 
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 

// Get values from form 
$gamename=$_POST['gamename']; 
$region=$_POST['region']; 
$mode=$_POST['mode']; 
$notes=$_POST['notes']; 

// Insert data into mysql 
$sql="INSERT INTO $tbl_name(gamename, region, mode, notes)VALUES('$gamename', '$region', '$mode', '$notes')"; 
$result=mysql_query($sql); 

// if successfully insert data into database, displays message "Successful". 
if($result){ 
echo "Successful"; 
echo "<BR>"; 
echo "<a href='insert.php'>Back to main page</a>"; 
} 

else { 
echo "ERROR"; 
} 
?> 

<?php 
// close connection 
mysql_close(); 
?> 

这里是我的复选框代码:

<td><input type="checkbox" name="mode[]" id="mode" value="1" /> 
mode 1<br /> 
<input type="checkbox" name="mode[]" id="mode" value="2" /> 
    mode 2<br /> 
<input type="checkbox" name="mode[]" id="mode" value="3" /> 
    mode 3<br /> 
<input type="checkbox" name="mode[]" id="mode" value="4" /> 
    mode 4 <br /> 
<input type="checkbox" name="mode[]" id="mode" value="5" /> 
    mode 5 <br /> 
<input type="checkbox" name="mode[]" id="mode" value="6" /> 
    mode 6 <br /> 
<input type="checkbox" name="mode[]" id="mode" value="7" /> 
    mode 7<br /> 
<input type="checkbox" name="mode[]" id="mode" value="8" /> 
    mode 8 
    </td> 

作为一个侧面说明,什么步骤应该我采取确保我的数据库和网站不容易受到简单的利用。我计划让这些表单被公众用来公开地向数据库提交信息。

+0

请不要使用mysql_ *函数,它弃用(见[*红box *](http://php.net/manual/en/function.mysql-query.php)),并且容易受到sql注入的影响。使用[* PDO *](http://php.net/manual/en/book.pdo.php)或[* MySQLi *](http://php.net/manual/en/book.mysqli.php) – alfasin

+0

您能否详细介绍一下SQL的新手?到底漏洞在哪里,我可以在保持现有功能的同时替换易受攻击的代码? –

+0

如果您会阅读我在我的评论中发布的链接 – alfasin

回答

3

您覆盖正确的$mode变量,这就是为什么您在表格数据中看到Array

$mode=$_POST['mode']; 

和对弱势:

从代码中删除这条线,你应该逃避字符串是这样的:

$gamename = mysql_escape_string($_POST['gamename']); 
$region = mysql_escape_string($_POST['region']); 
$notes = mysql_escape_string($_POST['notes']); 
+0

谢谢你的信息,我会尝试没有这条线,看看它给了我什么。 –

+0

删除该行代码已解决该问题。多选的复选框现在可以在我的数据库的单个列中正确显示。 –

+0

我很高兴帮助你的朋友 – dimaninc

-1

您可以使用以下代码将复选框转换为字符串,其中所选框由逗号分隔。

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); 

这将删除字符串的最后一个字符。

+0

多数民众赞成在一个不好的方法,数组将加入()后更好 – dimaninc

相关问题