将多个值添加到单行MYSQL / PHP中并分开

时间:2015-03-09 16:33:30

标签: php mysql mysqli

我正在尝试创建一个注册用户可以加入“旅行”的系统。一旦他提交了他想要加入的内容,就会捕获他的用户ID并将其发送到名为usersJoined的列中的数据库。这个想法是多个用户可以加入“旅行”,所有的id都存储在一个单元格中并用逗号分隔。为了稍后检索id,我将使用explode函数。

我的问题是,最后一个附加的id也有一个逗号。爆炸函数会将最后一个逗号后面的空格看作“对象”吗?它将存储在捕获爆炸函数的数组中。

有没有办法可以确保最后一个附加的ID没有逗号? 或者你有其他方法的建议吗?

这是我的代码:

function joinPost($id, $s_email){

    // Captures the user ID from a SESSION variable received outside this function
    $query = "SELECT `id` FROM `users` WHERE `email` = '$s_email'";
    $result = $this->db->query($query);

    if ($result->num_rows > 0) {        
        while($row = $result->fetch_array()) {
            $userID = $row['id'];
        }
    }
    $userIDwithComma = $userID . ','; // <-- this should be different, I guess 

    // Check if user joined already
    $query = "SELECT `usersJoined` FROM `trips` WHERE id = '$id'";
    $result = $this->db->query($query);

    if ($result->num_rows > 0) {
        while($row = $result->fetch_array()) {      
            $usersJoined = $row['usersJoined'];
        }
    }

    $users = explode(',', $usersJoined);
    $check = 0;

    foreach($users as $user){
        if($user == $userID){
            $check = 1;
        }
    }

    if($check != 1){
        $sql = "UPDATE trips SET usersJoined = CONCAT(usersJoined, ?) WHERE id = '$id'";

        if($stmt = $this->db->prepare($sql)) {
            $stmt->bind_param('s', $userIDwithComma);
            $stmt->execute();

            if($stmt->fetch()) {
                $stmt->close();
                return true;
            }
            return true;
        }
    } else {
        header('Location: trips.php?status=already_joined');
    }
}

3 个答案:

答案 0 :(得分:2)

哦,我的......你设计的数据库很糟糕。您应该创建多对多关系。现在,您有两个表:UsersTrips。您应该创建一个包含FK user_idtrip_id的新表格,如下所示:

UsersGoTrip
=====================
| user_id | trip_id | 
=====================
|       1 |       1 |
|       2 |       1 |
|       1 |       2 |
=====================

然后,添加,删除和选择特定旅行的用户或特定用户参加的旅行只需一个查询。

答案 1 :(得分:0)

$users = explode(',', rtrim($usersJoined, ',')); // trim commas from right

$users = array_filter(explode(',', $usersJoined)); // remove from array if empty value

答案 2 :(得分:0)

您必须删除最后一个逗号,

改变这个:

$stmt->bind_param('s', $userIDwithComma);

为:

$stmt->bind_param('s', substr($userIDwithComma, 0, -1));