php + mysql insertar error

Estoy creando un comentario de formulario simple que permitirá al usuario enviar un comentario e insertarlo en la base de datos utilizando php mysql jquery para no refrescar en la página todo funciona bien, pero el problema es que cuando escribo comento la base de datos mysql tome 4 líneas y llene los mismos datos, ¿alguien puede ayudarme con el error?

my_db.sql

-- -- Database: `my_db` -- -- -------------------------------------------------------- -- -- Table structure for table `comments` -- CREATE TABLE IF NOT EXISTS `comments` ( `id` tinyint(4) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `email` varchar(70) NOT NULL, `comments` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ; -- -- Dumping data for table `comments` -- INSERT INTO `comments` (`id`, `name`, `email`, `comments`) VALUES (1, 'test', '[email protected]', 'testcomments'), (2, 'test', '[email protected]', 'testcomments'), (3, 'test', '[email protected]', 'testcomments'), (4, 'test', '[email protected]', 'testcomments'); /*!40101 SET [email protected]_CHARACTER_SET_CLIENT */; /*!40101 SET [email protected]_CHARACTER_SET_RESULTS */; /*!40101 SET [email protected]_COLLATION_CONNECTION */; 

index.php // donde la forma y la función de jquery

     feedback page    $(function(){ $('#submit').click(function(){ $('#container').append('Currently loading'); var name = $('#name').val(); var email = $('#email').val(); var comments = $('#comments').val(); $.ajax({ url: 'submit_to_db.php', type: 'POST', data: 'name =' + name + '&email=' + email + '&comments=' + comments, success: function(result){ $('#response').remove(); $('#container').append('

' + result + '

'); $('#loading').fadeOut(500, function(){ $(this).remove(); }); } }); return false; }); });

submit_to_db.php

 stmt_init(); if($stmt->prepare($query)){ $stmt->bind_param('sss', $_POST['name'], $_POST['email'], $_POST['comments']); $stmt->execute(); } if($stmt){ echo "thank you .we will be in touch soon"; } else{ echo "there was an error. try again later."; } ?> 

De hecho, tomé tus scripts, los cargué en mi servidor, creé la tabla de la base de datos y probé el script.

Solo se está insertando una fila por envío.

Tu script funciona correctamente

Sin embargo, hay un defecto en su procedimiento de prueba.

También verifiqué la consola Firebug y la llamada AJAX está funcionando 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á inmenso dolor 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."; } 

Esta instrucción if siempre se evaluará como verdadera ya que la consulta se ejecuta (a menos que, por supuesto, MySQL no se esté ejecutando).

Lo que pretendía es ver si el inserto fue exitoso, y para eso, necesita 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 en su con una marca de tiempo para que pueda ver cuándo se insertan los registros. Esto te dará más información sobre lo que está pasando.

(2) Vacía tu mesa y prueba tu código nuevamente. Puede pensar que está recibiendo varias inserciones, pero también podría ser que presione el botón de enviar 4 veces.