Una volta creato il form del nostro CMS, componente che si può utilizzare sia per l'inserimento e sia per la modifica dei record così come per la per la funzione copia
, dobbiamo passare al salvataggio dei dati. Il pulsante per eseguire il submit richiamerà sempre la stessa pagina, variando l'azione e chiamando tramite lo switch
il metodo della classe preposto alla scrittura: salva()
.
Questo metodo verr` utilizzato sia per l'inserimento dei nuovi record sia per la modifica, fra le varie soluzioni possibili ne adotteremo una che, praticamente, limiter` notevolmente le differenze. Come prima questione dovremo capire se siamo in fase di inserimento (INSERT
) o aggiornamento (UPDATE
), la differenza sta nell'avere valorizzato o meno il nostro campo chiave
.
chiave
$sql='SELECT nome FROM struttura WHERE tabella="'.$this->tipo.'" AND chiave="1"';
$stmt = $db->prepare($sql);
$stmt->execute();
$array = $stmt->fetch(PDO::FETCH_ASSOC);
if($_REQUEST[$array['nome']] == 0 || $_REQUEST[$array['nome']] == ''){
$sql = 'INSERT INTO '.$this->tipo.'('.$array['nome'].',data_insert) VALUES("?","'.date("Y-m-d H:i:s").'")';
$stmt = $db->prepare($sql);
$stmt->execute();
}
La prima query si rivolge alla tabella struttura
if
Il secondo campo, anche questo non necessario da esplicitare, è relativo alla data inserimento, avendo di default CURRENT_TIMESTAMP
id
Per recuperare il valore dell'id
lastInsertId()
id
$id = $db->lastInsertId();
$this->id=$id;
$key = $array['nome'];
Il problema che si pone ora riguarda quali parametri arrivano dal nostro form. La soluzione più semplice è andare a leggere la tabella struttura, per i campi che non sono chiave, della tabella di nostro interesse e fare un ciclo per l'inserimento. La costruzione del ciclo verrà fatta in questo modo:
$sql='SELECT * FROM struttura WHERE tabella="'.$this->tipo.'" AND visibile="1" AND chiave="0"';
$stmt = $db->prepare($sql);
$stmt->execute();
while($array = $stmt->fetch(PDO::FETCH_ASSOC)){
..
}
All'interno del ciclo, al fine di evitare errori, vado effettivamente ad accertarmi che arrivi qualcosa dal nostro form facendo attenzione alla complicazione imposta dalla checkbox
if((isset($_REQUEST[$array['nome']]) || $array['tipo_input']=='checkbox')){
..
}
Diventa ora indispensabile un sistema per la gestione degli errori, argomento che verrà trattato nella prossima lezione.