在phpmyadmin中,我将如何从单个数据库内的两个不同表将两个特定的行相互链接并保持自动化?



我在单个phpmyadmin数据库中有2个表 - 一个在注册时存储基本的用户帐户信息(用户名,电子邮件等),另一个存储用户在文本字段中键入的任何内容,他们在其中输入其类的名称,但也从第一个表中获取用户名并将其存储在所有类旁边的第二个表中的另一行中。第一个表执行其预期操作,用户数据在单击"注册"后显示在那里。用户单击"注册"后,将定向到类页面,在该页面中键入第二个表的数据。但是,单击"提交"后,出现"找不到对象"错误消息,并且第二个表完全为空。甚至第一个表中的用户名也没有出现在第二个表中。作为参考 - 在网页的 URL 中,用户在类框中键入的任何内容都会出现,但是 URL 的末尾显示"submit="。

我尝试搜索了几个小时,但真的找不到解决方案(因此把我带到这里)。我修改了很多代码,但仍然无法找出问题所在。据我所知,一切似乎都是对的——但显然结果并非如此。我有我的连接文件将我的代码连接到 phpymadmin 数据库,我的 HTML 文件提供了基本的文本布局,由于一切都出现了,所以必须正常工作,最后我的文件提供了专门用 PHP 编写的后端机制 - 这就是我猜测问题最有可能的地方。我已经尝试了几个小时的几个功能无济于事,观看视频试图获得更好的想法,但仍然无法更改结果 - 甚至没有错误"找不到对象"。我还这样做,以便用户必须在类页面上重新输入他们的用户名,这也以完全相同的结果结束。作为参考,我使用的是sublimetext3,这是XAMPP(运行Apache和MySQL)的最新版本,它带有PHPmyadmin(我的数据库和表存储用户信息)。

这是我的后端PHP代码(我有一些定义按钮的必需文件,以及诸如" class1"之类的名称。

if (isset($_GET['submit'])) {
$box1 = $_GET['class1'];
$box2 = $_GET['class2'];
$box3 = $_GET['class3'];
$box4 = $_GET['class4'];
$username = $_POST['uid'];
$stmt = mysqli_stmt_init($conn);
$result = mysqli_stmt_get_result($stmt);
if ($row = mysqli_fetch_assoc($result)) {
$userCheck = username_verify($username, $row['uid']); 
if ($userCheck == true) {
header("Location: ../class_result.php?");
exit();
}

/n 为了重新创建用户键入的文本字段(称为"类"),请参阅下面的代码(请注意,这是一个单独的文件):

<form action="classcreation.inc.php" method="GET">
<input type="text" name="uid" placeholder="Username">
<input type="text" name="class1" placeholder="">
<input type="text" name="class2" placeholder="">
<input type="text" name="class3" placeholder="">
<input type="text" name="class4" placeholder="">
<input type="text" name="class5" placeholder="">
<input type="text" name="class6" placeholder="">
<input type="text" name="class7" placeholder="">
<input type="text" name="class8" placeholder="">
<button type="submit" name="submit">Submit</button>
</form> 

最后是我的连接文件 - 虽然我几乎可以肯定这是正确的,但我发布它是为了让回答者看到我已经建立了连接以及我这样做的方法:

$dbservername = "localhost";
$dBUsername = "root";
$dBPassword = "";
$dBName = "loginsystem";
$conn = mysqli_connect($dbservername, $dBUsername, $dBPassword, $dBName);

如前所述,用户在类页面上单击提交后,他们在称为"类"的文本字段中输入的任何内容都应出现在相应的第二个表中。除此之外,第二个表应该接收键入信息的用户的用户名 - 该用户名已经从第一个表中收集。但相反,第二个表是完全空的。此外,他们将被定向到另一个页面,现在只说"欢迎!(对消息使用简单的 echo 语句),但会收到"找不到对象错误。最后一部分是否与数据库空虚有关,我不是100%确定,但我相信是。

您从未对类数据执行过 SQL 查询。

我建议更改 HTML,以便将所有类输入字段命名为name="class[]"。这将使$_GET['class']成为可以循环的数组。

if (isset($_GET['submit'])) {
$username = $_GET['uid'];
$stmt = $conn->prepare("SELECT username FROM users WHERE username = ?");
$stmt->bind_param("s", $username);
$stmt->execute();
$stmt->bind_result($result_user);
$userCheck = username_verify($username, $result_user);
if ($userCheck) {   
$stmt = $conn->prepare("INSERT INTO user_classes (username, class) VALUES (?, ?)");
$class = null;
$stmt->bind_param("ss", $username, $class);
foreach ($_GET['class'] AS $class) {
if (!empty($class)) { // skip empty input fields
$stmt->execute();
}
}
}
}

当然,更改查询中的表和列名称以匹配实际表。

从登录页面创建表单时,您可以像这样填写uid输入:

<input type="text" name="uid" value="<?php echo $username; ?>" placeholder="Username">

但是,将用户名放在表单中是一个坏主意,因为用户可以对其进行编辑以提交其他用户的数据。将其设为只读或隐藏没有多大帮助,因为用户仍然可以使用开发人员工具更改它。

如果登录页面将其放在会话变量中,并在所有后续页面上使用它,那就更好了。用户无法修改此功能。

最新更新