php 我想自动将父表中的ID放入子表中

jaql4c8m  于 2023-08-02  发布在  PHP
关注(0)|答案(2)|浏览(104)

我有两个单独的表,每个表将分别输入表单数据到phpmyadmin DB中。
用户和家长分别
我使用的是过程式PHP和一个用于表单数据的预处理语句。我已经成功地将每个表单的数据插入到Db中,但是当涉及到将users表中的usersId插入到Parents表user_id(fk)中时,我在数据库中只收到NULL。然后,我可以从PHPmyadmin的下拉列表中使用适当的数据手动更新该列。
我可以将信息放入表中,这一点很好,但我希望将usersID自动插入到父表的user_Id列中。
下面是我使用的准备好的语句。

<?php

if (isset($_POST["submit"])) {
$mFname = $_POST["mFname"];
$mLname = $_POST["mLname"];
$mEmail = $_POST["mEmail"];
$mPhone = $_POST["mPhone"];

$fFname = $_POST["fFname"];
$fLname = $_POST["fLname"];
$fEmail = $_POST["fEmail"];
$fPhone = $_POST["fPhone"];

$addressL1 = $_POST["addressL1"];
$addressL2 = $_POST["addressL2"];
$city = $_POST["city"];
$stateAbbr = $_POST["stateAbbr"];
$zip = $_POST["zip"];
$user_Id = $_POST['user_Id'];

include_once 'dbh.inc.php';
include_once 'functions.inc.php';
 
    $sql1 = "UPDATE parent INNER JOIN users ON users.usersId = parent.user_id SET parent.user_id = users.usersId";

    if (mysqli_query($conn, $sql1)) {
    echo "Record updated successfully";
    } else {
    echo "Error updating record: " . mysqli_error($conn);
    }

    $sql = "INSERT INTO parent (mFname, mLname, mEmail, mPhone, fFname, fLname, fEmail, fPhone, addressL1, addressL2, city, stateAbbr, zip, user_id) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?);";

    $stmt = mysqli_stmt_init($conn);
    if (!mysqli_stmt_prepare($stmt, $sql)) {
        echo "SQL error";
    } else {
        mysqli_stmt_bind_param($stmt, "ssssssssssssis", $mFname, $mLname, $mEmail, $mPhone, $fFname, $fLname, $fEmail, $fPhone, $addressL1, $addressL2, $city, $stateAbbr, $zip, $user_id);
        mysqli_stmt_execute($stmt);
 
    }
    header("Location: ../mf2.php?parentinfo=success");
}

字符串
Picture of the dropdown I can manually change in the DB to include usersId
上图显示数据进入表中,但是如图所示,user_Id列将显示NULL。我需要users表中的信息,特别是usersID列,以便在提交时自动显示在父表中user_Id列下。
请帮助我,并与我交谈,就好像我只是学习这一点,因为我是。你越详细越好。提前感谢大家的帮助。
我尝试使用一个内部连接,发现它说更新记录在一个点上是成功的,但当我检查Db时,我发现情况并非如此。
我尝试在准备好的语句中使用usersId会话变量,但没有成功。
我不知道我在这里做错了什么,但任何帮助都将不胜感激。

vc9ivgsu

vc9ivgsu1#

首先,作为PHP和DB的新手,我错误地认为创建外键约束会自动将数据从一个表推到另一个表,事实并非如此。
两个表之间的连接是为了数据完整性,而不是像我想的那样移动数据。Primary key - Foreign key约束链接表并构建一个关系,确保您无法破坏表之间的链接,但实际上不会将任何内容从一列移动或插入到另一列。
话虽如此,我运行了我的初始sql prepared语句,正如你在上面的代码中看到的那样,然后立即运行以下代码,该代码使用了两个单独表中的INNER JOIN,然后将parent.user_id的值设置为与users. usersId相同的值。
我相信有一个更好的方法来做到这一点,但鉴于我是新的所有这一切,我想分享的解决方案,似乎是工作形式我现在。

$serverName = "localhost";
    $dBUsername = "root";
    $dBPassword = "";
    $dBName = "members"; 

    $conn = new mysqli($serverName, $dBUsername, $dBPassword, $dBName);

    $sql1 = "UPDATE parent INNER JOIN users ON parent.mEmail OR parent.fEmail = email SET parent.user_id = users.usersId;";
   
    if ($conn->query($sql1) === TRUE) {
        echo "New Record Created Successfully";
    } else {
        echo "Error: " .$sql1 . "<br>" . $conn->error;
    }
    $conn->close();

字符串

vvppvyoh

vvppvyoh2#

根据您的描述和代码,您似乎希望将数据插入到父表中,同时使用users表中相应的usersId更新同一表中的user_id列。问题似乎是父表中的user_id列在更新后仍为NULL。
要实现所需的行为,您应该首先将数据插入到父表中,然后使用相应的usersId更新user_id列。此外,您需要确保在mysqli_stmt_bind_param函数中具有正确的变量名。
下面是如何修改PHP代码来实现这一点:

<?php
if (isset($_POST["submit"])) {
    // ... (your existing code for getting form data)

    include_once 'dbh.inc.php'; // Assuming this file contains your database connection
    include_once 'functions.inc.php'; // Assuming this file contains your other functions

    // Step 1: Insert data into the parent table
    $sql = "INSERT INTO parent (mFname, mLname, mEmail, mPhone, fFname, fLname, fEmail, fPhone, addressL1, addressL2, city, stateAbbr, zip, user_id) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?);";

    $stmt = mysqli_stmt_init($conn);
    if (!mysqli_stmt_prepare($stmt, $sql)) {
        echo "SQL error";
    } else {
        mysqli_stmt_bind_param($stmt, "ssssssssssssis", $mFname, $mLname, $mEmail, $mPhone, $fFname, $fLname, $fEmail, $fPhone, $addressL1, $addressL2, $city, $stateAbbr, $zip, $user_Id);
        mysqli_stmt_execute($stmt);
    }

    // Step 2: Update the user_id column in the parent table with the corresponding usersId
    $lastInsertedId = mysqli_insert_id($conn); // Get the auto-generated ID from the last insert
    $userId = $_POST['user_Id']; // Assuming this is the usersId from the users table

    $updateSql = "UPDATE parent SET user_id = ? WHERE id = ?;";
    $updateStmt = mysqli_stmt_init($conn);
    if (!mysqli_stmt_prepare($updateStmt, $updateSql)) {
        echo "SQL error";
    } else {
        mysqli_stmt_bind_param($updateStmt, "ii", $userId, $lastInsertedId);
        mysqli_stmt_execute($updateStmt);
    }

    header("Location: ../mf2.php?parentinfo=success");
}
?>

字符串
说明:
1.在第一步中,使用预准备语句将数据插入到父表中,就像在代码中已经做过的那样。
1.在插入之后,使用mysqli_insert_id($conn)获取父表中最后一个插入行的自动生成的ID。
1.然后,使用检索到的lastInsertedId和user_Id(假设这是users表中的usersId),使用另一条准备好的语句更新父表中的user_id列。
通过执行这些步骤,您应该能够将数据插入到父表中,并将users表中正确的usersId自动添加到父表的user_id列中。

相关问题