我希望用户能够检查多个复选框,然后在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>
非常感谢你帮助我!!!
最诚挚的问候,
马丁
答案 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