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;