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

时间:2019-07-15 23:12:49

标签: php mysqli phpmyadmin

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

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

这是我的后端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);

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

1 个答案:

答案 0 :(得分:1)

您从未使用类数据执行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">

但是,将用户名放在表单中不是一个好主意,因为用户可以对其进行编辑以为其他用户提交数据。将其设置为只读或隐藏无济于事,因为用户仍然可以使用开发人员工具对其进行更改。

最好将登录页面放在会话变量中,并在所有后续页面上使用它。用户无法修改。