Come rendere un primordiale acronimo CRUD interessante e coinvolgente con HTML, CSS, BOOTSTRAP, PHP e MySQL!

Quello che può fare un semplice CRUD con PHP e MySQL ha del miracoloso! CRUD è l’acronimo di C-REATE R-EAD U-PDATE D-ELETE ossia le quattro operazioni base che un web developer junior inizia a conoscere quando si inserisce verso la meta del web developer senjor. Un CRUD è l’essenza di un applicativo che legge i dati con la famosa query SELECT (quindi READ), che aggiorna i dati con la famosa query UPDATE, che cancella i dati con la query o il comando DELETE e che legge i dati con la quintaessenza della programmazione dinamica: una semplice query SELECT, un imperioso comando che costringe la pagina a piegarsi alla volontà del suo creatore sciorinando dati a destra e a manca! Okweb developer umbria ma bando alle chance e parliamo di cose concrete e pratiche. Nell’ applicativo costruito tenendo come base un CRUD sono state inserite diverse funzionalità aggiuntive che abbelliscono il tutto anche con i ccs. L’applicativo ha uno scopo, quello di permettere a un giocatore di scacchi di fissare il suo repertorio di aperture per studiarle, quindi l’esempio del CRUD calza a pennello per lanciare un messaggio chiaro e ineluttabile: il CRUD nasce per soddisfare a esigenze concrete del quotidiano, poco importa che sia lavoro o svago piuttosto che economia locale o della comunità europea. Vediamo come nasce l’applicativo. E’ chiaro che la prima parte della costruzione dell’ architettura è già svelata: l’utente deve essere in grado di modificare i suoi dati dopo averli creati e anche di aggiornali e cancellarli se durante lo studio delle sue aperture scacchistiche qualcosa nopn gli sconfifferà. Il problema piu angosciante per un aspirante web developer junior è: e adesso come faccio a fare la connessione con il database? Intanto devo poter disporre di un DB in rete o in locale (essendo un applicativo disegnato sulle esigenze personali può funzionare anche solo con XAMP) poi ho bisogno di un editor per creare i file che non saranno tanti come si può intuire visto che l’applicativo avrà bisogno di una index che legge i dati in ingresso, di una pagina ADD che inserisce i dati creati, di una che fa l’aggiornamento UPDATE, di una che cancella impartendo il comando DELETE. Ma prima di fare questo dobbiamo studiare la struttura del database che in questo caso avrà quattro campi:

  • una chiave primaria autoincrementante progressiva definita classicamente come intero ID
  • un campo nel quale scriveremo la prospettiva di studio del nostro impianto di gioco, ossia se vogliamo focalizzarci dalla parte del bianco o del nero con un campo stringa definito come COLORE
  • un campo o colonna definito come NOME per indicare il tipo di apertura che voglio giocare e studiare come stringa nel tipo di dato e lunga un centinaio di caratteri, come il precedente colore.
  • un campo descrittivo che ha le stesse caratteristiche delle ultime due COLORE E NOME ribattezzato DESCRIZIONE che avrà questa volta un ampiezza di dati large ossia trecento caratteri

OVVIAMENTE prima di fare queste definizioni all’ interno del DB servirà un nuovo database da creare entro il quale bisogna costruire una tabella che conterrà i nostri dati definiti dai nomi di campo o colonna descritti sopra.

Formalizzata questa semplice questione del database in dieci minuti, non ci resta che creare le pagine. Risolviamo subito la questione del collegamento ai dati nel file db, dove andrò a istanziare una variabile a cui verrà applicata il metodo connect che prende quattro parametri ossia chi è il server, come si chiama l’utente che si collega sulla macchina, quale pwd utilizza e infine dove va l’utente fisicamente in quale database, nel mio caso:

$db = new Mysqli;

$db->connect(‘localhost’,’root’,”,’crud’);

if(!$db){
echo “error”;
}

Abbiamo aggiunto anche un prototipo di controllo da perfezionare che dice: se la variabile è diversa da $db, ossia se non vede al suo interno dei dati, restituisci un messaggio di errore che ci avvisi di un malfunzionamento. Questa funzione andrebbe migliorata e ampliata ma al momento limitiamoci a stare dentro le tematiche del CRUD. Quindi il problema è risolto perchè ora sulla pagina index scriverò l’inclusione a questa pagina con:

<?php include ‘db.php’; >

con queste due semplici operazioni, ossia la creazione dei parametri di collegamento e l’inclusione alla pagina che leggerà i dati (READ nel paradigma acronimo crud) abbiamo praticamente fatto tanta roba! A questo punto non ci resta che impartire i nostri comandi SQL sul database, ossia per leggere i dati uso una SELECT espressa in queste modalità $sql = “select * from nometabella, ossia sto dicendo alla macchina di tirarmi fuori tutti i dati (asterisco o carattere jolly) dalla tabella che li contiene. Ora a livello di idea progettuale ne consegue che ogni pagina del CRUD avrà la sua query:

nella index.php: $sql = “select * from tasks
nella pagina add.php : $sql = “insert into nometabella (colore, name, descrizione) values (‘$colore’,’$name’,’$descrizione’)”;
nella pagina delete.php: $sql = “delete from tasks where id = ‘$id'”;
nella pagina update.php: sql2 =”update nometabella set colore=’$colore’, name=’$task’, descrizione=’$descrizione’ where id =’$id'”;

Per poter passare da una pagina all’ altra i valori da modificare o da aggiornare hanno bisogno di fare riferimento a un ID univoco che viene passato tra le pagine appunto e che ricade sulla pagina di interesse, ecco perché vediamo la clausola where id = ‘$id’, ossia fai questa operazione dove id è uguale al record corrispondente. La cattura dei valori degli id avviene con questo meccanismo o variabile GET:

$id= (int)$_GET[‘id’];

$sql = “select * from nome tabella where id=’$id'”;

Ora a grandi linee un CRUD ha questa impalcatura, è chiaro che poi ci saranno delle tabelle che raggruppano i dati, è palese che serviranno i tag HTML da intercalare con quelli PHP per recuperare i valori dei dati dopo aver fatto la classica FETCH con espressioni del tipo:

<input type=”text” required name=”descrizione” value=”<?php echo $row[‘descrizione’];?>” class=”form-control”><br/>

dove in questo caso abbiamo fatto quello che in VUE si chiama PROPS ossia iniettare i dati all’ interno del nostro campo di testo descrizione nell’ espressione: value=”<?php echo $row[‘descrizione’];?>” situazione che andrà ripetuta per tutte le circostanze anche per i campi nome e apertura.

Sostanzialmente le basi del crud sono legate appunto alle quattro semplici query che formano una base solida sulla quale appoggiarsi per costruire belle applicazioni: in questo caso sono state implementate anche funzionalità di paginazione (comunque complicate perchè la pagina va segmenetata in record quando si supera un certo limite di inserimento), stampa e ricerca tutte situazioni che arricchiscono ulteriormente con i CSS e l’immagine di background in modalità cover di sfondo le funzionalità delle mie creazioni. L’articolo vuole solo offrire un potenziale di sviluppo sulle modalità espresse dalla tecnologia PHP MYSQL CRUD senza entrare nei dettagli della costruzione che comunque è ridotta all’ osso, ma esteticamente aggraziata grazie al framework responsivo BOOTSTRAP (facile da riconoscere per il colore dei bottoni): sei file con l’aggiunta di una immagine ma con elementi grafici come finestra modale e altro da non sottovalutare. Se volessi crescere ulteriormente con la mia applicazione dovrei implementare altri parti tipo: prima di cancellare posso aprire una finestra di dialogo che dice all’ utente di fare attenzione e di essere consapevole di quello che sta facendo? E se volessi ordinare i dati delle colonne come faccio con php e mysql? E’ roba per web developer senior? Volendo integrarie tecnologia AJAX con JQuery per rendere la modalità di visualizzazione dei dati asincrona per non andare incontri a rallentamenti rendering del client potrei farlo? Ce la posso fare?

Buon CRUD a tutti!

Sei STATIC? Allora dovresti fare ginnastica: OOP e PHP, perché i richiami alle variabili statiche offrono flessibilità alle applicazioni, settima puntata

Nelle ultime puntate di OOP e PHP come https://umbriawayincrementa.wordpress.com/2020/04/22/pubblico-o-privato-questo-non-e-un-film-sugli-enti-dislocati-sulla-penisola-ma-oop-e-php/   abbiamo esplorato il potenziale offerto dai progetti che presentano una visibilità delle variabili (o proprietà) pubbliche o private, dipende molto anche dalle caratteristiche del progetto. A questo punto c’è una nuova parola che entra in scena STATIC. Ma di che stiamo parlando? Supponiamo che nella nostra classe GM debba trovarmi nella necessità di creare un account utente per un sito che ospita un area riservata magari con dei servizi a pagamento. Sappiamo che le classi hanno la funzione di proporre una riutilizzabilità del codice per cui potrei usare la classe ACCOUNT anche in altri progetti, quindi inizierò ad avere una classe che ospiterà un paio di variabili canoniche del tipo username e password:

class Account
{
private $username;
private $password;

}

supponiamo che ogni volta che un oggetto si istanzi su questo oggetto io voglia tenere il conto delle nuove istanze istanziate (è un gioco di parole ma rende l’idea). Quanti nuovi oggetti sono stati creati su quella classe? Sappiamo che una classe è un qualcosa di unico nel suo genere e che non possiamo prendere come riferimento ogni oggetto per fare un conto centralizzato del numero che ci interessa, quindi per forza dovremmo introdurre all’ interno della classe una proprietà universale che ha un valore assoluto che mai verrà modificato. Quindi ci viene in aiuto il nostro STATIC, una parola chiave che fa proprio al caso nostro perchè conosciamo i limiti dei metodi private perché leggono solo i membri privati dove vengono definiti, mentre in questo caso la nostra esigenza è un altra, ci serve una variabile contatore che si incrementa ogni volta che una nuova istanza viene creata. per cui iniziamo a introdurre una nuova voce nella nostra classe, private static $count;

class Account
{
private $username;
private $password;
private static $count;
}

A questo punto ci serve un metodo che prende in ingresso l’oggetto istanziato e lo incrementa ogni volta che l’operazione di un nuovo oggetto creato si ripete, quindi siccome abbiamo anche visto quale è l’utilità di un costruttore, cioé quella di inizializzare in automatico delle operazioni al momento della creazione dell’ oggetto, ci inventiamo una funzione (o metodo) __construct (è il modo convenzionale di implementare un costruttore) che fa al caso nostro, inserendo anche un nuovo elemento quella della costante PREFIX (per convenzione si scrivono in maiuscolo) che farà da separatore prima del numero incrementato:

class Account
{
private $username;
private $password;
private static $count;

const PREFIX=”user_”;

function __construct($u, $p=”12345″)
{
$this->username=self::PREFIX.$u;
$this->password=$p;

self::$count++;
printf(“Creato $this->username: account n. %d <br>”, self::$count);
}
}

Che fa sostanzialmente questo costruttore? Accetta due parametri di ingresso, in cui nel secondo quello della password ($p) diciamo arbitrariamente che ha un valore universale se non viene inserito, in questo modo quando verrà creato l’ogetto io dovrò soltanto digitare $u, ossia lo username. Poi assegno i parametri degli argomenti inseriti tra parentesi a delle assegnazioni dell’ oggetto account, tenendo appunto presente che grazie alla costante prefisso avrò poi un separatore con il numero incrementale nel conteggio delle istanze create. Il tutto sembra più difficile da raccontare che a farsi in quanto una volta istanziati i nostri oggetti e ottenuto il nostro script, grazie a http://phptester.net/ a video otterremo:

class Account
{
private $username;
private $password;
private static $count;
const PREFIX=”user_”;

function __construct($u, $p=”12345″)
{
$this->username=self::PREFIX.$u;
$this->password=$p;

self::$count++;
printf(“Creato $this->username: account n. %d <br>”, self::$count);
}
}

$a=new Account(“Svidler”);
$b=new Account(“Aronian”);
$c=new Account(“Carlsen”);
$d=new Account(“Piscopo”);

RISULTATO A VIDEO e risposta alla domanda quanti oggetti sono stati istanziati:

Creato user_Svidler: account n. 1
Creato user_Aronian: account n. 2
Creato user_Carlsen: account n. 3
Creato user_Piscopo: account n. 4

Da notare infine il sibilinno simbolo arcano geroglifico o assiro babilonese %d che funziona solo da SEGNAPOSTO per lasciare spazio a self::$count ossia la nostra variabile statica. Se ne deduce quindi che i caratteri i due punti ripetuti sono proprio un modo caratteristico nella sintassi di PHP di riconoscere le proprietà statiche di una classe che sono per l’appunto dei valori assoluti presenti nella classe come riferimento per tutti gli oggetti che verranno istanziati

La Juventus ha perso la champions? Per forza i giocatori non si allenavano!

Allegri ha capito perchè ha perso champions, perchè tra un allenamento e l’altro qualcuno tagliava. Ma adesso per vincere il triplete prossimo anno ecco lo strumento che serve per monitorare la situazione: il nuovo potentissimo applicativo FWD traccia il potenziale campione, che consiste nel fare l’appello ogni mattina a Vinovo prima degli allenamenti! Bonucci c’è stamattina? Presente! Bernardeschi è di nuovo andato dalla ragazza? No, ce sta anche lui! De Sciglio si vede stamattina? SI non manca mai è uno di quelli che ha bisogno di allenarsi di più! Stavolta sono tutti sgamati e la champions non sfuggirà il prossimo anno. E dire che tutto ciò è stato reso possibile seguendo i tutorial di Umbriaway Consulting su PHP e MySQL. Quindi con un approccio pratico andiamo subito al sodo e diamo scacco matto in poche mosse ai problemi di Allegri.

Mossa numero 1: procurarsi un editor di testo, che sia Atom piuttosto che Visual Studio Code piuttosto che Sublime Tetx poco importa.

Mossa numero 2: scaricare XAMPP il server locale per testare l’applicazione

Mossa numero 3: iniziare a pensare alla struttura del progetto come file system e preoccuparsi di creare un file di configurazione per il nostro collegamento al DB, che chiameremo config.php

Mossa numero 4 scaricare dalla rete il noto framework bootstrap nella sua forma sintetica e inserire il nuovo file di nome inequivocabile bootstrap.min.css all’ interno di una cartella che chiameremo inc come inclusione, quindi il path completo del file sarà: inc\bootstrap.min.css ; per includere bootstrap nei nostri progetti serve anche il file JS che si può scaricare in rete quindi all’ interno della cartella INC troveremo alla fine anche inc\bootstrap.min.js

Mossa numero 5, includere JQuery nei nostri progetti, dalla rete scaricare il file jquery.min.js (il suo contenuto per fare copia e incolla in locale) e inserirlo nella stessa cartella di inclusione per cui avremo inc\jquery.min.js

Mossa numero 6, creare una nuova cartella che conterrà due nuovi file, Studenti.php e Database.php, il primo ci servirà per la gestione dei calciatori juventini e sul secondo avremo le coordinate di connessione al DB sfruttando le costanti presenti nel file di configurazione

Mossa N 7, creare nella root del file system appena creato il file primario definito come index.php e scrivere il codice strutturale tipico usando la semantica dei tag html, head, title, body, div includendo nell’ head anche il framework bootstrap con le sue classi da utilizzare nel body , quindi la parte superiore della ns pagina sarà:

/*
<?php include ‘inc/header.php’;
include ‘lib/Student.php’;
?>

Serial Student Student Roll Attendance
01 Rugani 10 P
A

03 Bernardeschi 11 P
A

04 De Sciglio 12 P
A

</div>

<?php include ‘inc/footer.php’ ?>

*/

Mossa numero otto, identificare la data degli allenamenti, questo si ottiene aggiungendo subito dopo la classe panel-body il seguente DIV con la classe predefinita di bootstrap:

/*

Date:

*/

Mossa numero 9, aggiungere il php dinamico con la funzione date per la stampa

/*

Date:

*/

Mossa numero dieci, aggiungere lo stile in linea per rendere esteticamente visibile la stampa video dell’ oggeto date:

/*

Date:

*/

A questo punto la parte statica del progetto é completata e non ci resta che dinamicizzare il tutto con il registro delle presenze dei calciatori in una delle prossime puntate. Buona champions a tutti!

Programmazione procedurale oppure OOP? This is the problem!

La programmazione ad oggetti ha sempre suscitato vere e proprie guerre concettuali, tra sostenitori delle due fazioni. C’è chi sostiene che senza OOP non si potrebbero mettere in piedi dei progetti complessi. E c’è chi sostiene che la procedurale basta e avanza per spedire una mail con gli allegati. Senza la programmazione procedurale non si potrebbe imparare l’Object Oriented Programming che è solo un approccio diverso per fare cose diverse. OOP non è un modo migliore per programmazre, è solo un modo diverso, dipende dal tipo di progetto che si vuole mettere in piedi. OOP è una filosofia di programmazione. Per fare OOP devi astrarre le cose. Casa, auto, stufa sono oggetti concreti con cui familiarizziamo ogni giorno. Per andare sulla luna ci sono decine di fasi e sottofasi in sequenza come per fare una torta o un semplice caffè. OOP richiede tutta una pianificazione anticipata a tavolino, se dico sedia devo definire le proprietà dell’ oggetto come colore e numero di gambe e i metodi o funzioni o azioni da mettere in atto: spostare la sedia, rovesciare la sedia etc, in base alla manipolazione dei dati che intendiamo operare. La programmazione procedurale è istintuale, la OOP è un paradigma, prima mi devo interrogare su cosa devo fare, poi devo identificare gli oggetti e poi decidere come sono definiti e quali azioni devono effettuare. Solo quando ho tutto chiaro e ho pensato i blocchi utili e necessari potrò mettere in pratica il mio cidce. OOP è una pianificazione fatta in anticipo. I problemi si risolvono con la tastiera sulla procedurale, mentre in OOP basta all’ inizio solo penna e foglio di carta. Su OOP dire classe indica la definizione della classe, mentre l’istanza della classa p il vero e proprio ogetto. Le proprietà sono le variabili con dei valori e i metodi sono funzioni interne alla definizione della classe. La classe è la ricetta di un budino , dove avremo la lista degli ingredienti e la somma delle operazioni da affettuare per arrivare al prodotto reale. Ad esempio la classe clienti nel nostro diagramma UML avrà un nome, un cognome, un indirizzo, una mail, un numero di telefono e dei metodi come recupero indirizzo o mail o cambio anagrafica. Le ricette sono tutte diverse, così come sono diversi gli ingredienti e le funzionalità. Definire le proprietà e le funzionalità è il core di una definizione di una classe. Con OOP posso scomporre un problema in tanti piccoli problemi e posso riutilizzare il codice per le stesse funzionalità. La manutenzione del codice viene semplificata e anche il debug è meno complesso. A questo punto la domanda è: come viene definita una classe in PHP? Ad esempio se abbiamo un libro come dobbiamo astrarre tutte le problematiche annesse? Un libro ha delle proprietà come titolo, quantità a magazzino, codice isbn, autore, costo, numero di pagine, immagine di copertina e ha anche dei metodi come sfogliare le pagine, la condizione delle pagine etc. Idem per una classe AUTO dove ho le proprietà dell’ oggetto da istanziare come colore interno, colore esterno numero di ruote e metodi come messa in moto etc. Anche nelle operazioni di shopping cart avrò accesso ai sistemi di login e di registrazione dei dati, a un carrello che memorizza le operazioni sugli articoli, l’invio per i pagamenti e ciascuno di questi blocchi può essere scomposto in sottoblocco per individuare le responsabilità che ogni oggetto deve avere tipo il cliente spedisce i dati, il cliente registra i dati. Ad esempio l’oggetto ordine deve specificare i dettagli effettuati, l’oggetto di verifica di spedizione sarà a carico dell’ oggetto mail e così via. Bisogna quindi stabilire le proprietà e le funzionalità per ogni oggetto. L’oggetto LOGIN deve avere tutta una serie di caratteristiche, un tipo di codifica per oscurare le pwd, un sistema di verifica per vedere se quella mail esiste e molto altro. Occorre definire quinti tutte le possibilità che il nostro oggetto ha a sua disposizione. Quindi si parte dal nome della classe, si definiscono le prorietà e infine i metodi. La definizione della classe non è l’oggetto che va istanziato. L’oggetto cliente ha una sua anagrafica per esempio. La classe libro per esempio potrà avere questo suo elenco di proprietà che possono anche essere inizializzate ma senza la creazione dell’ oggetto sarebbero inutili, senza i metodi che le leggono e le scrivono. Con public e private definisco il livello di riservatezza delle variabili, si parla di accessibilità rispetto alla visibilità interna o esterna, con delle variabili che in caso di private saranno consumabili solo all’ interno della classe:

/*
<?php
class Libro {
public $titolo;
public $autore;
public $codiceisbn;
public $prezzo;
private $quantita;
}
*/

classe inserita all’interno di una cartella arbitraria che verrà linkata sulla pagina di visualizzazione in questo modo, da notare l’uso della parola chiave NEW che crea l’oggetto vero e proprio:

/*
<?php
require_once “Classi/Libro.php”;
$nlibro = new Libro();
//echo $nlibro;
$nlibro -> titolo = ‘Le tigri di Mompracem’;
var_dump($nlibro);
*/

Una volta che abbiamo la ricetta per realizzare la torta possiamo istanziare e accedere alle proprietà. SI crea quindi la definizione della classe e si istanzia per creare un oggetto reale con la parola chiave NEW. La sintassi é $oggetto=NEW nomeclasse(); che non ha ancora la definizione delle proprietà al suo interno. Per accedere alle proprietà della classe dall’ esterno posso puntare solo sulle variabili di tipo PUBLIC, come visto sopra, omettendo al simbolo del dollaro menzionando la variabile: $nlibro -> titolo = ‘Le tigri di Mompracem’; in questo modo vado a travasare il contenuto della variabile nel vaso corrispondente, perché le variabili sono zone di memoria che conservano i dati.

E se volessi inserire nella definizione della classe un metodo tipo leggoTitolo con visibilità pubblica quindi accessibile dall’ esterno? Dovrò inserire una funzione interna alla classe che mette in moto dei metodi o delle azioni che fanno delle cose, la sintassi sarà $oggetto -> metodo:

/*
<?php
class Libro {
public $titolo;
public $autore;
public $codiceisbn;
public $prezzo;
public $quantita;

public function leggoTitolo() {
// return $titolo;
return $this->titolo;
}

}
*/

A questo punto la spontanea domanda, che lo script risolve, come faccio ad accedere a una variabile interna di una classe, trova la sua risoluzione. Bisogna fare molta attenzione alla sintassi perché va introdotta un’ altra parola magica: THIS! Con this possiamo accedere alle variabili interne di una classe: return $this->titolo; e far riferimento alla proprietà dell’ oggetto corrente.

E sevolessi stampare a video titolo e autore dopo aver settato le proprietà grazie a this? Vediamo la definizione della classe e il suo file di lettura:

/*
<?php
class Libro {
public $titolo;
public $autore;
public $codiceisbn;
public $prezzo;
private $quantita;
public function leggoTitoloAutore() {
// return $titolo;
return $this->titolo . ‘-‘ . $this->autore;
}
}
*/

/*
<?php
require_once “classi/Libro.php”;

$nlibro = new Libro();
$nlibro->titolo = ‘Sandokan’; // con this posso dare un valore alla prorpietà
$nlibro->autore = ‘Salgari’;
echo $nlibro->leggoTitoloAutore();
*/

 

Il risultato finale sarà il seguente: https://www.farwebdesign.com/PHPOOP/5/

 

 

Fa caldo? Per forza usi i condizionatori cinesi al posto delle funzioni php unset e isset

Calma calma il caldo estivo ti dà in testa? Ci scrivono da Vortice Ombroso in provincia di PG chiedendo come faccio a disattivare una pistola carica, pardon a disattivare una variabile? E se volessi verificare il contenuto di una variabile , cioé se il contenitore é pieno o vuoto ossia se c’è il caricatore sulla pistola di PHP? E vabbè che pazienza abbiamo noi (noi é una parola grossa il CEO di umbriaway.eu é Faraoni Enrico) del portale umbro in espansione dinamica da big bang più eclatante del momento? Per sapere se una variabile ha avuto un valore e quindi un contenuto e quindi una assegnazione di memoria o se attualmente é piena devi usare la funzione IsSet($nome variabile) ad esempio IsSet($altezza) ed eventualmente questa funzione come sanno tutti i neofiti in autoapprendimento su PHP si può concatenare con il magico PUNTO . all’ interno di una stringa. E se volessi svuotare una variabile fino a farla diventare vergine? Per portarla a uno stato di non inizializzazione userò l’ìstruzione unset($altezza) in questo modo sono alle origini e se dovessi adesso rieseguire una funzione sopra a questa variabile per vederni il valore IsSet mi restituirebbe un NULL che é diverso da caratteri come “/” o “0”. Prendiamo in esame una funzione base per altezza per trovare l’area di un rettangolo, se dovessi applicare prima alla variabile $altezza prima un UNSET per inizializzarla a NULL e poi usare un IsSet per verificare l’effetto che fa scoprirei che siamo di fornte a un errore del tipo UNDEFINED VARIABLE. IsSet restituisce il valore logico TRUE, FALSE per gli interi e un valore vuoto tra virgolette come valore per le stringhe. Ricordiamoci sempre che sul famoso punto INI abbiamo la possibilità di settare vari parametri e tra questi anche il famoso E_ALL per la segnalazione degli errori che é meglio attivare come funzionalità per il neofita che si appresta ad avere nella sua prima fase di sperimentazione problemi reali con il DEBUG. Come al solito lo studente che fin qui ha avuto la sensazione di avere le ide3e troppo chiare ha bisogno di essere scombinato a livello didattico con il link presente all’ indirizzo: http://php.net/manual/en/function.isset.php. Il manuale spara sentenze: ISSET determina se è impostata una variabile e non è NULL. Se una variabile è stata disattivata con unset (), non verrà più impostata. Isset () restituirà FALSE se si prova una variabile che è stata impostata su NULL. Si noti inoltre che un carattere nullo (“\ 0”) non corrisponde alla costante PHP NULL. Se vengono forniti più parametri, isset () restituirà TRUE solo se tutti i parametri sono impostati. La valutazione va da sinistra a destra e si arresta non appena viene rilevata una variabile non impostata. Tutto chiaro eh?! Certo funzioni torbide come l’acqua del Tevere. Ok nella seconda lettera di San Taffazzi da Brescia a ceofiti la domanda posta ai miscredenti é: posso io profano mescolare PHP e HTML? La risposta era dentro di te ed era giusta Sig Taffazzi, tramite la commistione dei tag <? e bla bla bla ?> intercalati tra i tag HTML puoi indicare al PARSER di PHO che cosa deve macinare e quale metallo vile trasformare in oro. Certamente devi stare attento a posizionare gli script PHP nei punti giusti in modo anche da facilitare il caricamento della pagina e non ostacolare il rendering della pagina. Il Sig. Astrubale da San Marino ci chiede se nel PHP.INI posso andare ad abilitare gli array superglobali. La risposta é si, ricordiamo che i sei big array sono $_server, cookie, env, files, get, post e che alcune espressioni di abilitazione si trovano nel file sopra citato sotto forma di iniziali come ad esempio GPC , in questo caso specifico mancherebbe la E di $_ENV per esempio come iniziale e usando tale array superglobale senza abilitazione non produco il risultato atteso dall’ istruzione, ossia la stampa di alcune variabili di ambiente tematiche per esempio. Ricordiamo che i BIG ARRAY SUPERGLOBAL sono sei in quanto il famoso $_REQUEST deriva dai tre elementi $_COOKIE, $_GET, $_POST. Speriamo con questa esauriente risposta di avere appagato le esigenze formative del sig. Astrubale. Infine rispondiamo anche ai molti che ci hanno chiesto dal Molise se i database relazionali come MySQL si possono gestire anche con strumenti essenzialmente Microsoft con software tipo Sql Server Express. La risposta é si e ovviamente ci sono molti strumenti free in rete che consentono una gestione grafica delle query per automatizzare velocemente i processi anche di apprendimento, perché il tema sui DB é molto vasto e complesso ed esistono figure professionali dedicate che strutturano i DB in maniera logica e performante con tutte le relazioni delle chiavi primariead hoc.