php - 将主键连接到 MySQL 中另一个表的行
问题描述
我创建了两个表:
第一个表,“users”,由“user_id”(主键)、“user_name”、“user_email”和“user_pw”组成
第二个表,“characters”,由“char_id”(主键)、“uid”、“name”、“race”和 age 组成。
我的目的是让用户创建字符,而数据库将每个创建的字符分配给正确的 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。
我试图寻找答案,但我不知道如何正确地制定它。我是初学者,所以详细的解释将不胜感激。
解决方案
亲爱的耶稣,肯定花了我一整夜的时间来弄清楚如何将它插入会话中。这是我的解决方案:
我只是在我的表单中添加了这个输入:
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 上编程,但我会确保了解有关准备好的和绑定的查询的更多信息。
推荐阅读
- subscription - 如何在不为每个用户创建子进程的情况下创建用户级计划作业
- powershell - Powershell Get-AzureADAuditSignInLogs 限制
- jquery - OWASP ZAP 用于 ASP.NET MVC 应用程序的易受攻击的 JS 库
- snowflake-cloud-data-platform - 在雪花中加入递归 CTE 不服从 where 子句
- excel - Excel vba 将列转移到另一个表
- mysql - 基于登录的系统,每个用户都有不同的数据节点js
- r - 将图例移出情节
- python - 为什么我在抓取实时数据时得到一个空列表?
- javascript - 从条件内容中触发 onClick 函数
- django - 单元测试中的 API 完整路径