Per la definizione dei metodi necessari alla creazione del form partiremo dal più semplice di tutti: la creazione di un campo di input testuale. Di fatto il nostro metodo avrà bisogno di tre parametri: il nome del campo, il valore (value
) e il testo dell'etichetta associata (label
). Ovviamente possiamo estendere questo lavoro con una serie di parametri aggiuntivi.
Nello switch
all'interno del ciclo while
avremo quindi il case 'text'
; in questo caso chiameremo il metodo privato crea_text()
passandogli come argomenti il nome del campo prelevato dalla tabella struttura
, il valore di quel campo contenuto eventualmente nell'esito della prima query e, infine, il testo della label
da mostrare.
case 'text':
$out.=$this->crea_text($array['nome'],$row[$array['nome']],$array['label']);
break;
Il metodo privato crea_text()
creerà il markup HTML necessario:
private function crea_text($nome,$valore,$label){
$out = '<div>';
$out.='<label for="'.$nome.'">'.$label.'</label><br />';
$out.='<input type="text" id="'.$nome.'" name="'.$nome.'" class="form-control" value="'.htmlentities(stripslashes($valore)).'" />';
$out.='</div>';
return($out);
}
Quindi il nostro metodo avrà tre parametri di input, restituirà una stringa HTML come output e il campo di input e la sua label
saranno contenuti in un tag div
.
Il valore del testo della label
corrisponde al parametro label
passato, useremo il nome del campo per legare la label
al suo input e assegnare gli attributi id
e name
, infine cercheremo di inserire il valore del value
con le dovute cautele per evitare che dei caratteri speciali possano alterare il nostro output HTML; useremo quindi il costrutto htmlentities(stripslashes($valore))
per assegnare il valore del value
.
Questo può essere considerato il prototipo di tutti i campi di input che andremo a costruire, volendo si potrebbe razionalizzare il codice usando un parametro aggiuntivo per il tipo di input, oppure, se si vuole diversificare l'output, possiamo tenerli separati.
Il case 'hidden'
è ancora più semplice, non dovendo visualizzare niente non ci sarà bisogno della label
e quindi saranno sufficienti due parametri: il nome del campo e il valore. Come nel caso precedente lo switch
intercetta il case 'hidden'
e invoca il metodo associato:
case 'hidden':
$out.=$this->crea_hidden($array['nome'],$row[$array['nome']]);
break;
..
private function crea_hidden($nome,$valore){
$out='<input type="hidden" id="'.$nome.'" name="'.$nome.'" value="'.$valore.'" />';
return($out);
}
Per quanto riguarda gli altri casi di input, ovvero "password", "email", "search" e "date", saranno necessarie solo piccole variazioni sul tema del metodo crea_text()
, al punto che si potrebbe seriamente pensare alla parametrizzazione di questo valore.