Albrecht Duerer: il Cavaliere, la morte e l’operatore LIKE!

web design umbria

Mai sentita l’espressione il diavolo é nei dettagli? Si sente ovunque da Netflix alla TV di stato, dalle serie di telegabibbo a radio Clerici dedicata alle torte. Ma nell’ ambito front end developer che sta a significare? Risponde lo stesso Albrecht Duerer, classe ’71 (non facciamo scherzi dell’ anno millequattrocento eh) artista definito eliocentrico dalla critica perchè aveva l’ardire di far scivolare di soppiatto se stesso nelle opere senza dare troppo nell’ occhio. E’ il massimo esponente della pittura tedesca rinascimentale, immette nelle sue creazioni simbolismi e significati esoterici e lo fa tenendo conto di due grandi sguardi, quello che ogni progettista web ha ereditato anche da lui senza saperlo: la visione olistica della pianura vista dall’ alto e lo sporcarsi le mani toccando dal basso i dettagli. Se si guarda appunto l’opera dell’ incipit si scoprirà che quello che fa la differenza nella visione generale è proprio il diavolo, cioè il dettaglio. Ma tradotto nella vita complicata di un frontend developer di tutti i giorni che mi sta a significare? Che quando si mettono in piedi dei progetti sembra tutto facile, tutto olistico. E’ tutto idealizzato, sembra quasi che con uno schiocco di dita come per magia le cose si materializzino tanto per tornare all’ esoterismo sibolico dell’ artista tedesco. Invece sono i dettagli che invadono il tuo corpo, esattamente come il diavolo. Prendiamo ad esempio un problema stupido come quello di un meccanismo di ricerca da far funzionare come https://www.farwebdesign.com/umbriagallery/ : funziona bene, perchè se digito Spoleto salta fuori l’informazione che cerco e idem sia per le cittadine umbre sia per le frazioni sperdute tra le montagne. Ora prendiamo una frazione in località Nocera Umbra cap 06025 che si chiama Ponte Parrano e ipotizziamo che vittime dell’ anzianità ci ricordiamo che questo posto si chiama solo Parrano. Ora minuscolo o maiuscolo è indifferente, ma lo spazio in mezzo fa la differenza, che cosa sta succedendo? Perchè Parrano non salta fuori dalle mie ricerche e come faccio a materializzarlo nella pagina? Bella domanda, vediamo la query cosa dice:

$stmt = $dbh->query(“SELECT * FROM gallery WHERE descrizione LIKE ‘$search%'”);

web design umbriaDiavolo di un operatore like, quando qualcosa non funziona c’è un solo modo per risolvere il problema, ossia ogni frontend developer che non è nato da un falegname e una donna pia e misericordiosa deve andare a cercare quello che gli serve, consultare documentazioni varie e assortite presenti sul web (un imprenditore spietato potrebbe benissimo recidere il cavo della connessione della sua azienda e scoprirebbe in seguito ad un annuncio di selezione pubblicato su uno dei tanti siti di ricerca personale, che non esistono candidati ideali degni di essere assunti a 5000 euro al mese senza che possano cercare in rete le informazioni per risolvere un problema, ed è per questa ragione che un sito come https://stackoverflow.com/ ha così tanto successo, perchè milioni di piagnistei di aspiranti frontend developer trovano conforto in cerca di soluzioni!). Ora dobbiamo capire come funziona il meccanismo nel suo insieme ma poi bisogna prendere il diavolo per le corna. La pagina funziona che in ingresso raccoglie il risultato dello SPARO effettuato dal bottone SEARCH del FORM, questo proiettile viene accolto a braccia aperte con l’espressione:

if (!isset($_GET[‘search’]) || $_GET[‘search’] == null) {
header(“Location:404.php”);
} else {
$search = $_GET[‘search’]; }

che sta a significare se la variabile superglobalse $_GET è diversa da piena (presenza del punto esclamativo di nuovo un dettaglio da non trascurare!) oppure é nulla, ossia se una delle due condizioni diventa vera (OR logico espresso da || significa appunto che basta che solo una delle due condizioni si trasformi in reale) devi annullare la ricerca e tramite una istruzione javascript (header location) devi rimandare l’utente quasi al mittente, ossia mandalo sulla pagina 404.php, altrimenti (che è quella che interessa a noi) la variabile $search diventa uguale al valore della $_GET[‘search’]; ora essendo questo un bel diavolo da gestire, se torniamo indietro e guardiamo la query scopriamo che l’immonda creatura di variabile è proprio inserita dopo l’operatore LIKE e tuttavia continua a sfuggirci qualcosa…ma cosa? Allora bisogna studiare non c’è altro modo, altrimenti da animali onniscienti potremmo fare il mestiere di messia e profeta in terra non quello di frontend developer:

L’operatore LIKE utilizza due tipi di caratteri jolly per verificare le uguaglianze parziali. I due caratteri sono il simbolo percento ‘%’ e l’underscore ‘_’. Il primo carattere jolly sostituisce un insieme di caratteri, il secondo si limita a sostituirne uno solo. Il carattere jolly % aggiunto all’inizio o alla fine (o entrambi) di una stringa consentirà che 0 o più di qualsiasi carattere prima dell’inizio o dopo la fine del modello corrisponda.

Ok dopo aver cosparso con la conoscenza tecnica di internet il nostro diavolo siamo colti da una improvvisa intuizione e scriviamo questo codice che sta a significare “stupida macchina includi nella mia stringa di ricerca tutto il conoscibile, nel senso che adesso mi tirare fuori anche delle stringhe parziali senza senso del tipo ole per estrapolare SPoleTO, per esempio“:

$stmt = $dbh->query(“SELECT * FROM gallery WHERE descrizione LIKE ‘%$search%'”);

web design umbriail risultato finale è degno di un esorcismo, ovviamente prima di mandare la modifica in produzione ci preoccuperemo di risolvere il locale tramite XAMPP o altri software a corredo delle situazioni che sembrano generarsi da sole quando si lavora su progetti concreti che all’ inizio erano pianificabili con estrema facilità anche nelle tempistiche. Per esempio, adesso come faccio a fare ricerche multiple? Ossia se volessi anche cercare come CAP nello stesso form lo posso fare e se si come? Scarichi ormai dall’ impresa di aver riportato il diavolo di Albrecht Duerer nell’ incisione il Cavaliere, la morte e …. web design Umbria delega questa incombenza in uno dei prossimi post, al momento l’obiettivo che ci eravamo prefissi è stato raggiunto, adesso anche lo smemorato può trovare anche una minuscola frazione umbra dal nome composito! La conclusione è che non si può sapere tutto di tutto, soprattutto in un settore dove al forntend developer è richiesto dal mercato di essere uno e trino e deve conoscere tutto della Nina, la Pinta e la Santa Maria. Quando non si sa o non si ricorda qualcosa per risolvere un problema bisogna consultare la documentazione!

Viverre pericolosamente con OOP in PHP, costruttori e distruttori, quarta puntata

All’ indirizzo https://umbriawayvalorizza.wordpress.com/2020/04/20/vivere-pericolosamente-con-le-classi-php-terza-puntata/ abbiamo visto come implementare METODI all’ interno di una CLASSE. A questo punto non ci resta che approfondire un importante concetto, quello del COSTRUTTORE. Prendiamo in esame questa classe:

class gm
{
public $nome;
public $cognome;
public $elo;
}

$gm=new gm();
$gm->nome=”Fabiano”;
$gm->cognome=”Caruana”;
$gm->elo=2999;

che cosa succede quando scrivo $gm=new gm(); fuori dal blocco per istanziare l’oggetto fisico figlio della classe? E’ come se ordinassi di creare qualcosa che poi alloggerà in memoria, di fatto sto costruendo dal nulla un oggetto. Ma allora se posso far nascere un oggetto posso anche inizializzare la classe con un costruttore che anzichè farmi richiamare la funzione manualmente come accadeva negli esempi presenti in https://umbriawayvalorizza.wordpress.com/2020/04/20/vivere-pericolosamente-con-le-classi-php-terza-puntata/ mi carica direttamente delle istruzioni e mi inizializza l’oggetto secondo le mie modalità?

Vediamo questo esempio aggiungendo del codice sempre in http://phptester.net/:

class gm
{
public $nome;
public $cognome;
public $elo;

function __construct($n, $c, $e)
{
echo “ORA nasce l’oggetto GM”;
$this->nome=$n;
$this->cognome=$c;
$this->eta=$e;
}
}

//qui siamo usciti dalla classe e istanziamo l’oggetto

$gm=new gm(“Michele”, “Godena”, 2500);

var_dump($gm);

qui applico il metodo costruttore function __construct che assegna i valori iniziali con le proprietà dell’ oggetto, dopodichè contrariamente a quello che succedeva negli esempi precedenti qui siamo in grado di EVOCARE le proprietà della classe semplicemente istanziando l’oggetto con la parola chiave NEW che inietta nell’ output le nostre priorità di visualizzazione in maniera del tutto automatica, senza richiamare nessun nome di funzione. A questo punto il programmatore talentuoso potrà fare la domanda “ma se esiste un metodo costruttore esiste anche un metodo distruttore?”. Certamente vediamo un esempio:

class gm
{
public $nome;
public $cognome;
public $eta;

function __construct($n, $c, $e)
{
echo “ORA nasce l’oggetto $n $c <br>”;
$this->nome=$n;
$this->cognome=$c;
$this->elo=$e;
}

function __destruct()
{
echo “*** $this->nome $this->cognome viene distrutto *** <br>”;
}

}

$gm=new gm(“Fabiano”, “Caruana”, 1987);

var_dump($gm);

La funzione costruttore accetta tre parametri in ingresso. Che cosa vedrò a video dopo aver inizializzato un nuovo oggetto che questa volta ha anche il metodo __destruct() incluso nella classe?

ORA nasce l’oggetto Fabiano Caruana
object(gm)#1 (4) { [“nome”]=> string(7) “Fabiano” [“cognome”]=> string(7) “Caruana” [“eta”]=> NULL [“elo”]=> int(1987) }
*** Fabiano Caruana viene distrutto ***

Sostanzialmente prima viene creato e inizializzato l’oggetto, poi eseguo il metodo var_dump() per vedere il tipo di dati presenti nell’ oggetto $gm dopodichè il costruttore finita la sua missione deve lasciare il posto al distruttore che non fa altro che eliminare dalla memoria l’oggetto.

PHP, OOP, magic method e costruttori

Articoli precedenti su tema OOP:

https://umbriawayinfo.wordpress.com/2019/04/07/programmazione-procedurale-oppure-oop-this-is-the-problem/

https://umbriawaypotenzia.wordpress.com/2019/04/07/php-versione-sette-introdotte-nuove-direttive-per-trasformare-il-linguaggio-in-fortemente-tipicizzato/

https://umbriawaysemplifica.wordpress.com/2019/04/08/ambito-di-visibilita-delle-variabili-in-php-public-protected-private/

web developer umbriaVediamo adesso esempi visti negli articoli precedenti dove è palese che la definizione delle proprietà viene richiesta all’ utente ma che fare quando vogliamo ottenere un oggetto compiuto che abbia al suo interno già le proprietà inizializzate e definite con dei valori senza dover accedere all’interno della classe e settare queste variabili? Si ricorre ai metodi magici di PHP che iniziano con __ (due volte underscore) in questo caso scomodiamo il metodo COSTRUTTORE. Senza il costruttore dobbiamo andare noi a definire i valori delle proprietà di volta in volta, con quelle ambiguità legate alla visibilità delle variabili che possono indurci all’ errore senza l’uso della parola chiave THIS che fa riferimento all’ oggetto corrente quando non abbiamo a che fare con PUBLIC:

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

}

output indirizzo: https://www.farwebdesign.com/PHPOOP/9/index.php

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

$nlibro = new Libro();
var_dump($nlibro);
$nlibro->titolo = ‘Sandokan’;
$nlibro->autore = ‘Salgari’;
$nlibro->codiceisbn = ‘123ASWE’;
$nlibro->qta = 10;
echo “<br>”;
var_dump($nlibro);

*/

mentre con il costruttore caratterizzata dalla sintassi public function __construct($tit,$aut,$cod,$qta=1) ci accingiamo a creare un oggetto completo che ha le sue proprietà inizializzate e definite, senza dover intervenire in corsa:

/*

<?php
class Libro {
public $titolo;
public $autore;
public $codiceisbn;
public $prezzo;
public $quantita;
public function __construct($tit,$aut,$cod,$qta=1) {
$this-> titolo = $tit;
$this-> autore = $aut;
$this-> codiceisbn = $cod;
$this-> quantita = $qta;
}
public function getTitolo() {
return $this->titolo;
}
}

output con index1.php indirizzo https://www.farwebdesign.com/PHPOOP/9/index1.php, da notare il Sandokan finale dovuto alla stampa dell’ istruzione:
echo $nlibro->getTitolo();

<?php
require_once “classi/Libro1.php”;

$nlibro = new Libro(‘Sandokan’,’Salgari’, ‘1234ASB’);
var_dump($nlibro); //il var_dump è una funzione che stampa il tipo di dati
echo “<br>”;
echo $nlibro->getTitolo();

*/

Con new creiamo una istanza della classe, ma questo sistema non ci fa inizalizzare tutte le proprietà del nostro oggetto e i valori delle variabili devono venire precisati dopo, mentre con l’introduzione del costruttore creo un oggetto già personalizzato sulla base dei parametri che gli vado a passare. Dopo la parola NEW, il metodo costruttore forgia il nostro oggetto inserendo dei valori, ne consegue che questo metodo NON PUO’ RESTITUIRE DEI VALORI perchè non fa altro che dare forma compiuta al nostro oggetto con dei valori assegnati alle proprietà. Il costruttore che è la prima funzione che viene richiamata in una classe inizializza tutte le nostre variabili in una sola stringa. A questo punto non ci resta che perfezionare la nostra classe libro anche in ambito sicurezza, ciò verrà affrontato in una delle prossime puntate!

Davide batte Golia, quando una mossa come 13 Ag5 rende vano qualsiasi commento, anche quelli in PHP!

Qualcuno ha mai sentito nominare un certo Cordes? Aveva il bianco contro Miles nel 1985 a Bad Warisofen che non so dove stà e a un certo punto salta fuori da qulche lontano universo parallelo una mossa pazzesca come 13 Ag5, certamente sono gli anni più belli per gli scacchi giocati, quelli in cui la matematica e l’informatica erano ancora mescolati alla componente umana. Che può fare Miles, magari difende il pedone con Tf8 ma ecco arrivare uno schema da matto anomalo con 14 De5 scacco. Vabbé so quei pochi minuti di celebrità che tutti prima o poi nella vita attraversiamo se non altro quando ci tocca imprecare alle poste quando qualcuno ci passa davanti. E che succcederà mai, il nero sembra averla sfangata con materiale del tutto pari dopo che quella casa d6 diventa il trampolino di lancio tattico per tutti i giochetti sterili del bianco. Sterili? Alla mossa 19 ecco arrivare una semplice spinta di apertura delle linee con il re nero ormai sfinito e si riaprono le danze fino a quando il nero viene piegato e costretto a perdere materiale. Grande prestazione di Cordes quindi http://www.chessgames.com/perl/chessgame?gid=1097651 ma i misteri sopra questa partita rimangono e Giacobbo che fa? Chi é questo Cordes e perché nessuno lo conosce e come mai ha tirato fuori una prestazione da urlo? E ora con seo specialist Umbria saltiamo a PHP. In molti casi se si desidera che siano visualizzati tutti i messaggi di errore durante lo sviluppo, ma non in fase di produzione si può agire sul PHP.ini. Immettere error_reporting =0 e nella pagina web non verrà visualizzato nessun messaggio di errore. E’ possibile registrare i messaggi di errori in un file di LOG invece di disattivarli completamente. Si utilizzano due impostazioni nel file php.ini: impostare log_errors = On e error_log = percorso/nomefile. RISULTATO: gli errori PHP vengono registrati nel file dal nome specificato. Per maggiori delucidazioni rimandiamo all’ articolo scritto da seo specialist Umbria all’ indirizzo https://umbriawayamplifica.wordpress.com/2018/01/04/messaggi-di-errore-in-php-e-mosse-bastarde-non-e-un-titolo-cult-del-nobel-della-letteratura-kazuo-ishiguro-ma-una-scelta-infida-di-kortchnoi-contro-ljubojevic-a-linares-nel-1985/. E ora in seguito a numerose interrogazioni nell’ aula parlamentare di Umbriaway Consulting cerchiamo di dare una risposta al signor Marzullo di strada del Mughetto a Gallipoli: come faccio a escludere porzioni di codice senza cancellarle? L’argomento é stato affrontato numerose volte e rischia di scapparci il morto ma rispondiamo in maniera cortese. I commenti sono note incorporate nello script. PHP ignora i commenti. I commenti forniscono informazioni per la persona che deve decodificare il codice e capire come si é intervenuti nello script e per fare cosa. I commenti vengono anche usati e utilizzati per circoscrivere la semantica del codice e le sezioi critiche della struttura di una pagina. I commenti semplificano e non complicano e vanno usati, sentenzia Faraoni Enrico CEO di Umbriaway Consulting. I commenti possono avere la distanza desiderata e possono essere inseriti ovunque nello script. Il PARSER PHP ignora queste sezioni di codice e trascura eventuali TAG che sono annidati all’ interno di un commento. Con /* indichiamo l’inizio di un commento mentre con */ ne circoscriviamo la fine. Il blocco può trovarsi su più righe se necessario ad esempio /* testo del commento ….*/ é anche possibile indicare un commento di una sola riga. I caratteri // e # indicano l’inizio di una SOLA RIGA di commento. Non esistono regole sulla formattazione dei commenti, spesso gli autori degli script oltre a segnalare il nome e i dettagli del codice inseriscono delle vere bacheche. I commenti possono essere inseriti anche dopo che abbiamo iniziato a dare istruzioni. Vediamo alcuni esempi di commenti validi:

# questa riga é un commento
// anchye questa riga é un commento
$age=21; // il commento inizia qui

###############################
#commento
###############################

/* name= login.php
* descrizione: …..
* autore …….
* created:…..
*/

Crea un sito o un blog gratuitamente presso WordPress.com.

Su ↑