Подключение первичного ключа к строке другой таблицы в MySQL

Я создал две таблицы:

  • Первая таблица, «пользователи», состоящая из «user_id» (первичный ключ), «user_name», «user_email» и «user_pw»

  • Вторая таблица, «символы», состоящая из char_id (первичный ключ), uid, имени, расы и возраста.

Я намерен дать пользователям возможность создавать персонажей, в то время как база данных присваивает каждому созданному персонажу правильный user_id, чтобы можно было узнать, кто и какой символ создал.

(Система входа в систему уже работает).

Я начал с формы, чтобы заполнить таблицу символов:

<form method = "post" action = "includes/createcharacter.inc.php">
    <input type = "text" name = "name">
    <input type = "text" name = "race">
    <input type = "number" name = "age">
<button type = "submit" name = "create">Erstellen</button>
</form>

За ним следует файл createcharacter.inc.php, который выполняет за ним php:

<?php

if (isset($_POST['create'])) {

include_once 'dbh.inc.php';

$name = mysqli_real_escape_string($conn, $_POST['name']);
$race = mysqli_real_escape_string($conn, $_POST['race']);
$age = mysqli_real_escape_string($conn, $_POST['age']);

$sql = "INSERT INTO characters (name, race, age) VALUES ('$name', '$race', '$age');";
mysqli_query($conn, $sql);
header("Location: ../createcharacter2.php?charactercreated");
exit();

}

Теперь без проблем вставить символьные данные имени, расы и возраста. Но я не могу понять, как «связать» строку uid моей таблицы символов со строкой user_id моей таблицы user, чтобы назначить каждому созданному символу user_id.

Я пытался найти ответ, но не знал, как его правильно сформулировать. Я новичок, поэтому хотелось бы получить подробное объяснение.

Если персонаж создан пользователем, который вошел в систему, то у вас уже должен быть идентификатор пользователя, вошедшего в систему в вашем сеансе. Вставьте его оттуда. Пожалуйста, обратите внимание, что ваш скрипт подвержен атакам с использованием sql-инъекций.

Shadow 02.09.2018 02:17

Начните с любой приличной (и недавней) книги или руководства по использованию php вместе с MySQL. Я уверен, что он охватывает большую часть того, что вам нужно знать. И прежде чем продолжить, узнайте о внедрении sql и важности подготовленных и связанных запросов.

Strawberry 02.09.2018 02:19

См. Мой профиль для системы приложений на основе PHP и PDO, в которой показано, как использовать связанные параметры (среди прочего).

halfer 04.09.2018 11:09
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
121
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Боже милостивый, конечно, мне пришлось всю ночь смолить мозг, чтобы придумать, как вставить его в сеанс. Вот мое решение:

Я просто добавил этот ввод в свою форму:

if (isset($_SESSION['u_id'])) {

    echo "
<form method='post' action='includes/createcharacter.inc.php'>
<input type='hidden' name='created_by' value='".$_SESSION['u_id']."'>
<input type='text' name='name'>
<input type='text' name='race'>
<input type='number' name='age'>
<button type='submit' name='create'>Erstellen</button>
</form>";

}

Я также изменил имя столбца «uid» на «created_by», как предлагалось в - теперь удаленном ответе -. Для меня имеет больше смысла. После этого включаемый файл выглядел так:

    <?php

if (isset($_POST['create'])) {

include_once 'dbh.inc.php';

$name = $_POST['name'];
$race = $_POST['race'];
$age = $_POST['age'];
$created_by = $_POST['created_by'];


$sql = "INSERT INTO characters (name, race, age, created_by) VALUES ('$name', '$race', '$age', '$created_by');";
mysqli_query($conn, $sql);
header("Location: ../createcharacter2.php?charactercreated");
exit();

}

Спасибо за совет относительно риска атак sql-инъекций. Я сейчас программирую на XAMPP, но обязательно узнаю больше о подготовленных и связанных запросах.

Другие вопросы по теме