Вставьте входное значение в две разные таблицы с одинаковым идентификатором пользователя - PullRequest
0 голосов
/ 18 мая 2019

Мне нужно отправить значения имени пользователя, пароля, почты, имени и фамилии в две разные таблицы в моей базе данных. Я сделал это возможным с помощью этого кода, и я получил правильные значения. У меня есть одна проблема. Когда информация о пользователе попадает в таблицу «users», она автоматически генерирует один userId. Тот же самый userId мне нужно использовать и поместить в другую таблицу "usermeta", чтобы связать информацию с нужным пользователем. Теперь происходит то, что я получаю userId в таблице users, но в таблице usermeta userId = 0 для всех новых пользователей. Кто-нибудь может мне помочь?

if (isset($_POST['username']) and isset ($_POST['password'])) {
    $username   = $mysqli->real_escape_string($_POST['username']);
    $password   = md5($mysqli->real_escape_string($_POST['password']));
    $email      = $mysqli->real_escape_string($_POST['mail']);
    $fname      = $mysqli->real_escape_string($_POST['fname']);
    $lname      = $mysqli->real_escape_string($_POST['lname']);

    $query = <<<END
    INSERT INTO users(username,pass,email,admin)
    VALUES('{$username}','{$password}','{$email}','{$_POST['admin']}')
END;

    $q = <<<END
    INSERT INTO usermeta(first_name,last_name)
    VALUES('{$fname}','{$lname}')
END;

if ($mysqli->query($query) !== TRUE) {
    die("Could not query database" . $mysqli->errno . " : " . $mysqli->error);
    }
if ( $mysqli->query($q) !== TRUE) {
    die("Could not query database" . $mysqli->errno . " : " . $mysqli->error);
    header('Location:home.php');
    } 
}

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

Спасибо!

EDIT:

Я пытался реализовать ваши разные комментарии. Большое спасибо за ответы! Если я пытаюсь получить последний идентификатор между $ запросом и $ q, вывод будет равен 0. Если я использую команду:

if ($mysqli->query($query) === TRUE) {
    $last_id = $mysqli->insert_id;
    echo $last_id;
} else {
    echo "Error: " . $query . "<br>" . $mysqli->error;
}

Я получил правильный идентификатор. Но как я могу использовать эту переменную для нового $ q? Похоже, что функция завершается после выполнения if.

Спасибо! :)

Ответы [ 2 ]

0 голосов
/ 18 мая 2019

Хорошо, мне удалось это сделать. Спасибо ребята за помощь!

Рабочий код выглядит так:

$query = <<<END
INSERT INTO users(username,pass,email,admin)
VALUES('{$username}','{$password}','{$email}','{$_POST['admin']}')
END;

if ($mysqli->query($query) === TRUE) {
    $last_id = $mysqli->insert_id;
} else {
    echo "Error: " . $query . "<br>" . $mysqli->error;
}

$q = <<<END
INSERT INTO usermeta(first_name,last_name, user_id)
VALUES('{$fname}','{$lname}','{$last_id}')
END;

if ($mysqli->query($q) !== TRUE) {
    die("Could not query database" . $mysqli->errno . " : " . $mysqli->error);
}
0 голосов
/ 18 мая 2019

Вы можете использовать LAST_INSERT_ID(), чтобы получить значение идентификатора автоинкремента, который был создан в вашей последней вставке. ( Документы здесь)

Так что попробуйте:

$q = <<<END

INSERT INTO usermeta(first_name,last_name, userId)
VALUES('{$fname}','{$lname}', LAST_INSERT_ID();)
END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...