Il link per l'inserimento di un nuovo record della nostra applicazione ricarica la pagina news.php
modificando la variabile $azione
passata come querystring. Tale variabile viene letta e gestita dallo switch
creato ad hoc. Ovviamente, come avvenuto nel corso del precedente accesso, la classe viene istanziata con le due proprietà $id
, che in questo caso, sarà valorizzato a zero, e $tipo
, che conterrà il valore news
, ovvero il nome della tabella da utilizzare.
Lo switch
permetterà di invocare il metodo crea_form()
all'interno del quale come variabili globali avremo la connessione al database $db
e la variabile $azione
. Quest'ultima ci servirà per stabilire, eventualmente, se siamo in fase di inserimento, di modifica oppure di copia. Lo stesso metodo verrà utilizzato infatti sia per l'inserimento e sia per la modifica; possiamo anche pensare a una terza opzione, la copia, ovvero un nuovo inserimento a partire dai dati popolati da un inserimento precedente.
Pertanto la prima operazione da compiere sarà l'estrazione dei dati dalla tabella delle news, in modo che nel caso della modifica e della copia avremo i valori dei value, mentre nel caso dell'INSERT
nessun record corrisponderà al criterio della clausola WHERE
e quindi i campi resteranno puliti.
$sql = 'SELECT * FROM '.$this->tipo.' WHERE id='.$this->id;
$stmt = $db->prepare($sql);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
Prepariamo ora in una variabile $out
la porzione di HTML statico del nostro form:
$out='<form id="info" name="info" action="?azione=salva" method="post" enctype="multipart/form-data"&glt;';
$out.='<fieldset&glt;<legend&glt;Inserimento/modifica '.$this->tipo.'</legend&glt;';
Arriviamo quindi ad uno dei punti salienti del nostro lavoro: per sapere quali campi preparare dovremo andare a leggere la tabella struttura
, in essa troveremo tutte le informazioni necessarie a costruire il nostro form. La query dovrà essere filtrata con il nome della tabella e ordinata tramite il campo ordine
.
$sql = 'SELECT * FROM struttura WHERE tabella="'.$this->tipo.'" AND visibile="1" ORDER BY ordine, id';
$dati = $db->prepare($sql);
$dati->execute();
Nel ciclo che andremo a sviluppare per scorrere i dati estratti dalla query inseriremo uno switch
che opererà sulla variabile contenente il tipo di input della riga in oggetto. In base al tipo di input chiameremo un metodo privato che ci restituira l'HTML relativo alla sua generazione:
while($array = $dati->fetch(PDO::FETCH_ASSOC)){
if($azione == 'copy' && $array['nome']=='id'){$row[$array['nome']]=0;}
switch($array['tipo_input']){
..
}
}
Come si può notare esaminando il codice, è presente un controllo con cui azzerare la variabile $id
nel caso in cui si stia eseguendo la copia di un record.