Per analizzare i casi relativi alla textarea
e alla select
del nostro form partiamo con la prima, in sé lo schema è sempre quello del metodo crea_text()
ma con qualche piccola variante:
case 'textarea':
$out.=$this->crea_textarea($array['nome'],$row[$array['nome']],$array['label']);
break;
...
private function crea_textarea($nome,$valore,$label){
$out='<div>';
$out.='<label for="'.$nome.'">'.$label.'</label><br />';
$out.='<textarea id="'.$nome.'" name="'.$nome.'" class="form-control">'.stripslashes($valore).'</textarea><br /><br />';
$out.='</div>';
return($out);
}
Lo schema è simile a quello dei casi precedenti, la peculiarità sta nell'opportunità di collegare un editor WYSIWYG nella pagina news.php
per trasformare la textarea in un editor HTML, ovviamente il vantaggio che abbiamo in termini di potenza dello strumento potrebbe rivelarsi una debolezza dal punto di vista della sicurezza in quanto aumentano le difficoltà sui controlli da eseguire a carico del codice generato.
Per quanto riguarda il caso della select
la situazione è decisamente diversa: infatti in questo caso il presupposto è che le option
siano generate dinamicamente mediante una query sul database. Pertanto il metodo che genera l'HTML dovrà essere alimentato con tre ulteriori parametri per definire la tabella su cui lavorare, l'id da assegnare al value
della option e il testo visibile.
I tre parametri saranno configurati nella tabella struttura
. Nel metodo crea_select()
, dopo la costruzione della tabella, effettueremo una query per estrarre i dati dalla tabella di relazione, ovviamente nome della tabella e nomi dei campi, che saranno i parametri in ingresso al metodo. Ciò richiederà una certa attenzione nella creazione della stringa.
Abbiamo previsto una prima option
vuota e, all'interno del ciclo che produce l'HTML, un controllo per selezionare come selected
l'opzione desiderata nel caso della modifica.
case 'select':
$out.=$this->crea_select($array['nome'],$row[$array['nome']],$array['origine_tabella'],$array['origine_id'],$array['origine_testo'],$array['label']);
break;
..
private function crea_select($nome,$valore,$select_tabella,$select_id,$select_testo,$label){
global $db;
$out='<div>';
$out.='<label for="'.$nome.'">'.$label.'</label><br />';
$out.='<select id="'.$nome.'" name="'.$nome.'" class="form-control"><option value="0"></option>';
$sql = 'SELECT '.$select_id.', '.$select_testo.' FROM '.$select_tabella.' ORDER BY '.$select_testo.' ';
$dati = $db->prepare($sql);
$dati->execute();
while($array=$dati->fetch(PDO::FETCH_ASSOC)){
if($valore == $array[$select_id]){$str = 'selected="selected"';}
else{$str='';}
$out.='<option value="'.$array[$select_id].'" '.$str.'>'.$array[$select_testo].'</option>';
}
$out.='</select><br /><br />';
$out.='</div>';
return($out);
}
Bisogna evidenziare che questo ultimo metodo semplifica alcune questioni legate al controllo select
, bisognerebbe infatti espandere questo metodo e arricchirlo di qualche ulteriore parametro per dare la possibilità di filtrare la query oppure di mostrare più di un campo nel testo della option
.
La cosa importante in ogni caso è aver chiarito che i metodi che creano l'HTML devono necessariamente essere astratti e quindi non contenere alcun riferimento al singolo form, tutto ciò che varia deve essere immesso mediante parametri. In questo modo avremo effettivamente una classe da usare in ogni applicazione semplicemente configurando il nostro database.
Infatti, dopo aver illustrato i vari metodi che creano i diversi controlli del form, possiamo immaginare come ad ogni step del ciclo sui dati estratti dalla tabella struttura
si vada costruendo l'HTML del form. La query è ordinata tramite il campo ordine
che permette di gestire e modificare l'ordine di comparsa dei campi.
Alla fine del ciclo inseriremo il pulsante per il submit
e andremo a chiudere i tag ancora aperti. L'output restituito ci permetterà di visualizzare il form per l'inserimento o la modifica dei dati della tabella selezionata.