构建一个技巧mysql db

时间:2014-03-21 14:40:14

标签: php mysql

好吧,我的大脑陷入困境,我无法找到实现目标的方法,所以我正在寻求你的帮助。

我有一个简单的表格包括:

  • 用户名[input = "text"]
  • 电子邮件[input = "text"]
  • 密码[input = "text"]
  • 技能[label]
    • 游泳[input = "checkbox"]
    • 潜水[input = "checkbox"]
    • 钓鱼[input = "checkbox"]
    • [input = "checkbox"]
    • [input = "checkbox"]
    • [input = "checkbox"]

技能列表只要你能想象就可以了。

现在,我已经创建了一个包含两个表的数据库

表1:[users]

  • 用户id
  • 的userName
  • USEREMAIL
  • 的userPassword

表2:[skills] 此表是参考表

  • skillId
  • skillName

现在,我想知道如何保存用户技能以及在哪里?

我想到的解决方案之一是创建第3个表

表3:[usersSkills]

  • ID
  • 用户id
  • skillId

但问题是我不知道 - 而我无法弄清楚 - 如何在表单处理过程中保存此表中的用户技能! ,而用户尚未拥有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);
            }
        }
    }

?>

感谢您的帮助......

2 个答案:

答案 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})");
  }
}

显然,你需要根据自己的情况进行调整,但我希望这能让你的想法朝着正确的方向发展。

让我知道你的想法。