I'd like to share what I do in my application. This is basically same with my answer in this question.
- After user submit, and before entering to database, I will fetch the existing data in the database into an array. Example:
$collection = array('111', '112', '113', '114');
(This is just for example. In real, it should fetch from database then put the value to array)
- I will check the new user input in two step. First step is to see if it already in the database or not. If it not, then insert. Otherwise ignore:
foreach ( $inputs as $input )
{
if ( ! in_array($input, $collection) )
{
//do insert here
}
}
Then in second loop, I do it in reverse, to delete the data that not selected by user.
foreach ( $collection as $data )
{
if ( ! in_array($data, $inputs) )
{
//do delete here
}
}
In your case, you might or might not need the second loop. I needed this since I make the input as checkboxes, that the user can choose to activate / deactivate, thus I translate it as insert and delete.
Since you will implement it using multi-select, then basically it's same with my checkboxes.
If you have structure or code example, feel free to share it, and I will help you fine tune it (of course with my style, that might or might not optimized yet).