【问题标题】:Connecting a primary key to row of another table in MySQL将主键连接到 MySQL 中另一个表的行
【发布时间】:2018-09-01 23:40:48
【问题描述】:

我创建了两个表:

  • 第一个表“users”,由“user_id”(主键)、“user_name”、“user_email”和“user_pw”组成

  • 第二个表,“字符”,由“char_id”(主键)、“uid”、“姓名”、“种族”和年龄组成。

我的目的是让用户创建字符,同时数据库将每个创建的字符分配给正确的 user_id,这样就可以找出谁创建了什么字符。

(登录系统已经运行)。

我从表格开始,填写字符表:

<form method="post" action="includes/createcharacter.inc.php">
    <input type="text" name="name">
    <input type="text" name="race">
    <input type="number" name="age">
<button type="submit" name="create">Erstellen</button>
</form>

后面是createcharacter.inc.php文件,后面是做php的:

<?php

if (isset($_POST['create'])) {

include_once 'dbh.inc.php';

$name = mysqli_real_escape_string($conn, $_POST['name']);
$race = mysqli_real_escape_string($conn, $_POST['race']);
$age = mysqli_real_escape_string($conn, $_POST['age']);

$sql = "INSERT INTO characters (name, race, age) VALUES ('$name', '$race', '$age');";
mysqli_query($conn, $sql);
header("Location: ../createcharacter2.php?charactercreated");
exit();

}

现在插入姓名、种族和年龄的字符数据是没有问题的。但我不知道如何将我的字符表的 'uid' 行与我的用户表的 user_id 行“连接”,以将每个创建的字符分配给一个 user_id。

我尝试寻找答案,但不知道如何正确表述。我是初学者,所以详细的解释将不胜感激。

【问题讨论】:

  • 如果角色是由登录的用户创建的,那么您应该已经在会话中拥有登录用户的 ID。从那里插入。请注意,您的脚本会受到 sql 注入攻击。
  • 从任何体面的(和最近的)书籍或教程开始,将 php 与 MySQL 一起使用。我相信它会涵盖你需要知道的大部分内容。在继续之前,请先了解 sql 注入以及准备好的和绑定的查询的重要性
  • 查看我的个人资料,了解基于 PHP 和 PDO 的应用程序系统,该系统说明了如何使用绑定参数(以及其他内容)。

标签: php mysql


【解决方案1】:

亲爱的耶稣,确实花了我一整晚的时间才弄清楚如何将其插入会话中。这是我的解决方案:

我只是在表单中添加了这个输入:

if (isset($_SESSION['u_id'])) {

    echo "
<form method='post' action='includes/createcharacter.inc.php'>
<input type='hidden' name='created_by' value='".$_SESSION['u_id']."'>
<input type='text' name='name'>
<input type='text' name='race'>
<input type='number' name='age'>
<button type='submit' name='create'>Erstellen</button>
</form>";

}

我还将“uid”列的名称更改为“created_by”,就像 - 现在已删除响应 - 建议的那样。对我来说更有意义。之后,包含文件如下所示:

    <?php

if (isset($_POST['create'])) {

include_once 'dbh.inc.php';

$name = $_POST['name'];
$race = $_POST['race'];
$age = $_POST['age'];
$created_by = $_POST['created_by'];


$sql = "INSERT INTO characters (name, race, age, created_by) VALUES ('$name', '$race', '$age', '$created_by');";
mysqli_query($conn, $sql);
header("Location: ../createcharacter2.php?charactercreated");
exit();

}

感谢有关 sql 注入攻击风险的建议。我现在正在 XAMPP 上编程,但我会确保了解有关准备好的和绑定的查询的更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    • 1970-01-01
    相关资源
    最近更新 更多