好吧,我的大脑陷入困境,我无法找到实现目标的方法,所以我正在寻求你的帮助。
我有一个简单的表格包括:
[input = "text"]
[input = "text"]
[input = "text"]
[label]
[input = "checkbox"]
[input = "checkbox"]
[input = "checkbox"]
[input = "checkbox"]
[input = "checkbox"]
[input = "checkbox"]
技能列表只要你能想象就可以了。
现在,我已经创建了一个包含两个表的数据库
表1:[users]
表2:[skills]
此表是参考表
现在,我想知道如何保存用户技能以及在哪里?
我想到的解决方案之一是创建第3个表
表3:[usersSkills]
但问题是我不知道 - 而我无法弄清楚 - 如何在表单处理过程中保存此表中的用户技能! ,而用户尚未拥有ID 。
我正在做的是对的吗?还是有更好的方法?
我非常感谢您的详细帮助。
P.S.1:表格和流程在同一页面完成。 register.php
我正在使用mySQLi
更新
以下是我在页面中所做的事情:
<form action="index.php" method="POST" name="frmInput">
Username: <input type="text" name="username" size="30"><br />
Skills:
<ul>
<li>Skill 1: <input type="checkbox" name="skills[]" value="1" /></li>
<li>Skill 2: <input type="checkbox" name="skills[]" value="2" /></li>
<li>Skill 3: <input type="checkbox" name="skills[]" value="3" /></li>
<li>Skill 4: <input type="checkbox" name="skills[]" value="4" /></li>
<li>Skill 5: <input type="checkbox" name="skills[]" value="5" /></li>
</ul>
<input type="submit" value="submit">
</form>
<?php
if(isset($_POST['username'])) {
$username = $_POST['username'];
$query = "INSERT INTO `users` (`username`) VALUES ('$username')";
$run = mysqli_query($link, $query);
if($run)
{
$user_id = mysqli_insert_id();
foreach ($_POST['skills'] as $skill)
{
$query = "INSERT INTO `users_skills` (`user_id`,`Skill_id`) VALUES ({$user_id},{$skill})";
$run = mysqli_query($link, $query);
}
}
}
?>
更新:现在正常工作:)
这是工作代码,我发布它以供将来参考,以防有人需要提示,请注意这段代码不是一个完整的也不是安全的代码,它只是为了帮助并告诉你方向。
<form action="index.php" method="POST" name="frmInput">
Username: <input type="text" name="username" size="30"><br />
Skills:
<ul>
<li>Skill 1: <input type="checkbox" name="skills[]" value="1" /></li>
<li>Skill 2: <input type="checkbox" name="skills[]" value="2" /></li>
<li>Skill 3: <input type="checkbox" name="skills[]" value="3" /></li>
<li>Skill 4: <input type="checkbox" name="skills[]" value="4" /></li>
<li>Skill 5: <input type="checkbox" name="skills[]" value="5" /></li>
</ul>
<input type="submit" value="submit">
</form>
<?php
if(isset($_POST['username'])) {
$username = $_POST['username'];
$query = "INSERT INTO `users` (`username`) VALUES ('$username')";
$run = mysqli_query($link, $query);
if($run == true)
{
$user_id = mysqli_insert_id($link);
// echo $user_id;
foreach($_POST['skills'] as $skill)
{
$query = "INSERT INTO `users_skills` (`user_id`,`Skill_id`) VALUES ({$user_id},{$skill})";
$run = mysqli_query($link, $query);
}
}
}
?>
感谢您的帮助......
答案 0 :(得分:1)
首先保存用户,抓住最后插入的ID,然后保存技能。不能使它变得更难;)
如果你正在使用mysqli,你可以使用$insert_id
property来检索最后插入的id。否则,只需执行此选择查询(有关详细信息,请参阅the documentation)
SELECT LAST_INSERT_ID();
答案 1 :(得分:1)
当用户没有ID时,你不保存。首先,您插入用户,获取它然后插入技能。
您的HTML应如下所示:
... user data ...
<input type="checkbox" name="skills[]" value="1" /> Skill 1
<input type="checkbox" name="skills[]" value="2" /> Skill 2
<input type="checkbox" name="skills[]" value="3" /> Skill 3
<input type="checkbox" name="skills[]" value="4" /> Skill 4
<input type="checkbox" name="skills[]" value="5" /> Skill 5
然后在PHP中你会做这样的事情:
if (query("INSERT INTO users ...")) {
$user_id = insert_id(); //with mysql it's mysqli_insert_id(), depeneds what you use to insert
foreach ($_POST["skills"] as $skill) {
//escape $skill with mysqli escape, or use as parameter
query("INSERT INTO skills (user,skill) values ({$user},{$skill})");
}
}
显然,你需要根据自己的情况进行调整,但我希望这能让你的想法朝着正确的方向发展。
让我知道你的想法。