Na verdade, peguei seus scripts, carreguei-os no meu servidor, criei a tabela de banco de dados e testei o script.
Apenas uma linha está sendo inserida por envio.
Seu script está funcionando corretamente.
No entanto, há uma falha em seu procedimento de teste.
Também verifiquei o console do Firebug e a chamada AJAX está funcionando conforme o esperado.
A menos que você tenha outros diagnósticos, acho que não posso ajudá-lo mais.
Alerta de bug
Há um bug em seu código que causará imensa dor em sua vida nos próximos anos...
if($stmt){
echo "thank you .we will be in touch soon";
}
else{
echo "there was an error. try again later.";
}
Este
if
A instrução sempre será avaliada como verdadeira desde que a consulta seja executada (a menos, é claro, que o MySQL não esteja em execução). O que você pretendia é ver se a inserção foi bem sucedida, e para isso, você precisa verificar:
if($stmt->affected_rows){...}
$stmt->affected_rows
retornará -1 em caso de falha ou +1 em caso de sucesso. Estratégias de depuração
(1) Adicione um campo extra no seu com um timestamp para que você possa ver quando os registros são inseridos. Isso lhe dará mais informações sobre o que está acontecendo.
(2) Esvazie sua tabela e tente seu código novamente. Você pode pensar que está recebendo várias inserções, mas também pode ser que você tenha pressionado o botão enviar 4 vezes.