人们将值输入表单并在表单的一个条目中输入多个值。
例如: 名称的一个条目 和爱好的多个条目。
我可以通过运行for循环进入数据库,但是对于每个不同的爱好,这将是同名的多个条目。
如何将“空格”中的一个名称和所有爱好输入到一个数据库字段“TWIG”中。我可以使用数组,但它显示为ARRAY,然后返回FOR循环。
for ($t=0; $t<=$_POST['tc']-1; $t++) {
echo "<BR> ts:".$_POST[$t]."<BR>";
$ths[]=$_POST[$t];
}
print_r ($ths);
$statement = $link->prepare("INSERT INTO quest(cnos, dte, twig)
VALUES(:q, :d, :t )");
$statement->execute(array(
":q" => htmlspecialchars ($_POST['iht']),
":d" => $_SERVER['REQUEST_TIME'],
":t"=> $ths
));
答案 0 :(得分:4)
一种可能性是破坏你的爱好/将你的字符串合并为一个......
for ($t=0; $t<=$_POST['tc']-1; $t++) {
$ths = $_POST[$t] . " "; //Concatinate string, do no use array!
}
//Cut off last character " " to avoid ugly space at the end:
$ths = substr($ths, 0, strlen($ths) - 1);
但是,如果您想要原子值,更清晰的解决方案是创建更清晰的数据库结构。
这是1:n关系(表A中的每个条目都与表B中的n个实例相关)。
以下示例可以很容易地适应您的架构:
Table User(id[PK], name, age);
Table User_Hobbies: (user_id, hobby_descr);
--
INSERT INTO User(2, "Chris", 19);
INSERT INTO USER_User_Hobbies(2, "videogames");
INSERT INTO USER_User_Hobbies(2, "music");
--
Example query:
SELECT u.name, u.age, GROUP_CONCAT(uh.hobby_descr) AS hobbies
FROM User u
LEFT JOIN User_Hobbies uh ON u.id = uh.user_id
WHERE u.id = 123 /*Where is optional, if you want to filter for a specific user*/
GROUP BY u.id;
Possible result:
| name | age | hobbies |
chris 18 videogames, music
steve 22 computer, programming, php
答案 1 :(得分:2)
使用implode功能,如下所示:
":t"=> implode(" ", $ths);
答案 2 :(得分:2)
我不确定,如果我理解你的问题是正确的,但是如果你想插入一个数组作为逗号分隔的字符串(或由任何分隔),为什么不使用php implode函数:{{3} }
例如:
$myHobbies = array("football", "basketball", "running");
$statement = $link->prepare("INSERT INTO quest(cnos, dte, twig)
VALUES(:q, :d, :t )");
$statement->execute(array(
":q" => htmlspecialchars ($_POST['iht']),
":d" => $_SERVER['REQUEST_TIME'],
":t"=> implode(" ", $myHobbies)
));
我认为使用逗号或分号作为分隔符,优于空格,因为一些爱好可能包含两个单词(例如“pc gaming”)。
答案 3 :(得分:0)
我认为更好的解决方案是使用json_encode而不是内爆,因为它提供了更强大的结构。
":t" => json_encode($myHobbies)
答案 4 :(得分:0)
您可以使用join函数在数据库中的同一字段中存储多个值,它可能会起作用: -
":t"=>join(",", $ths);//if you want ,(coma) between two string
or
":t"=>join(" ", $ths);//if you want space between two string