Como corrigir quizzes que não salvam respostas no Tutor LMS
O que é o quiz que não salva respostas no Tutor LMS?
O Tutor LMS grava cada tentativa de quiz em tabelas customizadas no banco (a tentativa em si e as respostas de cada pergunta), separadas das tabelas padrão do WordPress. Quando o aluno clica em enviar, o plugin dispara uma requisicao AJAX para o admin-ajax.php, calcula a nota e persiste a tentativa. O instrutor ve o resultado em Tutor LMS, Quiz Attempts. Quando algo nessa cadeia falha, o quiz parece funcionar para o aluno, mas a tentativa não e registrada ou chega ao painel com as respostas vazias e a nota zerada.
Como identificar
- O aluno responde, clica em ‘Submit Quiz’ e a tela trava no botão de envio ou recarrega sem mostrar o resultado.
- A tentativa não aparece em Tutor LMS, Quiz Attempts, ou aparece na aba ‘Pending’ com as colunas de resposta em branco e nota zero.
- No console do navegador (F12, aba Rede) a chamada admin-ajax.php do Tutor retorna 400, 403 ou 500 ao enviar o quiz.
- No builder do curso, ao salvar uma pergunta com muitas opções, ela some ou volta sem as alternativas (o quiz não guarda a própria configuração).
- O log mostra ‘Table tutor_quiz_attempts doesnt exist’ ou erro de tabela ausente ao abrir a tela de tentativas.
Antes de começar: Faca backup do banco antes de importar SQL ou recriar tabelas pelo phpMyAdmin, e teste em staging quando o site estiver no ar. Nunca remova o nonce do envio do quiz para ‘resolver’ o AJAX: isso abre brecha de CSRF nas tentativas dos alunos.
Como prevenir
- Após instalar ou migrar o Tutor LMS, confirme em phpMyAdmin que as tabelas wp_tutor_quiz_attempts e wp_tutor_quiz_attempt_answers existem.
- Mantenha o max_input_vars do PHP em 5000 ou mais em sites com muitos quizzes e perguntas longas.
- Mantenha o JavaScript do Tutor fora da minificacao e as páginas de quiz e licao fora do cache, e refaca uma tentativa de teste após cada atualização de plugin, tema ou regra de segurança.
Causa
- Tabelas customizadas do Tutor (wp_tutor_quiz_attempts e wp_tutor_quiz_attempt_answers) não foram criadas na ativacao, situacao documentada pela Themeum em hosts que pulam o processo de criação de tabelas.
- Limite max_input_vars do PHP no padrão 1000: quizzes com muitas perguntas e opções excedem esse número de campos no POST e o PHP trunca os dados, perdendo respostas e configurações do builder.
- Requisicoes AJAX do Tutor (acoes tutor_quiz_attempt_save e tutor_save_quiz no admin-ajax.php) bloqueadas por firewall, WAF ou plugin de segurança, retornando 403 antes de gravar a tentativa.
- Plugin de cache ou de otimização minificando o JavaScript do Tutor ou servindo um nonce expirado na página do quiz, fazendo o envio falhar com 'Invalid nonce' silencioso.
- Limite de execução do PHP (max_execution_time ou memory_limit) baixo, cortando o calculo da nota em quizzes longos antes da gravacao concluir.
Como resolver
- Confirme que as tabelas do Tutor existem: abra o phpMyAdmin do host e procure pelas tabelas de tentativa de quiz no banco. Se elas não existirem, e a causa documentada pela Themeum para hosts que pulam a criação na ativacao.
wp_tutor_quiz_attempts wp_tutor_quiz_attempt_answers - Recrie as tabelas reativando o plugin: desative e reative o Tutor LMS para disparar o instalador, que tenta criar as tabelas ausentes. Em hosts onde isso falha, importe o SQL oficial das tabelas pelo phpMyAdmin conforme a doc de troubleshooting.
Plugins -> Tutor LMS -> Desativar -> Ativar - Aumente o max_input_vars do PHP: quizzes grandes enviam mais de 1000 campos por POST. Eleve o limite no php.ini ou no .htaccess e reinicie o PHP, depois salve o quiz de novo e refaca uma tentativa de teste.
max_input_vars = 5000 ; em .htaccess: php_value max_input_vars 5000 - Libere o AJAX do Tutor na segurança: no plugin de segurança ou no WAF do host, libere as chamadas ao admin-ajax.php usadas pelo Tutor para salvar tentativa. Abra um quiz, pressione F12, va na aba Rede e confirme que o envio retorna 200, não 403.
tutor_quiz_attempt_save tutor_save_quiz - Tire o quiz do cache e da minificacao de JS: no plugin de cache, exclua as páginas de licao e quiz do cache e remova o JavaScript do Tutor da minificacao e combinacao. Isso evita nonce expirado e script quebrado no envio.
/wp-content/plugins/tutor/assets/js/ - Suba os limites de execução do PHP: se a tentativa some so em quizzes longos, aumente o tempo e a memória do PHP para que o calculo da nota termine antes de gravar.
max_execution_time = 120 memory_limit = 256M
APACHE
# .htaccess na raiz do WordPress — eleva os limites de POST que o Tutor LMS
# usa para salvar a tentativa de quiz (campos por requisicao, tempo e memoria).
# Use isto quando o host roda PHP como modulo Apache (mod_php).
php_value max_input_vars 5000
php_value max_input_time 120
php_value max_execution_time 120
php_value memory_limit 256M
php_value post_max_size 32M
Perguntas frequentes
Por que o Tutor LMS quiz não salva respostas mesmo com o aluno enviando?
Na maioria dos casos faltam as tabelas customizadas do Tutor no banco, o max_input_vars do PHP truncou o envio, ou a chamada AJAX para o admin-ajax.php foi bloqueada por segurança. Comece confirmando as tabelas no phpMyAdmin e olhando o retorno da requisicao no console.
Onde vejo as tentativas de quiz dos alunos no Tutor LMS?
Em Tutor LMS, Quiz Attempts. La aparecem as abas All, Passed, Failed e Pending, com a nota e as respostas de cada aluno. Se a tentativa não aparece ou vem com respostas em branco, o problema esta na gravacao, não na exibicao.
Como sei se faltam tabelas do Tutor no banco de dados?
Abra o phpMyAdmin e procure por wp_tutor_quiz_attempts e wp_tutor_quiz_attempt_answers. A Themeum documenta que alguns hosts pulam a criação dessas tabelas na ativacao, e sem elas o quiz não tem onde gravar a tentativa.
O que o max_input_vars tem a ver com o quiz não salvar?
Cada pergunta e opção do quiz vira um campo no POST. No padrão de 1000, um quiz grande estoura esse limite e o PHP descarta os campos extras, perdendo respostas e configurações do builder. Subir o max_input_vars para 5000 resolve esse corte.
Um plugin de segurança pode impedir o quiz de salvar?
Sim. Firewalls e WAFs costumam bloquear chamadas ao admin-ajax.php, inclusive as acoes tutor_quiz_attempt_save e tutor_save_quiz. Se o envio do quiz retorna 403 no console, libere essas rotas na regra de segurança.
O cache pode fazer o aluno perder a tentativa de quiz?
Pode. Se o cache serve um nonce expirado ou a minificacao quebra o JavaScript do Tutor, o envio falha silenciosamente. Exclua as páginas de quiz do cache e tire o JS do Tutor da minificacao para evitar isso.
Reativar o plugin recria as tabelas perdidas?
Em muitos hosts sim: desativar e reativar o Tutor dispara o instalador, que tenta criar as tabelas ausentes. Onde o host bloqueia a criação automática, e preciso importar o SQL oficial das tabelas pelo phpMyAdmin.
Esse problema apaga as tentativas antigas dos alunos?
Recriar tabelas que nunca existiram não apaga dados, porque não havia o que perder. Mas qualquer operacao no banco pede backup antes, já que importar SQL ou recriar tabelas em um banco com dados pode sobrescrever registros existentes.














