У меня есть три таблицы:
пользователей:
user_id (int, auto increment, primary key)
username (varchar (100))
(the rest is not immportant)
команды:
team_id(int, auto increment, primary key)
teamname (varchar (100))
(the rest is not important)
team_users:
team_id int,
user_id int,
primary key (team_id, user_id),
foreign key (team_id) references teams (team_id),
foreign key (user_id) references users (user_id)
У меня есть форма, в которой пользователь может создать команду, а также добавить имена участников, которые будут разделены запятыми.
То, что я хотел бы, это вставить детали команды в таблицу команды и имена членов, после использования разнесения и поиска их соответствующих user_ids в таблице пользователей, вставить в team_users вместе с последним созданным идентификатором команды.
То, что я до сих пор, это:
<?php
session_start();
$conn = mysqli_connect('xxx', 'xxx', 'xxx', 'xxx');
if (!$conn) {
die("connection failed: ".mysqli_connect_error());
}
$teamname = $_POST['teamname'];
$members = $_POST['members'];
$games = $_POST['games'];
$image = $_POST['image'];
$sql = mysqli_query($conn,"INSERT INTO teams (teamname, games, images, founded) VALUES ('$teamname', '$games', '$image', NOW())");
$id = mysqli_insert_id($conn);
if(!empty($id)) {
$membernames = explode(',', $members);
foreach($membernames as $value) {
$sql = mysqli_query($conn,"insert into team_users (team_id, user_id)
select teams.team_id, users.user_id
from teams, users where users.username = '$value' and teams.team_id = '$id'");
}
if(false === $sql) die(mysqli_error($conn));
}
?>
Моя проблема в том, что когда я выполняю это, он вставляет только один, первый добавленный идентификатор пользователя в team_users, однако пользователь может добавить более одного пользователя, чтобы стать членом команды. Почему я делаю не так?
Я создал столбец имени пользователя в таблице team_users и вместо этого удалил user_id и изменил запрос (вставка в значения team_users (team_id, username) (‘$ id’, ‘$ value’), чтобы посмотреть, будут ли вставлены все имена членов и но мне не нужны их имена пользователей в таблице team_users, мне нужен их user_id.
Я очень плохо знаком с PHP и Mysql, и я прочитал много форумов и подобных вопросов, но не смог найти ответ. Я застрял на этом с незапамятных времен, кто-то может помочь? Спасибо огромное!
Попробуйте добавить это в качестве первой строки внутри вашего foreach
петля.
$value = trim($value);
Это связано с тем, что когда вы взрываете строку, разделенную запятыми, существует высокая вероятность того, что пробелы могут быть добавлены к ней.
Например, Когда мы пишем строку через запятую "Adam, Eve, William"
, обратите внимание на пробел после каждой запятой. Поэтому, когда вы взорветесь с запятой, массив будет иметь Adam
, <space>Eve
, <space>William
Так что в вашем запросе только Adam
работает с Eve
а также William
пустое пространство добавлено в начале.
Когда вы обрезаете, пробелы удаляются. Надеюсь, это объясняет.
Других решений пока нет …