У вас же одинаковые записи. И вообще, это условие странное. Тогда уж так надо было: private function query($query, $params = NULL){.... if ($params !== NULL)
Вы же не привели полный код вашего index.php Может, оно там рефрешится у вас на уровне HTTP Location или на уровне JS, или meta. В итоге в браузере вы видите результат лишь одного инсерта, а на деле их два. Это я включил телепатию. Без _полного_ кода мне не понять. А вам помогут понять логи.
выводите все отладочные сообщения в файл c "a+", а потом вдумчиво его просмотрите :) По приведенному вами коду неясно по какому событию происходит INSERT и может ли это событие произойти два раза
1) с чекбоксом событие лучше вешить не на onChange, а на onClick
2) jquery тут явно лишний
3) есть html-элемент input[type=radio], специально для этого предназначенный
сделайте две картинки (UIImage), меняйте их циклически. Пока одна показывается, во вторую - невидимую - загружается следующий кадр. Затем меняйте их местами (одну показывайте, вторую скрывайте). Если не будет успевать подгружаться след кадр, сделайте три картинки по тому же принципу.