1

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

<?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>

附带说明一下,我应该采取哪些步骤来确保我的数据库和网站不会受到简单的攻击。我计划让公众使用这些表格向数据库公开提交信息。

4

2 回答 2

3

您覆盖了正确$mode的变量,这就是您Array在表数据中看到的原因。

从代码中删除这一行:

$mode=$_POST['mode'];

关于易受攻击:您应该以这种方式转义字符串:

$gamename = mysql_escape_string($_POST['gamename']);
$region = mysql_escape_string($_POST['region']);
$notes = mysql_escape_string($_POST['notes']);
于 2013-01-21T23:27:52.093 回答
-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);

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

于 2013-01-21T23:24:08.250 回答