66 DBMS 6 – ampliare il database
Aggiungiamo 2 radio button html nella login.php dopo la chiusura della table
Entra come : Alunno <input type="radio" name="tipo_utenete" value="alunno" checked=""> Docente <input type="radio" name="tipo_utente" value="docente"> <br><br>
Per far agire i 2 radio button insieme, mutuamente esclusivi (o clicco uno o l’altro) devo assegnare lo stesso nome (name=”tipo_utenete”), sarà poi il value a distinguerli.
Aggiungiamo il campo tipo_utente nel database, consiglio Mysql Workbench o PhpMyAdmin, ad ogni modoecco il comando SQL .
ALTER TABLE `quizMaker`.`users` ADD COLUMN `tipo_utente` VARCHAR(10) NULL AFTER `psw`;
Se vi sono già dei dati nel database, il campo deve essere settato come null e una volata, si va a riempire i record del nuovo campo in corrispondenza dei dati preesistenti e poi si può cambiare il tipo di campo in NOT NULL.
In elogin.php (quella migliorata_oop) aggiungiamo dopo aver recuperato la mail e la password una variabile che recupera il tipo di utente
$tipo_utente = $_POST['tipo_utente'];
aggiungiamo il tipo utente nel comando sql
$comandoSQL = "select iduser, psw, tipo_utente from users where email ='"
recupero il tipo utente dalla sessione e aggiungo nella parte dove si fa il redirect
$_SESSION['tipo_utente']=$riga['tipo_utente'];
aggiungiamo anche nell’insert di quando si preme nuovo utente il tipo
$comandoSQL = "insert into users values (null,'".$email."','".$psw."','".$tipo."')";
e anche nel redirect alla main.php del nuovo utente inseriamo
$_SESSION['tipo_utente']=$riga['tipo_utente'];
poi la main si occuperà di presentare l’interfaccia corrispondente al tipo di utente
Adesso ampliamo il database, creiamo 2 nuove, ognuna con la propria primary key autoincremetale tabelle la prima è argomenti:
Tabella argomenti campi: idargomento , argomento (varchar45)
Tabella domande campi: iddomanda , testo_domanda (varchar200)
a questo punto possiamo relazionare le 2 tabelle con una situazione 1 a molti (nel ns caso 1 argomento può corrispondere a molte domande ). Se usiamo il diagramma EER di workbench basta scegliere il simbolo 1:n e cliccare sulla tabella multi (domande) e poi sulla tabella 1 (argomenti).
Nella tabella domande verrà generato automaticamente un nuovo campo che servirà ad unire le 2 tabelle che chiamerò con la sigla fk (foreign key) e il nome che mi conduce alla tabella collegata
fkArgomento (not null)
Creiamo 1 nuova tabella risposte e la collego 1:n alla tabella domande:
Tabella risposte campi: idrisposta , testo_risposta (varchar200), punti (INT), fkDomanda (Not Null)
sincronizziamo il diagramma EER col ns vero database.
In workbench:
menu Database - Synchronize Model...
e questo è il comando SQL che ottengo:
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; CREATE TABLE IF NOT EXISTS `quizMaker`.`argomenti` ( `idargomento` INT(11) NOT NULL AUTO_INCREMENT, `argomento` VARCHAR(45) NULL DEFAULT NULL, PRIMARY KEY (`idargomento`)) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8; CREATE TABLE IF NOT EXISTS `quizMaker`.`domande` ( `iddomanda` INT(11) NOT NULL AUTO_INCREMENT, `testo_domanda` VARCHAR(200) NULL DEFAULT NULL, `fkArgomento` INT(11) NOT NULL, PRIMARY KEY (`iddomanda`), INDEX `fk_domande_argomenti_idx` (`fkArgomento` ASC), CONSTRAINT `fk_domande_argomenti` FOREIGN KEY (`fkArgomento`) REFERENCES `quizMaker`.`argomenti` (`idargomento`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8; CREATE TABLE IF NOT EXISTS `quizMaker`.`risposte` ( `idrisposta` INT(11) NOT NULL AUTO_INCREMENT, `testo_risposta` VARCHAR(200) NULL DEFAULT NULL, `punti` INT(11) NULL DEFAULT NULL, `fkDomanda` INT(11) NOT NULL, PRIMARY KEY (`idrisposta`), INDEX `fk_risposte_domande1_idx` (`fkDomanda` ASC), CONSTRAINT `fk_risposte_domande1` FOREIGN KEY (`fkDomanda`) REFERENCES `quizMaker`.`domande` (`iddomanda`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8; SET SQL_MODE=@OLD_SQL_MODE; SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;