BDQuest

De wikijoan
Salta a la navegació Salta a la cerca

Introducció

Bdquest.png

(TBD)

Versions

V1
===========
-càrrega de la bd v1
-càrrega de la bd municipis
-càrrega de la bd sakila

Aplicació web:
-primer exemple, base de dades municipis: "select * from provincies"
-es mostra la pregunta a contestar
-formulari bàsic: input per posar la resposta; botó enviar
-es mostra el resultat, el resultat correcte (si no era correcte), i la puntuació
-gestió dels errors
-credencials per la bd: bdquest/keiL2lai
-bd_questio mínim sobre la bd municipis (2 exemples)
-bd_questio mínim sobre la bd sakila (2 exemples)

V2
============
-càrrega de la bd v2
-mostra de preguntes sobre la bd municipis
-mostra de preguntes sobre la bd municipis
-mostra d'usuaris: 1 admin, 1 professor, dos alumnes
-ja podem fer qüetionaris (encara no s'avalua)
-podem canviar de qüestionari
-qüestionaris amb preguntes aleatòries (camp quest.random)

V3
=============
-càrrega de la bd v3
-només treballem amb el primer alumne
-avaluem els qüestionaris: update quest_usuari, quest_detall_usuari
-de moment un quest només es pot fer una vegada, per un usuari
-deshabilitar el botó Envia quan calgui
-quan el resultat d'una select no retorna res, posar '0 records'
-botó 'Test' (per veure el resultat de la select i que no toqui la bd)

v4 (ve de v3)
=============
-càrrega de la bd v4
-login contra google account (domini jaumebalmes.net) (OAuth2 amb PHP)
-identifico el mail, id_usuari, nom, cognoms, curs
-fins que no està identificat l'usuari no podem fer res.
-TODO: si un usuari es loga i no està a la base de dades no funciona (com és lògic, però s'ha d'avisar)
-TODO: acabar

v5 (ve de v3)
=============
-càrrega de la bd v5
-login contra google account (domini jaumebalmes.net) (OAuth2 amb Javascript)
-identifico el mail, id_usuari, nom, cognoms, curs
-fins que no està identificat l'usuari no podem fer res.
-TODO: si un usuari es loga i no està a la base de dades no funciona (com és lògic, però s'ha d'avisar)
-a la bd, canviem quest_detall.num per quest_detall.num_pregunta
-si estic fent un qüestionari, un error de sintaxi també compta com a malament. Per practicar hi ha el botó Test.
-SQL: guardo a la bd les respostes dels alumnes. Així es podrà fer un informe de les respostes dels alumnes i de les solucions correctes.

v6
=============
-càrrega de la bd v6
-incorporació de sentències DML (insert, update, delete) (fins ara només hem fet sentències select)
-per fer-ho creem la taula bd_questio_comprovacio, i el camp bd_questio.rollback
-amb la taula bd_questio_comprovacio puc saber les sentències que s'han d'executar per comprovar si el que ha fet l'alumne és correcte
-processar_rollback.php i processar_test_rollback.php
-possibilitat d'executar i processar vàries comandes DML separades per ; (nedessari per fer transaccions)
-treiem onclick, onload de index.html
-function processar(bd, solucio, sql_alumne) -> processar() (no cal arguments)
-les comandes poden acabar o no amb ;
-mode_developer = 1 | 0

v7
=============
-càrrega de la bd v7 (hi ha les dades que simulen que s'han fet qüestionaris)
-Quan un usuari acaba el qüestionari, pot veure l'informe (i se'l pot descarregar amb pdf)
-canvis diversos

v8
=============
-càrrega de la bd v8
-taula usuari -> alumne
-creem la taula professor (distingim entre professor i alumne)
-en el codi js i php, usuari->alumne
-Els usuaris només veuen els quests del seu curs (del seu professor)
-ja podem fer informes (només visibles per als professors)
-estat d'un qüestionari: actiu (1-true, 0-false)
-.gitignore
-que jquintana@jaumebalmes.net pugui actuar amb rol d'alumne o de professor. Per fer-ho, afegim el camp alumne.actiiu a la bd, per activar/desactivar els alumnes (i concretament, activar/desactivar el rol d'alumne, que aleshores fa de professor).

v9
=============
-càrrega de la bd v9
-canviem a SQL-92
-disposem de la bd langtrainer
-ja es poden fer exercicis amb CREATE, ALTER, DROP (el botó test està deshabilitat)
-hem afegit una capa de seguretat per tal de què no es puguin fer inserts, deletes, updates, creates, alters fora del context
-create table comarca: identificar l'objecte i posar comarca_xx (id de l'alumne). que valgui per create, drop, alter. Així no hi ha cap problema de concurrència entre companys, cada alumne treballa amb els seus objectes. Això només cal per DDL (create, alter, drop).
-rollback pot agafar els valors 0 (selects), 1 (insert, update, delete), 2 (create, alter, drop)
-els quests poden ser d'una sola pregunta
-el pwd està en el fitxer ocult v9/php/.pwd
-posar el diagrama de relacions de les bd que es treballen.
-refer el VIEW amb SQL92
-passar totes les selects en els php a SQL92
-catalanitzar el tabla i hilera
-esborrem open.php i close.php?
-canvi de logo en l'informe
-TODO: canvi de nom: BalmeSQL?

v10
=============
-Primera versió en producció, curs 21-22 (1r DAM INS Jaume Balmes de Barcelona) (els alumnes ho testegen)
-càrrega de la bd v10
-name="google-signin-client_id". Detectem si estem en localhost o en el servidor. Això ho hem de fer al principi de tot (en el head de index.html i professor.html) (no ho podem posar en el onload, perquè aleshores ja s'ha carregat tota la pàgina i malament rai).
-posem el correcte/incorrecte en color blau/vermell, i més gros.
-encodeURIComponent() per tal de que funcionin correctament les consultes que tenen LIKE '%%'
-Resolt el problema dels àlies dels camps. A processar.php (i processar_test.php) canvio mysqli_fetch_array per mysqli_fetch_row, i afegeixo head en el json que s'envia al frontend (també implica canvis a processar() i processar_test()).
-Els enunciats i les solucions poden contenir retorns de carro (\n)
-Hi ha un petit error quan selecciono la casella buida de la selectbox. Solucionat.
-falla per culpa del distinct (molt raro, només falla a l'institut): SELECT employee_id, first_name, last_name, salary FROM employees WHERE department_id = (SELECT distinct department_id FROM departments limit 1)
-mode_examen = 1 o 0 per tal de confirmar la pregunta abans d'enviar.
-Si la resposta està bé, que també puguin comparar la seva resposta amb la resposta proposada
-guardar també l'hora que s'ha fet el test (timestamp). Útil per quan es fa un examen i veure si s'han fet vàries intentones. He canviat en el camp alumne_quest.dia el tipus DATE per DATETIME.
-NOTA: recordar que en un examen, barrejar les preguntes amb el camp random
-create USER, DROP USER. He de donar permisos al bdquest sobre la taula mysql.
-També hem de donar permisos a l'usuari bdquest amb l'opció  WITH GRANT OPTION, per tal de poder executar les sentències GRANT.
-GRANT PERMISOS
-implemento PROCEDURES

Referències


creat per Joan Quintana Compte, juliol 2021-febrer 2022