1. Возможно в БД одно/несколько полей требует обязательного заполнения, а данные приходят не полностью => необходима проверка данных перед добавлением в БД
2. Поле Id, скорее всего, в БД имеет параметр AUTO_INCREMENT, который в свою очередь не даст поставить туда любое значение.
3. Перед тем, как использовать данные из входящих параметров (GET, POST, COOKIE) необходимо их, обязательно, проверять. Удалять спец. символы.
4. У вас, при проверке на ошибку запроса уже выполняется запрос. То есть в коде он выполнится дважды.
5. Некоторые имена полей для ввода в html не совпадают с индексами в $_POST массиве.
p.s. очень легко проверить, какие параметры пришли, а какие нет следующим образом:
print_r($_POST);