Sounds like you are missing a unique contraint on your table which will prevent the duplicates. Also, I suspect a coding error perhaps, and an exception handler that is ignoring errors maybe?
If a check by eye doesn't show up the cause, disable, by commenting out, the exception handlers and try to recreate the problem. I suspect some exception or other will direct you to the cause.