De hecho, tomé sus scripts, los cargué en mi servidor, creé la tabla de la base de datos y probé el script.
Solo se inserta una fila por envío.
Su secuencia de comandos funciona correctamente.
Sin embargo, hay una falla en su procedimiento de prueba.
También revisé la consola de Firebug y la llamada AJAX funciona como se esperaba.
A menos que tenga otros diagnósticos, no creo que pueda ayudarlo más.
Alerta de error
Hay un error en su código que le causará un dolor inmenso en su vida en los próximos años...
if($stmt){
echo "thank you .we will be in touch soon";
}
else{
echo "there was an error. try again later.";
}
Este if
La declaración siempre se evaluará como verdadera desde que se ejecuta la consulta (a menos, por supuesto, que MySQL no se esté ejecutando).
Lo que pretendía es ver si la inserción fue exitosa, y para eso, debe verificar:
if($stmt->affected_rows){...}
$stmt->affected_rows
devolverá -1 en caso de falla o +1 en caso de éxito.
Estrategias de depuración
(1) Agregue un campo adicional con una marca de tiempo para que pueda ver cuándo se insertan los registros. Esto le dará más información sobre lo que está pasando.
(2) Vacíe su tabla e intente su código nuevamente. Puede pensar que está recibiendo múltiples inserciones, pero también podría ser que presione el botón Enviar 4 veces.