Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 26 di 56
  • livello intermedio
Indice lezioni

Creare una tabella per la struttura dei dati

Creiamo una tabella, chiamata "struttura", grazie alla quale gestire i dati delle tabelle che conterranno i dati del nostro CMS.
Creiamo una tabella, chiamata "struttura", grazie alla quale gestire i dati delle tabelle che conterranno i dati del nostro CMS.
Link copiato negli appunti

Completiamo la costruzione del nostro database con l'ultima tabella, la chiameremo struttura e sarà uno dei passaggi chiave dell'intero lavoro. Lo scopo di questa tabella è quello di descrivere tutte le tabelle di dati e memorizzare le informazioni necessarie per la costruzione delle interfacce, i form, per la gestione dei dati. A conti fatti, al termine del nostro lavoro l'inserimento corretto dei dati in questa tabella sarà l'unico lavoro da fare per far funzionare il nostro CMS.

I campi della tabella

Il primo campo sarà un normalissimo id (INT) chiave primaria con AUTOINCREMENT. Chiameremo il secondo campo tabella (VARCHAR(20)) dove memorizzeremo il nome della tabella di appartenenza del campo, nel nostro caso i valori saranno "news" o "autori". Il terzo campo sarà il nome del campo (VARCHAR(20)), quindi per la tabella "news" avremo id, titolo, testo e così via. Quarto campo label (VARCHAR(50)) per definire l'etichetta del campo nel form, dato che il nome del campo non può essere utilizzato per convenzione. Per esempio nel nostro caso potremmo avere "data_pubblicazione" e label "Data pubblicazione".

Il quinto campo sarà un ENUM con valori '0' o '1': lo chiameremo chiave e servirà per definire la chiave primaria. Il sesto campo, tipo_input, sarà un ENUM contenente tutte le possibili opzioni di input HTML5 (text, hidden, password, search, email, number, date, checkbox, checkboxlist, radiolist, select e textarea). Potremmo avere text per il titolo della news e una textarea per il testo, un hidden per l'id ecc.

Il campo successivo sarà un ENUM e servirà per definire se un campo è obbligatorio o meno ed effettuare i relativi controlli server-side, ovviamente questa opzione può essere sfruttata anche per creare controlli client-side. Simile la funzione del campo controllo che sarà sempre funzionale ai controlli server-side e potremo scegliere fra le opzioni string o int.

I campi successivi, visibile e list, saranno due ENUM '0' e '1', il primo servirà per nascondere il campo nei form e per mostrare il contenuto nella lista iniziale, il secondo servirà per mostrare una serie di campi nel pannello di controllo. Abbiamo ora un terzetto di campi che serviranno per la creazione delle SELECT e quindi per la gestione delle relazioni uno a molti: se il controllo sarà quindi una SELECT dovremo indicare da quale tabella estrarre i dati, quale campo utilizzare per il valore della option HTML e quale nel testo visibile. Si tratta quindi di tre VARCHAR: origine_tabella, origine_id, origine_testo.

I successivi tre campi hanno uno scopo simile ma questa volta declinato sulle tabelle di relazione molti a molti (il tipo di campo normalmente associato sarà una checkboxlist):rel_tabella, rel_id1, rel_id2, tutti VARCHAR.

L'ultimo campo, ordine, e sarà un INT, o un decimal(10,3), e servirà per decidere l'ordine dei campi nei form di inserimento e modifica.

CREATE TABLE struttura (
  id int(11) NOT NULL,
  tabella varchar(20) NOT NULL,
  nome varchar(20) NOT NULL,
  label varchar(50) NOT NULL,
  chiave enum('0','1') NOT NULL DEFAULT '0',
  tipo_input enum('text','hidden','password','search','email','number','date','checkbox','checkboxlist','radiolist','select','textarea') CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  obbligatorio enum('0','1') NOT NULL,
  controllo enum('string','int') NOT NULL,
  visibile enum('0','1') NOT NULL DEFAULT '1',
  lista enum('0','1') NOT NULL DEFAULT '0',
  origine_tabella varchar(255) NOT NULL,
  origine_id varchar(30) NOT NULL,
  origine_testo varchar(30) NOT NULL,
  rel_tabella varchar(255) NOT NULL,
  rel_id1 varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  rel_id2 varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  ordine int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--
-- Indici per le tabelle struttura
--
ALTER TABLE struttura
  ADD UNIQUE KEY id (id);
--
-- AUTO_INCREMENT per la tabella struttura
--
ALTER TABLE struttura
  MODIFY id int(11) NOT NULL AUTO_INCREMENT;

Popolare la tabella

Una volta generata la tabella "struttura" non resterà altro che popolarla con dei dati iniziali.

INSERT INTO struttura (id, tabella, nome, label, chiave, tipo_input, obbligatorio, controllo, visibile, lista, origine_tabella, origine_id, origine_testo, rel_tabella, rel_id1, rel_id2, ordine) VALUES
(1, 'news', 'id', 'id', '1', 'hidden', '1', '', '1', '1', '', '', '', '', '', '', 1),
(2, 'news', 'titolo', 'titolo', '0', 'text', '1', '', '1', '1', '', '', '', '', '', '', 2),
(3, 'news', 'testo', 'testo', '0', 'textarea', '0', '', '1', '0', '', '', '', '', '', '', 3),
(4, 'news', 'data_pubblicazione', 'data pubblicazione', '0', '', '1', '', '1', '1', '', '', '', '', '', '', 4),
(5, 'news', 'autore_id', 'autore', '0', 'select', '0', '', '1', '0', 'autori', 'id', 'cognome', '', '', '', 5),
(6, 'news', 'ordine', 'ordine', '0', 'number', '0', '', '1', '0', '', '', '', '', '', '', 6),
(7, 'autori', 'id', 'id', '1', 'hidden', '1', '', '1', '1', '', '', '', '', '', '', 1),
(8, 'autori', 'nome', 'nome', '0', 'text', '1', '', '1', '1', '', '', '', '', '', '', 2),
(9, 'autori', 'cognome', 'cognome', '0', 'text', '1', '', '1', '1', '', '', '', '', '', '', 3),
(10, 'autori', 'ordine', 'ordine', '0', 'number', '0', '', '1', '0', '', '', '', '', '', '', 4);

Ora nella tabella struttura ci sono tutte le informazioni e le meta-informazioni per gestire le tabelle "news" e "autori": eseguendo una SELECT saremo in grado di costruire i form e le liste per la gestione dei dati. Il motore di tutto questo sarà una classe apposita, avremo poi unfile PHP per inizializzare la classe e stampare i contenuti.

Ti consigliamo anche