I have a module on my website which allows an admin to add some users to a group.
It is build like that (with selectboxes), you can select multiple users but only one group:
Users: Group:
- user 1 - group 1
- user 2 - group 2
- user 3
- user 4
- user 5
Inside the PHP, it looks like this:
$user_id = $_POST["user_id"]; //this can be an array
$group_id = $_POST["group_id"];
if (count($user_id) == 1) {
$sql = "INSERT IGNORE INTO users_groups (user_id, group_id) VALUES ($user_id[0],$group_id)";
} elseif (count($user_id) == 2) {
$sql = "INSERT IGNORE INTO users_groups (user_id, group_id) VALUES ($user_id[0],$group_id), ($user_id[1],$group_id)";
} elseif (count($user_id) == 3) {
$sql = "INSERT IGNORE INTO users_groups (user_id, group_id) VALUES ($user_id[0],$group_id), ($user_id[1],$group_id), ($user_id[2],$group_id)";
} elseif (count($user_id) == 4) {
$sql = "INSERT IGNORE INTO users_groups (user_id, group_id) VALUES ($user_id[0],$group_id), ($user_id[1],$group_id), ($user_id[2],$group_id), ($user_id[3],$group_id)";
} elseif (count($user_id) == 5) {
$sql = "INSERT IGNORE INTO users_groups (user_id, group_id) VALUES ($user_id[0],$group_id), ($user_id[1],$group_id), ($user_id[2],$group_id), ($user_id[3],$group_id), ($user_id[4],$group_id)";
} else {
echo'Error: Too many users selected';
exit;
}
How can I get this in a shorter code? Maybe with prepared statements because the inputs are from users.
Are you looking for something like this?
if(count($user_id)>5){
echo 'Error: Too many users selected';
exit;
}
$sql = "INSERT IGNORE INTO users_groups (user_id, group_id) VALUES ($user_id[0],$group_id)";
for ( $i = 1; $i < count($user_id); $i++) {
$sql .= ", ($user_id[$i],$group_id)"
}