После взрыва функция не может вставить все строки в MySQL

У меня есть три таблицы:

пользователей:

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, и я прочитал много форумов и подобных вопросов, но не смог найти ответ. Я застрял на этом с незапамятных времен, кто-то может помочь? Спасибо огромное!

0

Решение

Попробуйте добавить это в качестве первой строки внутри вашего foreach петля.

$value = trim($value);

Это связано с тем, что когда вы взрываете строку, разделенную запятыми, существует высокая вероятность того, что пробелы могут быть добавлены к ней.

Например, Когда мы пишем строку через запятую "Adam, Eve, William", обратите внимание на пробел после каждой запятой. Поэтому, когда вы взорветесь с запятой, массив будет иметь Adam, <space>Eve, <space>William

Так что в вашем запросе только Adam работает с Eve а также William пустое пространство добавлено в начале.

Когда вы обрезаете, пробелы удаляются. Надеюсь, это объясняет.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector