如何在mysql db中添加多个选择复选框?

时间:2016-04-26 07:54:18

标签: php html mysql checkbox

我希望用户能够检查多个复选框,然后在html页面上打印他/她的选择,并将每个选项添加到我的Mysql数据库中。不幸的是,我只看到文字字符串'Array'被添加到我的数据库而不是选定的名称。

我的脚本如下所示:

    <html>
<head>
<title>checkbox help</title>
</head>
<?php
if (isset($_POST['submit'])) {
    $bewoner_naam = $_POST["bewoner_naam"];
    $how_many = count($bewoner_naam);
    echo 'Names chosen: '.$how_many.'<br><br>';
    if ($how_many>0) {
        echo 'You chose the following names:<br>';
    }
    for ($i=0; $i<$how_many; $i++) {
        echo ($i+1) . '- ' . $bewoner_naam[$i] . '<br>';
    }
        echo "<br><br>";
}

$ bewoner_naam = $ _POST ['bewoner_naam']; echo $ bewoner_naam [0]; //输出将是第一个选中复选框的值 echo $ bewoner_naam [1]; //输出将是第二个选中复选框的值 的print_r($ bewoner_naam); //输出将是所选复选框的值数组

$con = mysql_connect("localhost","usr","root");
mysql_select_db("db", $con);
$sql="INSERT INTO bewoner_contactgegevens (bewoner_naam) VALUES ('$_POST[bewoner_naam]')";

if (!mysql_query($sql,$con))

  {

  die('Error: ' . mysql_error());

  }

echo "1 record added";



mysql_close($con)

?>



<body bgcolor="#ffffff">
<form method="post">
Choose a name:<br><br>
<input type="checkbox" name="bewoner_naam[]" value="kurt">kurt <br>
<input type="checkbox" name="bewoner_naam[]" value="ian">ian <br>
<input type="checkbox" name="bewoner_naam[]" value="robert">robert <br>
<input type="checkbox" name="bewoner_naam[]" value="bruce">bruce<br>
<input type="submit" name = "submit">
</form>
</body>
<html>

非常感谢你帮助我!!!

最诚挚的问候,

马丁

3 个答案:

答案 0 :(得分:0)

您无法将数组插入单个列中,它会在您观察时显示为“数组”,因此您有两个选择:

  • 通过循环遍历该数组,为每个项目插入多行。
  • 使用implode将它们组合成一个单数值。

您的数据库在您的示例中的结构方式并不清楚这两者中哪一个最好。

答案 1 :(得分:0)

由于$_POST['bewoner_naam']是一个数组,因此必须将该数组中的每个项目添加到数据库中。例如,您可以使用for循环:

$con = mysql_connect("localhost","usr","root");
mysql_select_db("db", $con);

foreach($_POST['bewoner_naam'] as $naam) {
    $sql="INSERT INTO bewoner_contactgegevens (bewoner_naam) VALUES ('". mysql_real_escape_string($naam) ."')";
}

请注意,我已使用mysql_real_escape_string功能。你总是希望包括这个。有关原因和方式,请参阅:Sanitizing PHP/SQL $_POST, $_GET, etc...?

答案 2 :(得分:0)

首先要避免PHP中的所有mysql_*函数。它们已被弃用,并在较新版本中删除,并且最重要的是,不安全。我建议您切换到 PDO 并使用预准备语句。

但这并不能解决您的问题。您遇到的问题是,在组合SQL的代码中,您将数组与字符串连接起来,这就是为什么您只插入&#34; Array&#34;。如果您希望将所有数组项作为字符串插入,则需要implode数组:

$sql = "INSERT INTO bewoner_contactgegevens (bewoner_naam) VALUES (:checkboxes)";
$statement = $pdo->prepare($sql);
$statement->bindValue(":checkboxes", implode(",", $_POST["bewoner_naam"]);
$statement->execute();

虽然在数据库中将多个值存储为逗号分隔列表并不是一个好主意,因为它会随着时间变得太难以维护,并且在获取此类数据时会产生更多困难,因为您需要&#34 ;重新解析&#34;它从数据中检索后。

正如@Rodin建议的那样,您可能希望将每个数组项插入一个单独的行,因此我建议如下:

$sql = "INSERT INTO bewoner_contactgegevens (bewoner_naam) VALUES "
    . rtrim(str_repeat('(?),', count($_POST["bewoner_naam"])), ',');
$statement = $pdo->prepare($sql);
$count = 1;
foreach ($_POST["bewoner_naam"] as $bewoner_naam) {
    $statement->bindValue($count++, $bewoner_naam);
}
$statement->execute();

这样,您将创建一个批量插入语句,其中包含与所选复选框一样多的占位符,并将它们的每个值放在数据库中的单独行中。

有关PDO和参数绑定的更多信息,请参阅http://www.php.net/pdo