使用几个Stack Overflow成员的指导我已经获得了一个PHP表单来与我的MySQL数据库进行通信。现在,我正在使用一个数组作为我的复选框,信息确实到达了MySQL表... ... ...
下面的代码会将所有记录插入数据库,但复选框对应的列的值为“Array”而不是指定的值......:
<?php
function renderForm($articletitle, $articleorganization, $articledate, $articleurl, $articletags )
{
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="stylized" class="myform">
<form id="form" name="form" action="" method="post">
. . .
<input type="checkbox" name="articletags[]" value="checkbox" id="articletags_0" />
<input type="checkbox" name="articletags[]" value="checkbox 2" id="articletags_1" />
. . .
<footer><input type="submit" name="submit" value="Add this Article"></footer></form>
</div>
</body>
</html><?php
}
. . .
if(count($articletags) > 0)
{
$articletags_string = implode(",", $articletags);
}
if (isset($_POST['submit']))
{
$articletitle = mysql_real_escape_string(htmlspecialchars($_POST['articletitle']));
$articleorganization = mysql_real_escape_string(htmlspecialchars($_POST['articleorganization']));
$articledate = mysql_real_escape_string(htmlspecialchars($_POST['articledate']));
$articleurl = mysql_real_escape_string(htmlspecialchars($_POST['articleurl']));
$articletags = ($_POST['articletags']);
. . .
mysql_query("INSERT articles SET articletitle='$articletitle', articleorganization='$articleorganization', articledate='$articledate', articleurl='$articleurl', articletags='$articletags' ")
or die(mysql_error());
header("Location:addsuccess.html");
}
}
else
{
renderForm('','','','');
}
?>
答案 0 :(得分:4)
由于$_POST['articletags']
是一个数组,因此在保存到表之前必须将其转换为字符串。替换此行:
$articletags = ($_POST['articletags']);
用这个:
$articletags = implode(',', $_POST['articletags']);
答案 1 :(得分:1)
是您正在将数组值传递到数据库字段。为此您必须执行一些转换方法。
您可以通过多种方式完成此操作。 首先,您可以将数组值转换为字符串。
$articletags = implode(',', $_POST['articletags']);
第二,您可以将数组值转换为json格式,然后您可以输入数据库..
答案 2 :(得分:1)
好的,我现在正在经历这一切,这就是我在想的。
最好的方法,因为你有多对多的关系,就是有三个表,我们称之为“main_table”,“tag_table”和“key_table”。如果我没弄错的话,这将给你3级标准化。
将复选框的值放在数组中。当您上传信息时,首先将其他数据上传到“main_table” - 不要担心您的标签。然后获取刚刚上传的main_table行的ID号。
现在在“tags”数组上使用foreach运算符,并生成一个字符串值以进入INSERT INTO key_table VALUES $ string。
我认为这至少是一种正确的方法,当然从MySQL的角度来看。这是我刚编写和测试的一些准系统代码。关于错误,安全性等,有很多小部分缺失。
这是表单,它将从数据库下载并填写表单。 (``它包含一个自动值(checked ='checked'),以便在出现问题时不会删除表单。)
$query1 = "SELECT * FROM tag_table";
$res1 = mysqli_query ($dbc, $query1);
while ($row1 = mysqli_fetch_array($res1, MYSQLI_NUM)) {
$tag_id = $row1[0];
$tag = $row1[1];
echo "<div class='check'><label for='tags[]'>$tag</label> ";
echo "<input type='checkbox' name='tags[]' value='$tag_id'";
if (in_array("$tags",$tag_id)) echo " checked='checked' ";
echo "/></div>";
}
以下是表单处理程序的准系统,您已经建立了由变量$ dbc保存的数据库连接。在您上传基本信息后立即执行此操作,以便mysqli_insert_id将获取最近插入的ID号:
$tags = $_POST (tags);
if ($tags) {
$new_main_id = mysqli_insert_id($dbc);
foreach ($tags as $value) {
$qvalues .= "('$new_main_id','$value'),";
}
$qvalues = substr("$qvalues", 0, -1);
$q2 = "INSERT INTO key_table (id_main,id_tag_table) VALUES $qvalues";
$res2 = mysqli_query($dbc, $q2);
}
这会给你一个不错的&amp;清理规范化数据库。请注意,我们使用PHP函数substr()从逗号插入要插入的值列表的最后一个。
因此,如果您有一个包含三行两列的标签表,例如1个红色,2个蓝色,3个绿色,并且您的用户已选中红色和绿色,并且主插入的main_table中的ID号为18 ,查询($ q2)将显示为:
INSERT INTO key_table(id_main,id_tag_table)VALUES('18','1'),('18','3')