我有三张桌子:
用户:
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)
我有一个表单,用户可以在其中创建一个团队,也可以添加成员名称,这些名称将是逗号分隔值。
我想要的是将团队详细信息插入团队表和成员名称,在使用explode并在users表中找到匹配的user_ids后,将其与最后创建的团队ID一起插入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));
}
?>
我的问题是,当我执行此操作时,它只会插入一个,第一个添加用户的id到team_users中,但是用户可以添加多个用户作为团队成员。我为什么做错了?
我在team_users表中创建了一个用户名列,然后删除了user_id并更改了查询(插入到team_users(team_id,username)值(&#39; $ id&#39;,&#39; $ value& #39;)看它是否会插入所有成员名称而且确实如此。但是我不需要在team_users表中使用他们的用户名,我需要他们的user_id。
我是PHP和Mysql的新手,我已经阅读了很多论坛和类似的问题,但无法找到答案。我几天都坚持这个,有人可以帮忙吗?谢谢你mucH!
答案 0 :(得分:0)
尝试将其添加为foreach
循环中的第一行。
$value = trim($value);
这是因为,当您爆炸逗号分隔的字符串时,很可能会向其添加空格。
例如当我们写一个逗号分隔的字符串"Adam, Eve, William"
时,请注意每个逗号后面的空格。因此,当您使用逗号进行爆炸时,数组将包含Adam
,<space>Eve
,<space>William
因此,在您的查询中,Adam
只有Eve
才有效,而William
在开头添加了空格。
修剪时,会移除空格。希望这能解释。