Как перезапросить форму отправки?
Берем двойной листок в клеточку, пишем фамилию, число, месяц, ниже - "работа над ошибками".
1) Читаем почему нельзя хранить данные о состоянии в инпутах(в том числе хидден).
2) Нет листинга start.php и остальных, если там есть какая-то обработка этого  куска - $q = 0; // номер текущего вопроса то еще нормально (хотя как правильное решение все равно не подходит), иначе думаем как будет работать при $q = 0;
3) что будет если $_POST['q'] = -2? И как такое возможно?
4) Учим пхп: header()
Остальные вопросы на дом в качестве самостоятельной работы.
Очень просто: обрабатываем форму, после обработки ничего не выводим, а делаем редирект со статусом 303 на ту же страницу, с которой пришли. После этого эта страница запрашивается методом GET, а если сделать «Обновить», то форма заново не отправляется (и запрос не появляется).
Т.е. код примерно такой:header($_SERVER['SERVER_PROTOCOL'].' 303 See other');
header('Location: '.($_SERVER['HTTPS'] ? 'https://' : 'http://').$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);