Gestione di un questionario (originariamente memorizzato in un DB) in XML

Documenti analoghi
Per poter interagire con un database in rete mediante uno script php bisogna. innanzitutto cerare una connessione. Ciò si ottiene mediante la funzione

Il sistema informativo deve essere di tipo centralizzato e accessibile mediante un computer server installato nella rete locale dell albergo.

INTRODUZIONE ALLE BASI DATI RELAZIONALI

INDICE. Vista Libretto Livello Digitale 2. Importazione di dati da strumento 3. Inserisci File Vari 5. Compensazione Quote 5.

Manuale di Aggiornamento BOLLETTINO. Rel B. DATALOG Soluzioni Integrate a 32 Bit

Servizio Conservazione No Problem

Modulo 17: Invio del BF tramite

NUVOLA COMUNICAZIONI

Lab. di Sistemi Operativi - Esercitazione - Comandi Shell

Procedura operativa per la gestione della funzione di formazione classi prime

Le nuove utenze di accesso a SICO (da quelle di ufficio a quelle personali)

Progetto B. Utenti. Di conseguenza si potranno avere solo utenti di questi tipi

1 DESCRIZIONE DELLE FUNZIONI REGISTRAZIONE UTENZE INTERNET Caricamento utente internet (data entry)... 3

Introduzione alle macchine a stati (non definitivo)

Esame Laboratorio di Sistemi Operativi Cognome Nome Mat.

Esempi di attribuzione dei seggi

Linguaggio C: introduzione

ACCESS. Database: archivio elettronico, dotato di un programma di interfaccia che facilita la registrazione e la ricerca dei dati.

Manuale operativo Registro di Classe

TERNA SRM- Aste On Line Manuale Fornitore

Oggetto: Utility per la variazione massiva del codice IVA.

MANUALE DI UTILIZZO DEL PORTALE WEB

Elezioni comunali Esempi di attribuzione dei seggi

DOCUMENTAZIONE WEB RAIN - ACCESSO CLIENTI

CONCETTI E ARCHITETTURA DI UN SISTEMA DI BASI DI DATI

PSC Doc Manuale d uso

Note_Batch_Application 04/02/2011

Gestione Stato di Famiglia

DESCRIZIONE CREAZIONE APP Si suddivide in 4 fasi di lavoro: 1. PIANIFICAZIONE; 2. PROGETTAZIONE; 3. SVILUPPO; 4. DISTRIBUZIONE.

UNIVERSITÀ DEGLI STUDI DI SALERNO. Guida alla compilazione del questionario per la Valutazione della Didattica

VALORIZZAZIONE MOVIMENTI DI SCARICO E VALORIZZAZIONE TRASFERIMENTO COSTI DI ANALITICA

Manuale utente Soggetto Promotore Erogatore Politiche Attive

Sistema Informativo del Turismo

B2B. Manuale per l utilizzatore.

ISCRIZIONI E MAV ON-LINE

2011 Politecnico di Torino 1

EXCEL: FORMATTAZIONE E FORMULE

Corso di Fondamenti di Informatica Classi di istruzioni 2

SISTEMA DI CONTROLLO E GESTIONE STAZIONI DI RICARICA E-CORNER PER VEICOLI ELETTRICI

V. Moriggia Modelli di Base Dati. Modelli di Base Dati. a.a. 2001/

GUIDA RAPIDA EDILCONNECT

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.

PROGRAMMAZIONE STRUTTURATA

I grafici a torta. Laboratorio con EXCEL. 1 Come si costruisce un grafico a torta

SQL Server Architettura Client-Server. SQL Server Introduzione all uso di SQL Server Dutto Riccardo.

Programma per la generazione di filastrocche

Fattura Elettronica e Piattaforma Certificazione dei Crediti (PCC).

Guida Compilazione Questionario SCUOLA DELL INFANZIA PARITARIA

Elementi base per la realizzazione dell unità di calcolo

La disposizione estetica della lettera commerciale

Università degli Studi di Ferrara

Un grafico utilizza i valori contenuti in un foglio di lavoro per creare una rappresentazione grafica delle relazioni esistenti tra loro;

Grafici. 1 Generazione di grafici a partire da un foglio elettronico

Unità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

Uso del pannello operatore

Questa è la finestra dei dettagli, è possibile selezionare anche da qui un modello o un pezzo per essere aperto.

Quick Start - Accesso e gestione dell area di amministrazione

Fast Patch 0336 Predisposizione operazioni superiori a euro Release 7.0

Architettura degli Elaboratori. Classe 3 Prof.ssa Anselmo. Appello del 18 Febbraio Attenzione:

Calcolo della Codeline Mod. F24

Veneto Lavoro via Ca' Marcello 67/b, Venezia-Mestre tel.: 041/

Funzioni condizionali

Laboratorio di Informatica L-A 1. ne: M se macchina, P se parte Nel caso di macchina seguono: L identificatore

Guida APPRENDISTATO. Tre le sue possibili tipologie:

Rifiuti LA GESTIONE DEI RIFIUTI. Rifiuti LA GESTIONE DEI RIFIUTI

Si considerino le seguenti specifiche per la realizzazione di un sito web per la gestione di abbonamenti a riviste di vario genere..

Manuale d uso DropSheep 4 imaio Gestione Pixmania-PRO Ver 1.1

3.5.1 PREPARAZ1ONE I documenti che si possono creare con la stampa unione sono: lettere, messaggi di posta elettronica, o etichette.

Indice. Introduzione Collegamento iniziale Identificazione della sede operativa (sede di lavoro) 5

Ministero delle Infrastrutture e dei Trasporti

UD4 - MATLAB. M-file. Efficienza degli algoritmi. Formati d uscita

Ogni PC, per iniziare a lavorare, ha bisogno di un sistema operativo. Infatti questo è il primo programma che viene eseguito e che permette

Cambio password utente

BASI DATI: algebra relazionale

Rotary International Distretto 2040 Ge.Ro. - Gestionale Rotary

Manuale cliente finale portale accertamenti delibera 40

Progetto NoiPA per la gestione giuridicoeconomica del personale delle Aziende e degli Enti del Servizio Sanitario della Regione Lazio

Navigare in Internet Laboratorio di approfondimento la creazione di siti web e/o blog. Marco Torciani. (Seconda lezione) Unitre Pavia a.a.

ANAGRAFE NAZIONALE CREDITI FORMATIVI. Manuale utente

IL CONCETTO DI FILE. È illecito operare oltre la fine del file.

Integrazione al Manuale Utente 1

Specifiche tecniche e di formato Presentazione comunicazione unica per la nascita d impresa

Gestione Commissioni Esami

SCRUTINIO ON LINE 1 PERIODO

4 GLI ARRAY E LE STRINGHE

GUIDA RAPIDA PER LA GESTIONE DELLE ADOZIONI LIBRI DI TESTO 2016/2017

AGGIORNAMENTO SOFTWARE

WINDOWS Avviare Windows95. Avviare Windows95 non è un problema: parte. automaticamente all accensione del computer. 2. Barra delle applicazioni

L accesso ai dispositivi esterni (tastiera, monitor, file,...) viene gestito mediante canali di comunicazione.

Compilazione on-line del Piano di Studio

Istruzioni per la compilazione del modulo di deposito per parti non rituali

Autodesk Map parte I digitalizzazione e importazione dati

M n a u n a u l a e l e o p o e p r e a r t a i t v i o v o Ver /12/2014

GUIDA ALLA DOMANDA DI AMMISSIONE AI CORSI DI DOTTORATO DI RICERCA A CURA DELLA UOS FORMAZIONE POST LAUREAM DOTTORATI DI RICERCA

Come utilizzare i riferimenti assoluti e relativi in Microsoft Excel

Analisi Curve di Carico

Layout Editor e Stampa

Il modello relazionale

Introduzione alla Piattaforma Bandi

(1) (2) (3) (4) 11 nessuno/a (1) (2) (3) (4) X è il minore tra A e B nessuno/a X è sempre uguale ad A X è il maggiore tra A e B

Transcript:

Gestione di un questionario (originariamente memorizzato in un DB) in XML Memorizzazione di un questionario in un DB (MySQL) Consideriamo il problema di memorizzare un semplice questionario, che si proponga di erogare domande a risposta chiusa con una scelta multipla. Il modello descritto non considera la possibilità di registrare le risposte o tener conto dell utente (identificazione dell utente tramite login), perciò il questionario viene svolto in modo anonimo e quindi, si presume, a scopo di puro esercizio. Per gestire un semplice sistema di erogazione di tali quiz, dovranno essere presenti almeno due componenti software, il DBMS, contentente a sua volta il DB, che conterrà le domande e risposte e il programma (per noi uno script in PHP), che permetterà di erogarle e di raccogliere la risposta dell utente e verificare e segnalare se essa sia corretta o meno. Per gestire un simile tipo di sistema per erogare quiz, basta una sola tabella suddivisa nei seguenti campi: Id (identificatore univoco del quiz) Testo domanda Risposta 1 Risposta 2 Risposta 3 Risposta 4 Corretta Ossia sarà presente nella tabella il testo della domanda, i testi delle varie possibili risposte, e l indicazione della risposta corretta, di solito come numero intero, limitato in questo caso tra 1 e 4. Erogato il quiz, opportuno codice PHP mostrerà sia la domanda che le possibili risposte e l utente dovrà dare la sua risposta (se siamo in presenza di una interfaccia grafica solitamente sotto forma di una selezione su una serie di radiobutton), e questo permetterà al programma di verificare se essa sia corretta o errata. Ulteriori varianti di erogazione di simili quiz, potrebbero prevedere che venga data la possibilità di una seconda risposta oppure definire un limite di tempo entro cui la risposta deve essere data, ecc. Nello script qui presentato, si è realizzata la versione più semplice di tale erogazione (una sola risposta, senza limite di tempo). La singola tabella sopra accenata può essere strtturata concretamente come SQL in 1 : CREATE TABLE `quesiti` ( `Id_quiz` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `Domanda` VARCHAR(200) NOT NULL, `Risposta1` VARCHAR(100) NOT NULL, `Risposta2` VARCHAR(100) NOT NULL, `Risposta3` VARCHAR(100) NULL DEFAULT NULL, `Risposta4` VARCHAR(100) NULL DEFAULT NULL, `Corretta` TINYINT(4) NOT NULL, PRIMARY KEY (`Id_quiz`) ) COLLATE='latin1_swedish_ci' ENGINE=InnoDB AUTO_INCREMENT=4; Il comando CREATE TABLE, indica il nome della tabella che andrà creata, successivamente all interno delle parentesi i vari campi di cui è composta la tabella (ossia quelli considerati prima), ed il relativo tipo di dato 1 Le specifiche in fondo al comando CREATE TABLE, si riferiescono al set di caratteri usato dal DB, all engine utilizzato dal DB (MySQL può utilizzare diversi engine per gestire i DB ognuno dalle diverse caratteristiche), ed in fondo, a che numero deve riprendere il contatore di conteggio nel caso di duplicazione / rigenerazione del DB stesso. Pagina 1

in essi contenuti, e se essi ammettano o no valore NULL. Per gli ultimi due campi si ammette valore NULL, in quanto le alternative di una generica domanda potrebbero prevedere anche la scelta Si / No, ossia tra due alternative e quindi Risposta3 e Risposta4 sarebbero NULL. Infine è presente il campo per indicare quale tra le risposte indicate sia quella corretta (campo Corretta), e l indicazione che il campo Id_Quiz sia chiave primaria ( definito dal comando PRIMARY KEY(...) ). La risposta dell utente verrà confrontata con il valore del campo Corretta, di tipo intero corto (TINYINT - 1 byte con segno, -128 -> 127). Gli altri campi sono di tipo alfanumerico dovendo memorizzare i testi delle risposte. Gli esempi non prevedono uno script per il caricamento, ma quindi che i quiz siano già caricati a mano, attraverso una opportuna interfaccia (magari grafica, come HeidiSQL) verso MySQL. Una ovvia possibilità è che si usufruisca del questionario direttamente dal DB stesso, estraendone ed utilizzandone opportunamente i dati. Un altra possibilità è che si trasformi il questionario in un file XML ed in base ad esso si eroghino le domande e le risposte. In pratica la struttura logica contenuta nella tabella del DB, può essere facilmente trasposta e riscritta come documento XML. Trasformazione del DB quiz in file XML Con un opportuno script PHP (indicato nel gruppo di file del modellino come riempi_quiz.php), il contenuto del DB può quindi essere trasposto in un file XML. Una possibile struttura di un file XML atto a contenere la struttura logica di questo DB potrà essere: <?xml version="1.0" encoding="utf-8"?> <questionario> <quiz id="1"> <domanda>... </domanda> <risposta1>...</risposta1> <risposta2>...</risposta2> <risposta3>...</risposta3> </risposta4> <corretta>2</corretta> </quiz> <quiz id="2">... </quiz> </questionario> Si osservi che tutti i tag sono racchiusi dai tag <questionario..., che è il tag root del documento XML. Sotto di esso vi sono diversi tag <quiz... che descrivono i vari quiz che compongono il questionario. Tali tag hanno ulteriori sottotag, indicanti le vari parti di un quiz descritte dalle colonne della tabella. Il contenuto di ognuno dei campi del DB viene trasposto come contenuto di questi tag. Si noti che la risposta 4 che risulta non presente viene rappresentata nel documento XML con un tag aperto/chiuso, ossia con contenuto nullo. Subito dopo si apre la sezione di documento relativa ad un nuovo quiz, delimitato da un tag <quiz, il quale ha un attributo id, indicante l id dello specifico quiz. Per portare i contenuti del DB nel documento XML, si dovrà: 1. Aprire una connessione verso il DBMS 2. Selezionare il DB 3. Effettuare una query che selezioni tutti i dati della tabella (SELECT * FROM Quesiti) 4. Ciclare sul recordset così ricavato per leggere i vari dati Pagina 2

5. Inserire i dati letti nel documento XML Il codice PHP che implementa i punti 1 e 2 è semplice: mysql_connect("localhost","root",""); mysql_select_db("db_xml"); Il punto 3 è eseguito grazie all istruzione: $rs = mysql_query("select * FROM Quesiti"); A questo punto si ottiene l insieme di record $rs, che dovrà essere scandito via codice; per scansirlo si inizia a leggere il recordset una linea (un record) alla volta, tramite l istruzione: $riga = mysql_fetch_array($rs); Che permette di estrarre una nuova riga ($riga) dall insieme di righe $rs. Una volta estratto il singolo record, l accesso ai campi di cui è costituito avviene come accesso ad elementi di array associativo, ove le chiavi sono il nome dei singoli campi e i valori sono ovviamente i contenuti dei campi stessi. $id = $riga['id_quiz']; $domanda = $riga['domanda']; $risposta1 = $riga['risposta1']; $risposta2 = $riga['risposta2']; $risposta3 = $riga['risposta3']; $risposta4 = $riga['risposta4']; $corretta = $riga['corretta']; A questo punto ottenuti tutti i dati del singolo quiz, è possibile trasporli opportunamente nel documento XML; considerato quindi il nodo root rappresentato dal tag <questionario..., si vanno ad aggiungere a questo un nuovo sottonodo (un ulteriore quiz), al quale viene associato un attributo ed il suo valore, poi a questo nodo appena creato (rappresentante il quiz nel suo complesso), verranno aggiunti tag figli che descrivano i valori delle singole componenti del quiz (la domanda, le risposte, la risposta corretta). $nuovo = $root->addchild("quiz"); $nuovo->addattribute("id",$id); $nuovo->addchild("domanda", $domanda); $nuovo->addchild("risposta1", $risposta1); $nuovo->addchild("risposta2", $risposta2); $nuovo->addchild("risposta3", $risposta3); $nuovo->addchild("risposta4", $risposta4); $nuovo->addchild("corretta", $corretta); queste operazioni vengono svolte in modo ciclico riempendo il documento di tutte le informazioni relative a tutti i quiz presenti nel questionario: while ($riga) (... operazioni di composizione del documento XML...) $riga = mysql_fetch_array($rs); } L istruzione in evidenza all interno del ciclo serve a ricavare ad ogni ciclo un nuovo record da elaborare. Il ciclo termina quando la lettura del record rende il valore booleano false. Pagina 3

Erogazione di un questionario strutturato in XML Per rendere utilizzabile il questionario (leggendolo dal documento XML appena creato) in ogni caso è necessario del codice (script eroga_questionario.php) del tutto diverso di quello utilizzato per trasporre i dati dal DB in un documento XML. Tale codice infatti, effettua una scrittura del documento XML, mentre il codice che và ad erogare i quiz deve ovviamente leggere, e non alterare, il documento XML stesso. Presupposta la presenza di un file XML derivato dal DB, o comunque già esistente nel formato indicato, consideriamo ora quindi il codice per poter erogare i quiz definiti da tale file XML. Innanzitutto si dovrà caricare il file XML di modo da averne a disposizione la struttura XML stessa: $root = simplexml_load_file("quiz_pieno.xml"); La disponibilità della struttura XML è derivata dall avere accesso al nodo root, dal quale è possibile accedere a tutti i suoi sottonodi. I sottonodi di primo livello sono come noto i quiz stessi. E possibile in PHP iterare sull insieme dei sottonodi grazie al ciclo foreach nella forma: foreach($root as $quiz)... Ogni nodo di tipo quiz a sua volta è costituito da sottonodi diversificati di cui abbiamo già parlato poco prima; A tali nodi essendo di nome ben definito è possibile anche accedere direttamente con la forma $quiz-><nomesottonodo> In tal modo via via che si scandiscono i vari quiz è possibile ricavarne i valori dei campi con l accesso al contenuto stesso; ciò è necessario anche per mostrare gli effettivi testi della domanda e delle risposte: echo "\n"; echo $quiz->domanda. "\n\n"; echo "1-". $quiz->risposta1. "\n"; echo "2-". $quiz->risposta2. "\n"; if ($quiz->risposta3-> tostring()!= "") echo "3-". $quiz->risposta3. "\n"; if ($quiz->risposta4-> tostring()!= "") echo "4-". $quiz->risposta4. "\n"; le ultime due stampe sono condizionate, perchè se il testo non è presente per le risposte 3 e 4 non devono apparire neppure gli indicatori numerici. Subito dopo aver proposto le varie scelte si passa a rilevare la risposta di chi stà svolgendo il quiz. Essa sarà data, nel nostro caso, tramite un input testuale, essendo l interfaccia del nostro script a carattere e non grafica: echo "\nrisposta? "; $risp = trim(fgets(stdin)); Lo script non prevede, nel nostro codice, un controllo di casi in cui la risposta sia al di fuori dei valori previsti tra cui scegliere. Subito dopo lo script controlla se il valore inserito dall utente sia uguale a quello presente nel campo che indica la risposta corretta (accessibile con $quiz->corretta); in un caso ovviamente dà risposta che è stato individuata la risposta corretta, nell altro l output indica che la risposta è errata: if ($risp == $quiz->corretta) echo "Bravo hai risposto correttamente!\n"; else eval("\$r = \$quiz->risposta". $quiz->corretta. ";"); echo "No. La risposta corretta era ". $r."\n"; } Pagina 4

Una spiegazione per l uso e la sintassi della funzione eval(...). La eval(...) presente con tale nome in molti linguaggi interpretati, permette di valutare (evaluate appunto) una espressione di codice nel linguaggio stesso (in questo caso in linguaggio PHP). Da notare che: Il simbolo $, per essere intepretato come carattere e non come variabile in una stringa, deve avere anteposto lo \. In questo modo esso diviene davvero il carattere $ in quella stringa. Nella eval è possibile ovviamente effettuare anche assegnazioni ad una variabile, in questo caso una assegnazione ad una variabile detta $r. L espressione... \$quiz->risposta. $quiz->corretta. ;, stà ad indicare il valore di una delle risposte e precisamente di quella corretta. In pratica la stringa nella eval stessa viene composta così che stia ad indicare l accesso al valore di risposta1, risposta2, ecc, a seconda di quale numero viene accodato alla prima parte. Ad esempio se la risposta corretta fosse la 3, la stringa che rappresenta l espressione PHP da valutare diverrà: $r = $quiz->risposta3; con il suo ovvio significato, ossia mettere in $r il contenuto della risposta corretta (nel caso ipotizzato la 3). Successivamente viene stampata una scritta indicante tale risposta corretta, assieme ad un messaggio che indica all utente che ha sbagliato risposta. Infine ad ogni nuovo quiz c è l attesa di un tasto prima di continuare, di modo da erogare i quiz in modo frazionato e non tutti assieme: echo "Premi un tasto per continuare...\n"; exec("pause"); L erogazione del questionario si realizza ciclando queste operazioni, rispondendo alle domande selezionando una opportuna risposta, finchè tutti i quiz non siano stati letti dal documento XML e svolti. Prof. Alberto Veneziani Pagina 5