Я создал две таблицы:
Первая таблица, «пользователи», состоящая из «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.
Я пытался найти ответ, но не знал, как его правильно сформулировать. Я новичок, поэтому хотелось бы получить подробное объяснение.
Начните с любой приличной (и недавней) книги или руководства по использованию php вместе с MySQL. Я уверен, что он охватывает большую часть того, что вам нужно знать. И прежде чем продолжить, узнайте о внедрении sql и важности подготовленных и связанных запросов.
См. Мой профиль для системы приложений на основе PHP и PDO, в которой показано, как использовать связанные параметры (среди прочего).






Боже милостивый, конечно, мне пришлось всю ночь смолить мозг, чтобы придумать, как вставить его в сеанс. Вот мое решение:
Я просто добавил этот ввод в свою форму:
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, но обязательно узнаю больше о подготовленных и связанных запросах.
Если персонаж создан пользователем, который вошел в систему, то у вас уже должен быть идентификатор пользователя, вошедшего в систему в вашем сеансе. Вставьте его оттуда. Пожалуйста, обратите внимание, что ваш скрипт подвержен атакам с использованием sql-инъекций.