Правильно ли я перебрал массив для записи в mysql?
Технически скрипт будет работать, но к нему есть много вопросов. :)
1)  foreach ($POST as $key => $value):
Зачем перебирать весь POST, когда вы работаете с формой, которая записывает данные в таблицу БД. В таблице все поля жестко заданы и известны заранее, поэтому лучше перебирать не весь POST, а заранее подготовленный объект/массив только с теми ключами, которые должны быть в вашей форме.
2) Отсутствует валидация.
Помимо фильтрации пустых значений, было бы хорошо, если каждое поле проходило бы еще и валидацию данных. Т.к. мы работаем с заранее известной формой, то и можем предположить, какие данные должны быть в ней.
2.1) Добавить к валидации еще и csrf защиту.
3) $sql = "INSERT INTO `table` ($keys) VALUES ($vals)";
Тут у вас аж 2 SQL инъекции. Первая в $keys - т.к. в post запросе можно будет добавить кастомных полей с произвольным кодом в ключах. К слову, почему нужно готовить для foreach свою форму.
Вторая в $vals. Тут нужно использовать подготавливаемые SQL запросы и в VALUES передавать ? , а не данные. А сами данные уже подставлять при извлечении подготовленного запроса.
Вы запускать это не пробовали что-ли?
строки без кавычек
потенциальные возможности для sql-инъекций
зачем-то применен альтернативный синтаксис управляющих конструкций (foreach с двоеточием).