вставка данных в таблицы с общими внешними ключами - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть 2 таблицы, которые требуют вставки из одной формы.

Table1 - user_info(user_id(primary), full_name, username, user_password, email)

Таблица 2 - user_personal_info(user_id(foreign), username(foreign), full_name(foreign), user_profession, user_phone, age)

user_id - это автоматически -инкремент.

Я пытаюсь взять информацию, полученную в регистрационной форме, и вставить ее в каждую таблицу. Однако первая таблица принимает всю информацию, а вторая - нет. Я пытался сделать две отдельные вставки безуспешно. Любая помощь будет оценена.

$full_name = $_POST['full_name'];
$username = $_POST['username'];
$email = $_POST['email'];
$user_password = $_POST['user_password'];
$password_hash = password_hash($user_password, PASSWORD_BCRYPT);

$id = $_SESSION['user_id'];
$user_profession = NULL;
$user_phone = NULL;
$age = NULL;

$query_user_info = $connection -> prepare("SELECT * FROM user_info WHERE EMAIL=:email");
$query_user_info->bindParam("email", $email, PDO::PARAM_STR);
$query_user_info->execute();

if ($query_user_info-> rowCount() > 0) {
    echo '<p class="error">The email address is already registered!</p>';
}

if ($query_user_info-> rowCount() == 0) {
    $query_user_info = $connection->prepare("INSERT INTO user_info(full_name,username,user_password,email) VALUES (:full_name, :username, :password_hash,:email)");
    $query_user_info->bindParam("full_name", $full_name, PDO::PARAM_STR);
    $query_user_info->bindParam("username", $username, PDO::PARAM_STR);
    $query_user_info->bindParam("password_hash", $password_hash, PDO::PARAM_STR);
    $query_user_info->bindParam("email", $email, PDO::PARAM_STR);
    $result = $query_user_info->execute();

    $query_user_personal_info = $connection->prepare ("INSERT INTO user_personal_info(user_id,full_name, username, email, user_profession, user_phone, age) VALUES (:id, :full_name, :username, :email, :user_profession, :user_phone, :age)");
    $query_user_personal_info->bindParam("user_id", $id, PDO::PARAM_INT);
    $query_user_personal_info->bindParam("full_name", $full_name, PDO::PARAM_STR);
    $query_user_personal_info->bindParam("username", $username, PDO::PARAM_STR);
    $query_user_personal_info->bindParam("email", $email, PDO::PARAM_STR);
    $query_user_personal_info->bindParam("user_profession", $user_profession, PDO::PARAM_STR);
    $query_user_personal_info->bindParam("user_phone", $user_phone, PDO::PARAM_INT);
    $query_user_personal_info->bindParam("age", $age, PDO::PARAM_INT);
    $result2 = $query_user_personal_info->execute();

    if ($result) { // create a profile page.
        echo '<p class="success">Your registration was successful!</p>';
    } else {
        echo '<p class="error">Something went wrong!</p>';
    }


    if ($result2) { // create a profile page.
        echo '<p class="success">Your registration was successful!</p>';
    } else {
        echo '<p class="error">no bueno :(</p>';
    }
}

1 Ответ

0 голосов
/ 04 апреля 2020

Разве вы не должны получать вставленный идентификатор из таблицы user_info?

Попробуйте это

$full_name = $_POST['full_name'];
$username = $_POST['username'];
$email = $_POST['email'];
$user_password = $_POST['user_password'];
$password_hash = password_hash($user_password, PASSWORD_BCRYPT);

$user_profession = NULL;
$user_phone = NULL;
$age = NULL;

$query_user_info = $connection -> prepare("SELECT * FROM user_info WHERE EMAIL=:email");
$query_user_info->bindParam("email", $email, PDO::PARAM_STR);
$query_user_info->execute();

if ($query_user_info-> rowCount() > 0) {
    echo '<p class="error">The email address is already registered!</p>';
}

if ($query_user_info-> rowCount() == 0) {
    $query_user_info = $connection->prepare("INSERT INTO user_info(full_name,username,user_password,email) VALUES (:full_name, :username, :password_hash,:email)");
    $query_user_info->bindParam("full_name", $full_name, PDO::PARAM_STR);
    $query_user_info->bindParam("username", $username, PDO::PARAM_STR);
    $query_user_info->bindParam("password_hash", $password_hash, PDO::PARAM_STR);
    $query_user_info->bindParam("email", $email, PDO::PARAM_STR);
    $result = $query_user_info->execute();
    $id = $query_user_info->lastInsertId();

    $query_user_personal_info = $connection->prepare ("INSERT INTO user_personal_info(user_id,full_name, username, email, user_profession, user_phone, age) VALUES (:id, :full_name, :username, :email, :user_profession, :user_phone, :age)");
    $query_user_personal_info->bindParam("user_id", $id, PDO::PARAM_INT);
    $query_user_personal_info->bindParam("full_name", $full_name, PDO::PARAM_STR);
    $query_user_personal_info->bindParam("username", $username, PDO::PARAM_STR);
    $query_user_personal_info->bindParam("email", $email, PDO::PARAM_STR);
    $query_user_personal_info->bindParam("user_profession", $user_profession, PDO::PARAM_STR);
    $query_user_personal_info->bindParam("user_phone", $user_phone, PDO::PARAM_INT);
    $query_user_personal_info->bindParam("age", $age, PDO::PARAM_INT);
    $result2 = $query_user_personal_info->execute();

    if ($result) { // create a profile page.
        echo '<p class="success">Your registration was successful!</p>';
    } else {
        echo '<p class="error">Something went wrong!</p>';
    }


    if ($result2) { // create a profile page.
        echo '<p class="success">Your registration was successful!</p>';
    } else {
        echo '<p class="error">no bueno :(</p>';
    }
}

Также есть $user_profession, $user_phone и $age требуется в вашей базе данных? Если нет, то вам не нужно, чтобы эти значения вставлялись в вашу таблицу, если они по умолчанию имеют нулевые значения.

Попробуйте изменить это значение на

$full_name = $_POST['full_name'];
$username = $_POST['username'];
$email = $_POST['email'];
$user_password = $_POST['user_password'];
$password_hash = password_hash($user_password, PASSWORD_BCRYPT);

$query_user_info = $connection -> prepare("SELECT * FROM user_info WHERE EMAIL=:email");
$query_user_info->bindParam("email", $email, PDO::PARAM_STR);
$query_user_info->execute();

if ($query_user_info-> rowCount() > 0) {
    echo '<p class="error">The email address is already registered!</p>';
}

if ($query_user_info-> rowCount() == 0) {
    $query_user_info = $connection->prepare("INSERT INTO user_info(full_name,username,user_password,email) VALUES (:full_name, :username, :password_hash,:email)");
    $query_user_info->bindParam("full_name", $full_name, PDO::PARAM_STR);
    $query_user_info->bindParam("username", $username, PDO::PARAM_STR);
    $query_user_info->bindParam("password_hash", $password_hash, PDO::PARAM_STR);
    $query_user_info->bindParam("email", $email, PDO::PARAM_STR);
    $result = $query_user_info->execute();
    $id = $query_user_info->lastInsertId();

    $query_user_personal_info = $connection->prepare ("INSERT INTO user_personal_info(user_id,full_name, username, email) VALUES (:id, :full_name, :username, :email)");
    $query_user_personal_info->bindParam("user_id", $id, PDO::PARAM_INT);
    $query_user_personal_info->bindParam("full_name", $full_name, PDO::PARAM_STR);
    $query_user_personal_info->bindParam("username", $username, PDO::PARAM_STR);
    $query_user_personal_info->bindParam("email", $email, PDO::PARAM_STR);
    $result2 = $query_user_personal_info->execute();

    if ($result) { // create a profile page.
        echo '<p class="success">Your registration was successful!</p>';
    } else {
        echo '<p class="error">Something went wrong!</p>';
    }


    if ($result2) { // create a profile page.
        echo '<p class="success">Your registration was successful!</p>';
    } else {
        echo '<p class="error">no bueno :(</p>';
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...