PHP-使用2个外键将数据插入MySQL表

时间:2019-04-18 19:15:02

标签: php mysql

我正在做一个学校项目-一个网站,上面有学生参加各种体育比赛的表演。我有三个表:

表1-“学生”

  • id(主键)
  • 课程
  • 名字
  • 姓氏

表2-“运动”

  • sport_id(主键)
  • 运动名

表3-“性能”

  • performance_id(主键)
  • sport_id(外键-sports.sport_id)
  • student_id(外键-students.id)

我想制作一个将数据添加到第三张表中的表格。 该表格应包括:

  • 课程
  • 名字
  • 姓氏
  • 运动名

...但是我不知道如何实现这一目标。

我可以创建一个表单,用户在其中添加价值,然后从其下面的表中复制粘贴sport_id和student_id,但这是不切实际的。

我已经在互联网上搜索了一段时间,但是我没有找到任何解决方案,如果可以的话,它只能用于一个外键。

有人知道该怎么做吗?如果是这样,我将不胜感激! :)

编辑:我应该提到表“ students”和“ sports”中已经包含了所有数据,我只需要使用该数据插入新的演奏即可。

2 个答案:

答案 0 :(得分:0)

我认为您要做的就是从表单($variable = $_GET["classinput"];)中获取输入值,然后连接到数据库并为每个表的输入查询编写mysqli查询。

像这样:

$query = mysqli_query($connection, "INSERT INTO STUDENTS(id,class,firstname,lastname) VALUES (null,\"$class\",\"$firstname\",\"$lastname\")");

对所有表执行此操作。

答案 1 :(得分:0)

由于数据已经在学生和体育活动的表格中,因此可以使用一些select语句来查询此信息,以便填充一些HTML下拉列表。使用选择查询和下拉菜单的优点在于,可以在向用户显示人类可读文本的同时,将选项value设置为数据库ID。然后,页面只需要监视表单的提交,并从下拉列表中插入ID和性能指标即可。我还没有测试下面的代码,但这是一个快速的示例,说明了如何工作。

注意:我喜欢使用PDO接口来准备SQL查询,以防止注入攻击。

<?php
$user = 'user';
$password = 'password';
$con = new PDO('mysql:dbname=dbname;host=127.0.0.1;chartset=urf8', $user, $password);

$student_stmt = $con->prepare('select * from students');
$student_stmt->execute();

$sport_stmt = $con->prepare('select * from sports');
$sport_stmt->execute();

if (isset($_GET['student']) && isset($_GET['sport']) && isset($_GET['value'])) {
    $student = $_GET['student'];
    $sport = $_GET['sport'];
    $value = $_GET['value'];
    $insert_stmt = $con->prepare('insert into preformances (sport_id, student_id, value) values (:sport_id, :student_id, :value)');
    $insert_stmt->bindParam(':sport_id', $sport);
    $insert_stmt->bindParam(':student_id', $student);
    $insert_stmt->bindParam(':value', $value);
    $insert_stmt->execute();
}
?>

<html>
    <head>
        <title>Form</title>
    </head>
    <body>
        <form action="self.php" method="get">
            Student:
            <select name="student">
    <?php while ($row = $student_stmt->fetch(PDO::FETCH_ASSOC)) { ?>
                <option value="<?php echo $row['id']; ?>"><?php echo $row['firstname'] . " " . $row['lastname']; ?></option>
    <?php } ?>
            </select>

            Sport:
            <select name="sport">
    <?php while ($row = $sport_stmt->fetch(PDO::FETCH_ASSOC)) { ?>
                <option value="<?php echo $row['sport_id']; ?>"><?php echo "$row['sportname']"; ?></option>
    <?php } ?>
            </select>
            Performance: <input name="value" type="text" />
            <button type="submit">Submit</button>
        </form>
    </body>
</html>

编辑: 在建议的注释中对代码进行了更改。