<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>MaiNick Web</title>
	<atom:link href="https://www.mainickweb.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.mainickweb.com</link>
	<description>MaiNick Web - Il blog di Maico Orazio &#124; Tutorial e Risorse gratuite su JavaScript, PHP e programmazione in generale</description>
	<lastBuildDate>Sun, 07 Feb 2021 18:10:52 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.8.4</generator>
	<item>
		<title>Guida ai React Hooks</title>
		<link>https://www.mainickweb.com/guida-ai-react-hooks/</link>
					<comments>https://www.mainickweb.com/guida-ai-react-hooks/#respond</comments>
		
		<dc:creator><![CDATA[Maico Orazio]]></dc:creator>
		<pubDate>Fri, 11 Dec 2020 08:00:00 +0000</pubDate>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[React]]></category>
		<category><![CDATA[hook useCallback]]></category>
		<category><![CDATA[hook useContext]]></category>
		<category><![CDATA[hook useEffect]]></category>
		<category><![CDATA[hook useMemo]]></category>
		<category><![CDATA[hook useReducer]]></category>
		<category><![CDATA[hook useState]]></category>
		<category><![CDATA[react]]></category>
		<category><![CDATA[react hooks]]></category>
		<guid isPermaLink="false">https://www.mainickweb.com/?p=824</guid>

					<description><![CDATA[<p>Grazie agli Hooks siamo in grado di usare lo stato nei componenti funzionali stateless e non è più necessario creare un componente di classe per utilizzarlo</p>
<p>The post <a rel="nofollow" href="https://www.mainickweb.com/guida-ai-react-hooks/">Guida ai React Hooks</a> appeared first on <a rel="nofollow" href="https://www.mainickweb.com">MaiNick Web</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Se fai un lavoro come il mio, l&#8217;approfondimento è una delle regole da seguire nel quotidiano. Nell&#8217;ultimo periodo mi è capitato di approfondire i <strong>React Hooks</strong> e ho deciso di scrivere per il blog dell&#8217;azienda in cui lavoro una guida su questo tema. La <strong>guida ai React Hooks</strong>, divisa in 3 parti nella quale ho presentato alcuni hooks di uso più comune e qualche altro utile al fine di migliorare le prestazioni delle vostre app in React.</p>



<blockquote class="wp-block-quote has-text-align-center"><p>Grazie agli Hooks siamo in grado di usare lo stato nei componenti funzionali stateless senza creare necessariamente un componente di classe per utilizzarlo</p></blockquote>



<hr class="wp-block-separator"/>



<p>Nella <a rel="noreferrer noopener" href="https://medium.com/webeetle/guida-ai-react-hooks-parte-1-510693ea60f8" target="_blank">prima parte della guida ai React Hook</a> approfondisco il perché e il come sono stati introdotti gli hooks e l&#8217;utilizzo dei più comuni <em>useState</em> e <em>useEffect</em>.</p>



<p>L&#8217;<strong>hook useState</strong> consente di gestire lo stato locale nei componente funzionali.</p>



<p>L&#8217;<strong>hook useEffect</strong> viene utilizzato per gestire gli <a href="https://it.wikipedia.org/wiki/Effetto_collaterale_(informatica)" target="_blank" rel="noreferrer noopener nofollow">effetti collaterali</a> nei componenti funzionali.</p>



<hr class="wp-block-separator"/>



<p>Nella <a href="https://medium.com/webeetle/guida-ai-react-hooks-parte-2-c4cce979a65d" target="_blank" rel="noreferrer noopener">seconda parte della guida ai React Hooks</a> presento altri due hooks utili alla gestione dello stato.</p>



<p>L&#8217;<strong>hook useReducer</strong> può essere utilizzato in alternativa a <em>useState</em>, è ideale per la gestione di stato e transazioni di stato più complessi.</p>



<p>L&#8217;<strong>hook useContext</strong> ti fa risparmiare lo stress di dover fare affidamento su un consumer <em><a href="https://it.reactjs.org/docs/context.html" target="_blank" rel="noreferrer noopener nofollow">Context</a></em> e ha un&#8217;API più semplice rispetto all&#8217;API di <em><a href="https://it.reactjs.org/docs/render-props.html" target="_blank" rel="noreferrer noopener nofollow">render props</a></em>.</p>



<hr class="wp-block-separator"/>



<p>Nell&#8217;<a href="https://medium.com/webeetle/guida-ai-react-hooks-parte-3-8541657ff5d5" target="_blank" rel="noreferrer noopener">ultima parte della guida ai React Hooks</a> introduco altri due hooks utili per ottimizzare le prestazioni delle app in React.</p>



<p>L&#8217;<strong>hook useMemo</strong> usato per memorizzare i valori.</p>



<p>L&#8217;<strong>hook useCallback</strong> usato per memorizzare le funzioni.</p>



<p>All&#8217;interno della guida ho condiviso esempi di codice per ogni hook illustrato e per i quali ho inserito i link ai relativi repository.</p>



<blockquote class="wp-block-quote has-text-align-center"><p>Buona lettura!</p></blockquote>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<p></p>
<p>The post <a rel="nofollow" href="https://www.mainickweb.com/guida-ai-react-hooks/">Guida ai React Hooks</a> appeared first on <a rel="nofollow" href="https://www.mainickweb.com">MaiNick Web</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.mainickweb.com/guida-ai-react-hooks/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Come animare favicons con immagini, badges e video</title>
		<link>https://www.mainickweb.com/favicons-con-immagini-badges-e-video/</link>
					<comments>https://www.mainickweb.com/favicons-con-immagini-badges-e-video/#respond</comments>
		
		<dc:creator><![CDATA[Maico Orazio]]></dc:creator>
		<pubDate>Wed, 25 Sep 2013 06:00:13 +0000</pubDate>
				<category><![CDATA[HMTL5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[budge favicon]]></category>
		<category><![CDATA[favicons]]></category>
		<category><![CDATA[notifiche favicon]]></category>
		<guid isPermaLink="false">http://www.mainickweb.com/?p=766</guid>

					<description><![CDATA[<p>Le favicons di solito vengono utilizzate per aiutare gli utenti a distinguere facilmente una determinata scheda del browser dalle altre. Molte applicazione web le usano anche per fornire utili informazioni in tempo reale. Favico.js è una piccola libreria javascript che permette l&#8217;aggiunta di badges, immagini e video al posto della favicons. Addirittura è possibile attivare [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://www.mainickweb.com/favicons-con-immagini-badges-e-video/">Come animare favicons con immagini, badges e video</a> appeared first on <a rel="nofollow" href="https://www.mainickweb.com">MaiNick Web</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Le <strong>favicons </strong>di solito vengono utilizzate per aiutare gli utenti a distinguere facilmente una determinata scheda del browser dalle altre. Molte applicazione web le usano anche per fornire utili informazioni in tempo reale.</p>
<p><strong><a title="Fare un uso della vostra favicon con budges, immagini o video" href="http://lab.ejci.net/favico.js/" target="_blank">Favico.js</a> </strong>è una piccola libreria javascript che <strong>permette l&#8217;aggiunta di badges, immagini e video al posto della favicons</strong>. Addirittura è possibile attivare la webcam del pc dell&#8217;utente e visualizzare lo streaming nella favicons del sito web.</p>
<p><img loading="lazy" class="aligncenter size-full wp-image-769" title="favico.js" src="http://www.mainickweb.com/wp-content/2013/09/favico.js.png" alt="favico.js la vostra favicon con simboli, immagini o video" width="487" height="239" srcset="https://www.mainickweb.com/wp-content/2013/09/favico.js.png 487w, https://www.mainickweb.com/wp-content/2013/09/favico.js-345x169.png 345w" sizes="(max-width: 487px) 100vw, 487px" /></p>
<p>Avrete notato un certo numero di servizi web popolari, come Gmail e Facebook, hanno già questa funzionalità per notificare nuovi messaggi. Anche noi possiamo pensare di <strong>usare la favicon del nostro sito web per notifiche e budges</strong>; i budges supportano diverse animazioni per l&#8217;aggiornamento, inoltre possiano cambiare la forma, la posizione e il colore di sfondo.</p>
<p>Un particolare, la libreria al momento della scrittura di questo articolo non supporta IE 10+</p>
<p>The post <a rel="nofollow" href="https://www.mainickweb.com/favicons-con-immagini-badges-e-video/">Come animare favicons con immagini, badges e video</a> appeared first on <a rel="nofollow" href="https://www.mainickweb.com">MaiNick Web</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.mainickweb.com/favicons-con-immagini-badges-e-video/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>MySQL Event Scheduler</title>
		<link>https://www.mainickweb.com/mysql-event-scheduler/</link>
					<comments>https://www.mainickweb.com/mysql-event-scheduler/#comments</comments>
		
		<dc:creator><![CDATA[Maico Orazio]]></dc:creator>
		<pubDate>Mon, 17 Dec 2012 06:30:12 +0000</pubDate>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[event]]></category>
		<guid isPermaLink="false">http://www.mainickweb.com/?p=760</guid>

					<description><![CDATA[<p>Nel gestire grandi applicazioni Web si possono avere un sacco di righe di dati indesiderate. Ad esempio se un e-commerce è realizzato in modo da memorizzare in modo permanente la gestione del carrello dinamico, oppure la permanenza di vecchi listini divisi per gruppi d&#8217;acquisto, avremo la necessità nel tempo di cancellare questi dati dal database. [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://www.mainickweb.com/mysql-event-scheduler/">MySQL Event Scheduler</a> appeared first on <a rel="nofollow" href="https://www.mainickweb.com">MaiNick Web</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" class="aligncenter size-full wp-image-500" title="snippets-mysql.jpg" src="http://www.mainickweb.com/wp-content/2010/08/snippets-mysql.jpg" alt="" width="500" height="280" srcset="https://www.mainickweb.com/wp-content/2010/08/snippets-mysql.jpg 500w, https://www.mainickweb.com/wp-content/2010/08/snippets-mysql-321x180.jpg 321w" sizes="(max-width: 500px) 100vw, 500px" /></p>
<p>Nel gestire grandi applicazioni Web si possono avere un sacco di righe di dati indesiderate. Ad esempio se un e-commerce è realizzato in modo da memorizzare in modo permanente la gestione del carrello dinamico, oppure la permanenza di vecchi listini divisi per gruppi d&#8217;acquisto, avremo la necessità nel tempo di cancellare questi dati dal database.</p>
<p>In questo articolo voglio spiegare un semplice suggerimento come utilizzare i MySQL Event Scheduler per l&#8217;eliminazione di righe di dati non più desiderati nel database.</p>
<p>Per abilitare la schedulazione degli eventi in MySQL bisogna eseguire la seguente query in PhpMyAdmin o in un qualsiasi altro ide per la gestione del vostro database:</p>
<pre class="brush: sql; title: ; notranslate">
SET GLOBAL event_scheduler = ON;
o
SET GLOBAL event_scheduler = 1;
</pre>
<p>Di seguito la query per creare un evento che ogni giorno cancella i dati dalla tabella del carrello di 10 giorni fà:</p>
<pre class="brush: sql; title: ; notranslate">
CREATE EVENT newEvent
ON SCHEDULE EVERY 1 DAY
DO
DELETE FROM cart WHERE created_at &amp;lt;= DATE_SUB(NOW(), INTERVAL 10 DAY) ;
</pre>
<p>Se si desidera modificare il tempo di esecuzione di un evento è possibile eseguendo la seguente query:</p>
<pre class="brush: sql; title: ; notranslate">
ALTER newEvent
ON SCHEDULE EVERY 5 HOUR
STARTS TIMESTAMP + 3 HOUR
</pre>
<p>Possiamo visualizzare tutti gli eventi in esecuzione:</p>
<pre class="brush: sql; title: ; notranslate">
SHOW EVENTS;
</pre>
<p>ed eliminare un evento:</p>
<pre class="brush: sql; title: ; notranslate">
DROP EVENT newEvents;
</pre>
<p>The post <a rel="nofollow" href="https://www.mainickweb.com/mysql-event-scheduler/">MySQL Event Scheduler</a> appeared first on <a rel="nofollow" href="https://www.mainickweb.com">MaiNick Web</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.mainickweb.com/mysql-event-scheduler/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Come creare una semplice applicazione di geolocalizzazione</title>
		<link>https://www.mainickweb.com/come-creare-una-semplice-applicazione-di-geolocalizzazione/</link>
					<comments>https://www.mainickweb.com/come-creare-una-semplice-applicazione-di-geolocalizzazione/#comments</comments>
		
		<dc:creator><![CDATA[Maico Orazio]]></dc:creator>
		<pubDate>Mon, 12 Mar 2012 06:30:52 +0000</pubDate>
				<category><![CDATA[HMTL5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[geolocation api]]></category>
		<category><![CDATA[google maps api]]></category>
		<category><![CDATA[html5]]></category>
		<guid isPermaLink="false">http://www.mainickweb.com/?p=745</guid>

					<description><![CDATA[<p>Qui vi mostrerò come utilizzare la nuova Geolocation API, insieme alle API di Google Maps, per individuare la posizione dell&#8217;utente e visualizzare una mappa con quella posizione. Dopo che la mappa è pronta, vi mostrerò come aggiungere un marker e come recuperare ulteriori informazioni sulla posizione dell&#8217;utente con una Reverse Geolocation. Per prima cosa, diamo [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://www.mainickweb.com/come-creare-una-semplice-applicazione-di-geolocalizzazione/">Come creare una semplice applicazione di geolocalizzazione</a> appeared first on <a rel="nofollow" href="https://www.mainickweb.com">MaiNick Web</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" class="aligncenter size-full wp-image-751" title="W3C Geolocation API" src="http://www.mainickweb.com/wp-content/2012/03/W3C-Geolocation-API-Making-Websites-Location-aware-Presentation-Transcript-20003.jpg" alt="" width="500" height="385" srcset="https://www.mainickweb.com/wp-content/2012/03/W3C-Geolocation-API-Making-Websites-Location-aware-Presentation-Transcript-20003.jpg 500w, https://www.mainickweb.com/wp-content/2012/03/W3C-Geolocation-API-Making-Websites-Location-aware-Presentation-Transcript-20003-233x180.jpg 233w, https://www.mainickweb.com/wp-content/2012/03/W3C-Geolocation-API-Making-Websites-Location-aware-Presentation-Transcript-20003-376x290.jpg 376w" sizes="(max-width: 500px) 100vw, 500px" /></p>
<p>Qui vi mostrerò come utilizzare la nuova <a title="Geolocation API Specification" href="http://dev.w3.org/geo/api/spec-source.html" target="_blank">Geolocation API</a>, insieme alle <strong>API di Google Maps</strong>, per individuare la <strong>posizione dell&#8217;utente e visualizzare una mappa con quella posizione</strong>.</p>
<p>Dopo che la mappa è pronta, vi mostrerò come <strong>aggiungere un marker</strong> e come <strong>recuperare ulteriori informazioni sulla posizione dell&#8217;utente con una Reverse Geolocation</strong>.</p>
<p>Per prima cosa, diamo uno sguardo alle risorse da collegare alla nostra pagina necessari per sviluppare l&#8217;esempio:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;!-- googlemap API: fundamental to show the map --&gt;
&lt;script src=&quot;http://maps.google.com/maps/api/js?sensor=true&quot;&gt;&lt;!--mce:0--&gt;&lt;/script&gt;
</pre>
<p><strong>Google Maps API V3</strong> script to visualise, modify and enrich our maps.</p>
<h2>Documento HTML</h2>
<p>Questo è tutto il contenuto della nostra pagina html:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div id=&quot;map&quot;&gt;
  &lt;img id=&quot;mapAjaxLoader&quot; src=&quot;img/ajax-loader.gif&quot; alt=&quot;loader&quot; width=&quot;32&quot; height=&quot;32&quot; /&gt;&lt;/div&gt;
</pre>
<p>un div contenitore della mappa, che contiene l&#8217;immagini di loading che faremo visualizzare fino al caricamento dinamico della mappa di Google nel div <code>mapHolder</code>.</p>
<h2>Foglio di stile CSS</h2>
<p>Nel foglio di stile collegato alla pagina indichiamo solo le dimensioni del contenitore mappa.</p>
<pre class="brush: css; title: ; notranslate">
#mapHolder{
  width:336px;
  height:224px;
}
</pre>
<h2>Script in JavaScript</h2>
<p>Come prima cosa verifichiamo se il browser supporta le Geolocation API:</p>
<pre class="brush: jscript; title: ; notranslate">
// individuare il supporto del browser per Geolocation
if (navigator.geolocation !== 'undefined') {
  navigator.geolocation.getCurrentPosition(displayLocation, displayError);
} else {
  alert('Il tuo browser non supporta geolocalizzazione.');
}
</pre>
<p>il metodo <code>getCurrentPosition</code> di <code>navigator.geolocation</code> serve per rilevare la posizione del visitatore, al quale passiamo come parametri due funzioni che saranno chiamate a seconda del feedback dell&#8217;utente (se permette o rifiuta di rilevare la sua posizione):</p>
<p>handler <code>displayLocation</code> in caso di successo:</p>
<pre class="brush: jscript; title: ; notranslate">
function displayLocation (position) {
  var lat = position.coords.latitude;
  var lon = position.coords.longitude;
  // chiamiamo createMap con le coordinate della posizione individuata
  createMap(position.coords);
};
</pre>
<p><code>position</code> è l&#8217;oggetto generato automaticamente da <code>getCurrentPosition</code>, che ha due porprietà la latitudine <code>position.coords.latitude</code> e longitudine <code>position.coords.longitude</code>. Ottenuto le coordinate creiamo la mappa tramite le API di Google Maps:</p>
<pre class="brush: jscript; title: ; notranslate">
function createMap(coords) {
  // crea un oggetto LatLng
  var googleCoords = new google.maps.LatLng(coords.latitude, coords.longitude);
  // opzioni da passare per la creazione della mappa
  var mapOpts = {
    zoom: 15, //zoom della mappa
    center: googleCoords, // centro mappa
    mapTypeId: google.maps.MapTypeId.ROADMAP //tipo mappa [ROADMAP - SATELLITE - HYBRID]
  };
  var mapDiv = document.getElementById(&quot;mapHolder&quot;);
  //crea oggetto mappa
  map = new google.maps.Map(mapDiv, mapOpts);
}
</pre>
<h2>Creare un marker sulla mappa e ottente l&#8217;indirizzo</h2>
<p>Per creare un <strong>marker sulla mappa ad indicare posizione individuata</strong>, chiamiamo la funzione alla fine di <code>createMap</code>, passandogli l&#8217;oggetto mappa e le opzioni personalizzate:</p>
<pre class="brush: jscript; title: ; notranslate">
// aggiunge un marker sulla mappa utilizzando google.maps.Marker
function addMarker(map, googleCoords) {
  //opzioni per il marker
  var markerOpts = {
    animation: google.maps.Animation.BOUNCE, //animazione marker [DROP / BOUNCE]
    position: googleCoords,
    map: map,
  }
  var marker = new google.maps.Marker(markerOpts);
}
</pre>
<p>Possiamo recuperare ulteriori informazioni sulla posizione rilevata, ad esempio l&#8217;indirizzo. Dopo aver creato il marker, chiamiamo la funzione e gli passiamo le coordinate del marker:</p>
<pre class="brush: jscript; title: ; notranslate">
function getCity(coords) {
  var point = new google.maps.LatLng(coords.latitude, coords.longitude);
  //crea un nuovo oggetto Geocoder
  var geocoder = new google.maps.Geocoder();
  geocoder.geocode({'latLng': point}, function(results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
      if (results[1]) {
        //mettiamo l'indirizzo ricevuto in un div yourCITYdiv
        document.getElementById(&quot;yourCITY&quot;).innerHTML=results[1].formatted_address;
      } else {
        //in caso di errore
        document.getElementById(&quot;yourCITY&quot;).innerHTML=&quot;Ricerca indirizzo non riuscita: &quot; + status;
      }
    }
  });
}
</pre>
<p>Nella funzione descritta sopra, definiamo un nuovo oggetto <code>Geocoder</code>. Analizziamo, tramite il metodo <code>geocode</code>, il punto definito dalle coordinate date in input alla funzione, se non si verificano errori il risultato restituirà l&#8217;indirizzo dettagliato della posizione dell&#8217;utente in <code>results[1].formatted_address</code>.</p>
<h2>Conclusioni</h2>
<p>Questo è solo un esempio di creazione della mappa utilizzando le <strong>Geolocation API di HTML5</strong> e quelle di <strong>Google Maps</strong>. Creare una mappa è abbastanza semplice, quindi è possibile personalizzarla utilizzando tutti i tipi di metodi e proprietà delle API; per saperne di più date un&#8217;occhiata alla <a title="Google Maps JavaScript API V3" href="http://code.google.com/intl/it-IT/apis/maps/documentation/javascript/" target="_blank">documentazione delle Google Maps JavaScript API V3</a>.</p>
<p>The post <a rel="nofollow" href="https://www.mainickweb.com/come-creare-una-semplice-applicazione-di-geolocalizzazione/">Come creare una semplice applicazione di geolocalizzazione</a> appeared first on <a rel="nofollow" href="https://www.mainickweb.com">MaiNick Web</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.mainickweb.com/come-creare-una-semplice-applicazione-di-geolocalizzazione/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Semplici espressioni regolari</title>
		<link>https://www.mainickweb.com/semplici-espressioni-regolari/</link>
					<comments>https://www.mainickweb.com/semplici-espressioni-regolari/#respond</comments>
		
		<dc:creator><![CDATA[Maico Orazio]]></dc:creator>
		<pubDate>Mon, 12 Dec 2011 06:30:53 +0000</pubDate>
				<category><![CDATA[snippets]]></category>
		<category><![CDATA[regular expressions]]></category>
		<guid isPermaLink="false">http://www.mainickweb.com/?p=738</guid>

					<description><![CDATA[<p>Le espressioni regolari sono delimitate, di solito un carattere barra /, e queste contengono un modello che descrive una stringa. Di seguito alcuni semplici esempi: /c[ao]sa/ : corrisponde a &#8220;casa&#8221; e a &#8220;cosa&#8221; un&#8217;espressione che descrive qualcosa che contiene la lettera &#8220;c&#8221;, seguita da qualsiasi delle vocali &#8220;a&#8221; o &#8220;o&#8221;, seguito dalle lettere &#8220;sa&#8221;. Per [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://www.mainickweb.com/semplici-espressioni-regolari/">Semplici espressioni regolari</a> appeared first on <a rel="nofollow" href="https://www.mainickweb.com">MaiNick Web</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" class="aligncenter size-full wp-image-739" title="regular expressions" src="http://www.mainickweb.com/wp-content/2011/12/regular-expressions.jpg" alt="" width="733" height="308" srcset="https://www.mainickweb.com/wp-content/2011/12/regular-expressions.jpg 733w, https://www.mainickweb.com/wp-content/2011/12/regular-expressions-345x144.jpg 345w, https://www.mainickweb.com/wp-content/2011/12/regular-expressions-690x290.jpg 690w" sizes="(max-width: 733px) 100vw, 733px" /></p>
<p>Le <strong>espressioni regolari </strong>sono delimitate, di solito un carattere barra /, e queste contengono un modello che descrive una stringa.</p>
<p>Di seguito alcuni semplici esempi:</p>
<ul>
<li><code>/c[ao]sa/</code> : corrisponde a &#8220;casa&#8221; e a &#8220;cosa&#8221;</li>
</ul>
<p>un&#8217;espressione che descrive qualcosa che contiene la lettera &#8220;c&#8221;, seguita da qualsiasi delle vocali &#8220;a&#8221; o &#8220;o&#8221;, seguito dalle lettere &#8220;sa&#8221;.</p>
<p>Per indicare un intervallo di caratteri:</p>
<ul>
<li><code>/[0-9a-f]*/</code> : tutti valori esadecimale</li>
<li><code>/[0-9a-zA-Z]/</code> : corrisponde a tutte le stringhe alfanumeriche</li>
<li><code>/./</code> : il punto corrisponde a qualsiasi carattere</li>
<li><code>/\./</code> : si si vuole far corrispondere realmente un punto</li>
</ul>
<p>cercare un punto, ad esempio in nome a dominio, è necessario farlo precedere da un backslash.</p>
<p>Il quantificatore va messo dopo il carattere (o intervallo di caratteri) per indicare il <strong>numero di occorrenze</strong> che ci dovrebbero essere. E&#8217; possibile dare numeri precisi o utilizzare altri caratteri come:</p>
<ul>
<li>/ab{2}/ : corrisponde ad un stringa che contiene due caratteri &#8220;b&#8221; di seguito, ad esempio &#8220;abb&#8221;</li>
<li>/ab{2,5}/ : corrisponde ad una stringa che contiene minimo 2 caratteri &#8220;b&#8221; e massimo 5, ad esempio &#8220;abb&#8221;, &#8220;abbb&#8221;, &#8220;abbbb&#8221; e &#8220;abbbbb&#8221;</li>
<li>&#8220;?&#8221; : 0 o 1 occorrenza</li>
<li>&#8220;+&#8221; : 1 o più occorrenze</li>
<li>&#8220;*&#8221; : 0 o più occorrenze</li>
</ul>
<p>si noti che nei casi in cui indichiamo il numero di occorrenze massimo dobbiamo sempre specificare anche il numero di occorrenze minimo.</p>
<p>Facciamo un esempio:</p>
<ul>
<li><code>/c[ao]+sa/</code> : corrisponde a &#8220;casa&#8221; e a &#8220;cosa&#8221;, ma anche a &#8220;caasa&#8221;, &#8220;cooosa&#8221;, etc.</li>
</ul>
<p>C&#8217;è anche il simbolo <code>|</code>, che ha lo stesso significato dell&#8217;operatore OR:</p>
<ul>
<li><code>/Ciao|ciao/</code> : corrisponde alla stringa &#8220;Ciao&#8221; oppure &#8220;ciao&#8221;.</li>
</ul>
<p>Possiamo anche delimitare i modelli ad inizio e fine delle stringhe usando rispettivamente &#8220;^&#8221; e &#8220;$&#8221;:</p>
<ul>
<li><code>/^c[ao]sa/</code> : corrisponde a &#8220;casa&#8221; ma non a &#8220;andare a casa&#8221;.</li>
</ul>
<p>Se non ricordiamo tutte le regole per costruirci i nostri modelli di espressioni regolari possiamo utilizzare uno dei tanti <a title="Regular Expressions Cheat Sheet (V2)" href="http://www.addedbytes.com/cheat-sheets/regular-expressions-cheat-sheet/" target="_blank">cheat sheet stampabili</a> che si trovano in rete.</p>
<p>The post <a rel="nofollow" href="https://www.mainickweb.com/semplici-espressioni-regolari/">Semplici espressioni regolari</a> appeared first on <a rel="nofollow" href="https://www.mainickweb.com">MaiNick Web</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.mainickweb.com/semplici-espressioni-regolari/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Animazioni con jQuery in un sistema di votazione</title>
		<link>https://www.mainickweb.com/animazioni-con-jquery-in-un-sistema-di-votazione/</link>
					<comments>https://www.mainickweb.com/animazioni-con-jquery-in-un-sistema-di-votazione/#comments</comments>
		
		<dc:creator><![CDATA[Maico Orazio]]></dc:creator>
		<pubDate>Wed, 07 Sep 2011 06:30:27 +0000</pubDate>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[animazione jquery]]></category>
		<guid isPermaLink="false">http://www.mainickweb.com/?p=726</guid>

					<description><![CDATA[<p>Ho pensato di utilizzare il metodo animate() di jQuery per realizzare un sistema di votazione semplice ma bello da vedere. L&#8217;idea è quella di animare un div espandendolo ad ogni voto ricevuto, tramite la funzione animate, aggiungendo un stesso valore alla proprietà di lunghezza del div stesso. Documento html Foglio di stile CSS Effetti con [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://www.mainickweb.com/animazioni-con-jquery-in-un-sistema-di-votazione/">Animazioni con jQuery in un sistema di votazione</a> appeared first on <a rel="nofollow" href="https://www.mainickweb.com">MaiNick Web</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" class="aligncenter size-full wp-image-729" title="animazioni con jquery" src="http://www.mainickweb.com/wp-content/2011/09/animazioni-con-jquery.jpg" alt="" width="700" height="300" srcset="https://www.mainickweb.com/wp-content/2011/09/animazioni-con-jquery.jpg 700w, https://www.mainickweb.com/wp-content/2011/09/animazioni-con-jquery-345x147.jpg 345w, https://www.mainickweb.com/wp-content/2011/09/animazioni-con-jquery-676x290.jpg 676w" sizes="(max-width: 700px) 100vw, 700px" /></p>
<p>Ho pensato di utilizzare il <a title="Perform a custom animation of a set of CSS properties." href="http://api.jquery.com/animate/" target="_blank" rel="noopener noreferrer">metodo animate() di jQuery</a> per realizzare un sistema di votazione semplice ma bello da vedere.</p>
<p>L&#8217;idea è quella di animare un div espandendolo ad ogni voto ricevuto, tramite la funzione animate, aggiungendo un stesso valore alla proprietà di lunghezza del div stesso.</p>
<h2>Documento html</h2>
<pre class="brush: xml; title: ; notranslate">
&lt;div id=&quot;container&quot;&gt;
    &lt;span id=&quot;question&quot;&gt;Quale di questi framework PHP utilizzi?&lt;/span&gt;
    &lt;div&gt;&lt;span&gt;0&lt;/span&gt;&lt;a href=&quot;&quot;&gt;Vota&lt;/a&gt;Zend Framework&lt;/div&gt;
    &lt;div&gt;&lt;span&gt;0&lt;/span&gt;&lt;a href=&quot;&quot;&gt;Vota&lt;/a&gt;Symfony&lt;/div&gt;
    &lt;div&gt;&lt;span&gt;0&lt;/span&gt;&lt;a href=&quot;&quot;&gt;Vota&lt;/a&gt;CakePHP&lt;/div&gt;
    &lt;div&gt;&lt;span&gt;0&lt;/span&gt;&lt;a href=&quot;&quot;&gt;Vota&lt;/a&gt;CodeIgniter&lt;/div&gt;
    &lt;div&gt;&lt;span&gt;0&lt;/span&gt;&lt;a href=&quot;&quot;&gt;Vota&lt;/a&gt;Kohana&lt;/div&gt;
    &lt;div&gt;&lt;span&gt;0&lt;/span&gt;&lt;a href=&quot;&quot;&gt;Vota&lt;/a&gt;YII framework&lt;/div&gt;
&lt;/div&gt;
</pre>
<h2>Foglio di stile CSS</h2>
<pre class="brush: css; title: ; notranslate">
* {
  font-family: Arial, &quot;Free Sans&quot;;
}
body {
  margin: 0;
  padding: 0;
}
#container {
  margin-top: 20px;
  color: #fff;
}
#container #question {
  display: block;
  padding: 20px;
  font-weight: bold;
  letter-spacing: -3px;
  margin-bottom: 20px;
  padding: 10px;
  font-size: 40px;
  color: #333;
}
#container div {
  font-weight: bold;
  letter-spacing: -3px;
  background: #c00;
  margin-bottom: 15px;
  padding: 10px;
  font-size: 34px;
  color: #ffffff;
  border-left: 20px solid #333;
  width: 400px;
}
#container div a {
  border: 1px solid #40392C;
  border-radius: 5px;
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  text-decoration: none;
  color: #0BBFEC;
  padding: 5px 15px;
  background: #2F2F2F;
  margin: 0 20px;
}
#container div a:hover {
  color: #fff;
}
</pre>
<h2>Effetti con jQuery</h2>
<p>Non dimentichiamoci di includere la libreria jQuery nell&#8217;intestazione head del documento, poi colleghiamo lo script che permette l&#8217;animazione:</p>
<pre class="brush: jscript; title: ; notranslate">
$(document).ready(function() {
  $(&quot;#container div a&quot;).click(function() {
    $(this).parent(&quot;div&quot;).animate({ width: '+=30px' }, 500);
    $(this).prev(&quot;span&quot;).html(parseInt($(this).prev().html()) + 1);
    return false;
  });
});
</pre>
<p>Come potete vedere è tutto molto semplice 😉</p>
<p>Associamo una funzione all&#8217;evento click sul numero di voti: prendiamo il nodo/oggetto padre del link e sudi esso chiamiamo il metodo animate che genera l&#8217;animazione di allungamento in un tempo di 500 millisecondi, dunque incrementiamo il numero di voti.</p>
<p align="center">
	<a href="http://www.mainickweb.com/esempi/jquery/animazione-jquery.html" title="Demo animazioni con jQuery" class="codice minimal" target="_blank" rel="noopener noreferrer"><span>Demo</span></a> <a href="http://www.mainickweb.com/esempi/jquery/animazione-jquery.zip" title="Download codice animazioni con jQuery" class="codice minimal"><span>Download</span></a></p>
<p>The post <a rel="nofollow" href="https://www.mainickweb.com/animazioni-con-jquery-in-un-sistema-di-votazione/">Animazioni con jQuery in un sistema di votazione</a> appeared first on <a rel="nofollow" href="https://www.mainickweb.com">MaiNick Web</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.mainickweb.com/animazioni-con-jquery-in-un-sistema-di-votazione/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Applicazioni Web Offline con HTML5</title>
		<link>https://www.mainickweb.com/applicazioni-web-offline-con-html5/</link>
					<comments>https://www.mainickweb.com/applicazioni-web-offline-con-html5/#respond</comments>
		
		<dc:creator><![CDATA[Maico Orazio]]></dc:creator>
		<pubDate>Mon, 20 Jun 2011 06:00:00 +0000</pubDate>
				<category><![CDATA[HMTL5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[cache manifest]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[web application offline]]></category>
		<guid isPermaLink="false">http://www.mainickweb.com/?p=722</guid>

					<description><![CDATA[<p>HTML5 fornisce una nuova funzionalit&#224; di caching per supportare le applicazioni web in modalit&#224; offline. E&#8217; necessario specificare un determinato file chiamato &#8220;cache manifest&#8221; nella pagina web a cui vogliamo applicare il sistema di caching. L&#8217;URL del file cache manifest va specificato nel tag html del documento in cui vogliamo attivare la funzione di caching [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://www.mainickweb.com/applicazioni-web-offline-con-html5/">Applicazioni Web Offline con HTML5</a> appeared first on <a rel="nofollow" href="https://www.mainickweb.com">MaiNick Web</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" style="display:block; margin-left:auto; margin-right:auto;" src="http://www.mainickweb.com/wp-content/2011/06/web-application-offline.jpg" alt="Web Application Offline" border="0" width="700" height="234" /></p>
<p>HTML5 fornisce una nuova <a href="http://www.w3.org/TR/offline-webapps/" title="Offline Web Applications" target="_blank">funzionalit&agrave; di caching</a> per supportare le <strong>applicazioni web in modalit&agrave; offline</strong>.</p>
<p>E&#8217; necessario specificare un determinato file chiamato <strong>&#8220;cache manifest&#8221;</strong> nella pagina web a cui vogliamo applicare il sistema di caching.<br />
L&#8217;URL del file cache manifest va specificato nel tag <code>html</code> del documento in cui vogliamo attivare la funzione di caching HTML5.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;!DOCTYPE HTML&gt;
&lt;html manifest=&quot;myapp.cache&quot;&gt;
...
</pre>
<p>E&#8217; importante che, per essere correttamente analizzato dal browser, il file di cache manifest deve avere come intestazione in <code>header</code> il tipo MIME <code>text/cache-manifest</code>; dunque &egrave; necessario aggiungere al web server l&#8217;associazione all&#8217;estensione del tipo di file o specificarlo manualmente, ad esempio utilizzando la direttiva <code>header</code> di PHP.</p>
<p>L&#8217;aspetto di un tipico file di cache manifest &egrave; il seguente:</p>
<pre class="brush: plain; title: ; notranslate">
CACHE MANIFEST
index.html
css/style.css
js/jquery.js
images/logo.png

NETWORK:
search.php
</pre>
<p>specifica diversi file di cache, e poi specifica che il file <em>search.php</em> non deve mai essere memorizzato nella cache, in modo da consentire che ad ogni tentativo di accesso al file &egrave; consentito di bypassare il file di cache.</p>
<p>Il procedimento di caching funziona nel momento in cui un utente fa richiesta o accede alla pagina corrispondente ad un documento a cui &egrave; associato un cache manifest, allora il browser deve prima controllare se su server quest&#8217;ultimo &egrave; stato modificato:</p>
<ul>
<li>se non &egrave; stato modificato, viene utilizzato il contenuto della cache</li>
<li>altrimenti se presente una nuova versione del cache manifest, il contenuto presente della cache viene considerato obsoleto e ricaricato dal server.</li>
</ul>
<p>Altra funzionalit&agrave; importante del cache manifest &egrave; che pu&ograve; contenere anche voci di ripiego (sotto la voce <code>FALLBACK</code>), utilizzate dal client/browser se non &egrave; possibile recuperare il contenuto originale.</p>
<pre class="brush: plain; title: ; notranslate">
CACHE MANIFEST
index.html
css/style.css
js/jquery.js
images/logo.png

NETWORK:
search.php

FALLBACK
images/thumb.php	error.png
</pre>
<p>nell&#8217;esempio viene utilizzata un&#8217;immagine statica quando il recupero di un&#8217;immagine generata dinamicamente fallisce.</p>
<p>In HTML5 sono definite delle <a href="http://www.whatwg.org/specs/web-apps/current-work/#application-cache-api" title="Application cache API" target="_blank">API</a> che permettono di attivare manualmente gli aggiornamenti della cache:</p>
<ul>
<li><strong>update()</strong>: aggiorna la cache per il documento corrente in background;</li>
<li><strong>swapCache()</strong>: passa alla cache dell&#8217;applicazione pi&ugrave; recente, se vi &egrave; una pi&ugrave; recente; valida anche per le successive richieste di risorse dalla cache;</li>
<li><strong>onchecking()</strong>: cattura l&#8217;evento <em>checking</em> che si manifesta quando il client/browser verifica se disponibile un aggiornamento o tenta di scaricare per la prima volta il file di cache manifest (questo &egrave; sempre il primo evento della sequenza);</li>
<li><strong>onerror()</strong>: cattura l&#8217;evento <em>error</em> che si manifesta per tutti gli errori che possono verificarsi del tipo: nello scaricare il cache manifest il client/browser ha ricevuto errore 404 o 410, non &egrave; stato possibile scariche le risorse elencate nel cache manifest, si &egrave; verificato un errore durante il recupero delle risorse;</li>
<li><strong>onnoupdate()</strong>: cattura l&#8217;evento <em>noupdate</em> che si manifesta quando il client/browser verifica se disponibile un aggiornamento il cache manifest non &egrave; cambiato;</li>
<li><strong>ondownloading()</strong>: cattura l&#8217;evento <em>downloading</em> che si manifesta quando il client/browser sta scaricando le risorse elencate nel cache manifest dopo aver verificato un aggiornamento di quel&#8217;ultimo;</li>
<li><strong>onprogress()</strong>: cattura l&#8217;evento <em>progress</em> che si manifesta quando il client/browser sta scaricando le risorse elencate nel cache manifest;</li>
<li><strong>onupdateready()</strong>: cattura l&#8217;evento <em>updateready</em> che si manifesta quando le risorse elencate nel cache manifest sono state appena ri-scaricate e lo script pu&ograve; utilizzare il metodo <code>swapCache()</code> per passare alla nuova cache;</li>
<li><strong>oncached()</strong>: cattura l&#8217;evento <em>cached</em> che si manifesta quando le risorse elencate nel cache manifest sono state scaricate e ora si trovano nella cache;</li>
<li><strong>onobsolete()</strong>: cattura l&#8217;evento <em>obsolete</em> che si manifesta quando per trovare il cache manifest il client/browser ha ricevuto l&#8217;errore 404 o 410, per cui la cache dell&#8217;applicazione viene cancellata;</li>
</ul>
<p>The post <a rel="nofollow" href="https://www.mainickweb.com/applicazioni-web-offline-con-html5/">Applicazioni Web Offline con HTML5</a> appeared first on <a rel="nofollow" href="https://www.mainickweb.com">MaiNick Web</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.mainickweb.com/applicazioni-web-offline-con-html5/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>jCanvas: manipolare i Canvas con jQuery</title>
		<link>https://www.mainickweb.com/jcanvas-manipolare-i-canvas-con-jquery/</link>
					<comments>https://www.mainickweb.com/jcanvas-manipolare-i-canvas-con-jquery/#respond</comments>
		
		<dc:creator><![CDATA[Maico Orazio]]></dc:creator>
		<pubDate>Mon, 23 May 2011 06:30:41 +0000</pubDate>
				<category><![CDATA[HMTL5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[canvas]]></category>
		<category><![CDATA[html5]]></category>
		<guid isPermaLink="false">http://www.mainickweb.com/?p=718</guid>

					<description><![CDATA[<p>Per chi cerca una soluzione facile per iniziare a giocare &#8211; dipingere &#8211; con i Canvas, elemento del nuovo standard HTML5, jCanvas è un plugin jQuery che ne semplifica l&#8217;uso attraverso l&#8217;utilizzo dei metodi offerti. E&#8217; possibile definire la dimensione dell&#8217;elemento Canvas, le coordinate (X,Y) da cui partirà il disegno. Molte delle forme sono già [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://www.mainickweb.com/jcanvas-manipolare-i-canvas-con-jquery/">jCanvas: manipolare i Canvas con jQuery</a> appeared first on <a rel="nofollow" href="https://www.mainickweb.com">MaiNick Web</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" src="http://www.mainickweb.com/wp-content/2011/05/jcanvas.jpg" alt="jCanvas" width="700" height="300" border="0" /></p>
<p>Per chi cerca una soluzione facile per iniziare a giocare &#8211; dipingere &#8211; con i <a title="Elemento Canvas di HTML5" href="http://wiht.link/HTML5_guide_4" target="_blank" rel="noopener noreferrer">Canvas</a>, elemento del <strong>nuovo standard HTML5</strong>, <a title="Manipolare i Canvas con jQuery" href="http://calebevans.me/projects/jcanvas/" target="_blank" rel="noopener noreferrer"><strong>jCanvas</strong></a> è un plugin jQuery che <strong>ne semplifica l&#8217;uso</strong> attraverso l&#8217;utilizzo dei metodi offerti.</p>
<p>E&#8217; possibile definire la dimensione dell&#8217;<strong>elemento Canvas</strong>, le coordinate (X,Y) da cui partirà il disegno.<br />
Molte delle forme sono già pronte, come rettangoli, ellissi o archi, definite come oggetti, e molti metodi definiti per l&#8217;utilizzo delle immagini e dei testi.<br />
Per lo stile, tutto è reso più semplice, sfumature o pattern, i colori possono essere indicati con i nomi, in HEX, RGB o RGBA.</p>
<p>Il plugin è in via di miglioramento e nuove funzionalità sono aggiunte di continuo.<br />
La pagina dedicata offre un&#8217;ottima documentazione da cui partire per iniziare nel migliore dei modi ad avvicinarsi agli elementi del nuovo linguaggio di markup HTML5.</p>
<p>Ecco come disegnare gli oggetti presenti dell&#8217;immagine postata all&#8217;inizio di questo articolo:</p>
<pre class="brush: jscript; title: ; notranslate">
$("canvas.test").drawRect({
  fillStyle: "#000",
  x: 50, y: 50,
  width: 200,
  height: 100,
  fromCenter: false
});
$('canvas.test')
.drawArc({
fillStyle: '#729fcf',
x: 70, y: 70,
radius: 50
});
</pre>
<p>The post <a rel="nofollow" href="https://www.mainickweb.com/jcanvas-manipolare-i-canvas-con-jquery/">jCanvas: manipolare i Canvas con jQuery</a> appeared first on <a rel="nofollow" href="https://www.mainickweb.com">MaiNick Web</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.mainickweb.com/jcanvas-manipolare-i-canvas-con-jquery/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Come rendere il database pi&#249; sicuro</title>
		<link>https://www.mainickweb.com/come-rendere-il-database-pi-sicuro/</link>
					<comments>https://www.mainickweb.com/come-rendere-il-database-pi-sicuro/#respond</comments>
		
		<dc:creator><![CDATA[Maico Orazio]]></dc:creator>
		<pubDate>Mon, 09 May 2011 06:30:00 +0000</pubDate>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[database sicuro]]></category>
		<category><![CDATA[SQL Injection]]></category>
		<guid isPermaLink="false">http://www.mainickweb.com/?p=657</guid>

					<description><![CDATA[<p>Se hai un sito web in cui memorizzi dati dell&#8217;utente &#232; probabile che si utilizzi un database, come MySQL, SQLite o altro, ed &#232; importante assicurarsi che il proprio database sia sicuro da e per gli utenti. Creare istruzioni di query al volo come la sequente: &#232; considerata una cattiva pratica che pu&#242; essere facilmente [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://www.mainickweb.com/come-rendere-il-database-pi-sicuro/">Come rendere il database pi&ugrave; sicuro</a> appeared first on <a rel="nofollow" href="https://www.mainickweb.com">MaiNick Web</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" style="display:block; margin-left:auto; margin-right:auto;" src="http://www.mainickweb.com/wp-content/2011/05/sql-inject.jpg" alt="SQL inject" border="0" width="600" height="260" /></p>
<p>Se hai un sito web in cui memorizzi dati dell&#8217;utente &egrave; probabile che si utilizzi un database, come MySQL, SQLite o altro, ed &egrave; importante assicurarsi che il proprio <strong>database sia sicuro</strong> da e per gli utenti.</p>
<p>Creare istruzioni di query al volo come la sequente:</p>
<pre class="brush: php; title: ; notranslate">$sql = &quot;INSERT INTO commenti (nome, commento) VALUES (&quot;.$nome.&quot;,&quot;.$commento.&quot;)&quot;;</pre>
<p>&egrave; considerata una cattiva pratica che pu&ograve; essere facilmente superata, eliminando la maggior parte dei problemi, utilizzando <strong>dichiarazioni SQL prepare</strong>.</p>
<p>Realizzare istruzioni SQL come la precedente pu&ograve; essere rischioso. Se un utente malizioso invia, tramite il modulo del commento, una istruzione SQL appositamente predisposta, &egrave; possibile eseguire query al database. Invece, &egrave; necessario utilizzare <strong>dichiarazioni prepare</strong> come questa:</p>
<pre class="brush: php; title: ; notranslate">$sql = $db-&gt;prepare('INSERT INTO commenti (nome, commento) VALUES (?,?)');</pre>
<p>aggiungere poi i valori singolarmente</p>
<pre class="brush: php; title: ; notranslate">
$sql-&gt;bindParam(1, $nome);
$sql-&gt;bindParam(2, $commento);
</pre>
<p>e infine eseguire la query</p>
<pre class="brush: php; title: ; notranslate">$sql-&gt;execute();</pre>
<p>Si trattano di poche righe in pi&ugrave;, ma che rendono il vostro <strong>codice molto pi&ugrave; sicuro</strong>.</p>
<p>Non solo il database deve essere al sicuro contro le query non intenzionali, ma anche gli utenti.<br />
Se qualcuno &egrave; in grado di memorizzare un commento che sar&agrave; visualizzato da tutti gli altri utenti, allora l&#8217;input deve essere limitato a quello che ci aspettiamo, come in questo caso solo testo. Se invece permettiamo di scrivere codice HTML, un utente malizioso potrebbe caricare un malware da un altro sito, il classico exploit XSS.</p>
<p>Una soluzione semplice pu&ograve; essere l&#8217;utilizzo di funzioni per <strong>sterilizzare l&#8217;input</strong>, dunque sostituire, come nel caso citato, i tag HTML con quelli innocui.<br />
Ad esempio, in un codice PHP che si interfaccia con un database MySQL &egrave; possibile utilizzare:</p>
<pre class="brush: php; title: ; notranslate">$nome = mysql_real_escape_string($_POST['nome']);</pre>
<p>che inserisce l&#8217;escape davanti a caratteri speciali in una istruzione SQL.</p>
<p>Puoi leggere l&#8217;articolo su come <a href="http://www.mainickweb.com/utilizzare-piu-istruzioni-sql-prepare-con-php-mysqli/" title="Utilizzare pi&ugrave; istruzioni SQL prepare con PHP">utilizzare pi&ugrave; istruzioni SQL prepare con PHP</a> per approfondire l&#8217;argomento, e risolvere il problema di utilizzare pi&ugrave; dichiarazioni SQL prepare per l&#8217;esecuzione.</p>
<p>The post <a rel="nofollow" href="https://www.mainickweb.com/come-rendere-il-database-pi-sicuro/">Come rendere il database pi&ugrave; sicuro</a> appeared first on <a rel="nofollow" href="https://www.mainickweb.com">MaiNick Web</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.mainickweb.com/come-rendere-il-database-pi-sicuro/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Menu Verticale con Effetto Fisarmonica &#8211; versione history</title>
		<link>https://www.mainickweb.com/menu-verticale-con-effetto-fisarmonica-versione-history/</link>
					<comments>https://www.mainickweb.com/menu-verticale-con-effetto-fisarmonica-versione-history/#comments</comments>
		
		<dc:creator><![CDATA[Maico Orazio]]></dc:creator>
		<pubDate>Fri, 22 Apr 2011 06:30:30 +0000</pubDate>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[menu effetto easing]]></category>
		<category><![CDATA[menu verticale]]></category>
		<category><![CDATA[menu verticale jquery]]></category>
		<guid isPermaLink="false">http://www.mainickweb.com/?p=606</guid>

					<description><![CDATA[<p>Dopo aver ricevuto abbastanza e-mail e feedback in generale riguardo ad alcune richieste di modifiche, ho deciso di sviluppare una seconda versione del menu verticale con effetto a fisarmonica sperando di soddisfare la maggior parte degli utenti. In questa seconda versione del tutorial aggiungiamo la possibilità di aprire l&#8217;elenco a tendina tramite un secondo bottone [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://www.mainickweb.com/menu-verticale-con-effetto-fisarmonica-versione-history/">Menu Verticale con Effetto Fisarmonica &#8211; versione history</a> appeared first on <a rel="nofollow" href="https://www.mainickweb.com">MaiNick Web</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" style="display: block; margin-left: auto; margin-right: auto; border: 0px initial initial;" title="Menu Verticale con jQuery" src="http://www.mainickweb.com/wp-content/2011/04/menu-verticale-jquery.jpg" border="0" alt="Menu Verticale con jQuery" width="500" height="280" /></p>
<p>Dopo aver ricevuto abbastanza e-mail e feedback in generale riguardo ad alcune richieste di modifiche, ho deciso di sviluppare una <strong>seconda versione del <a title="Menu Verticale con jQuery" href="http://www.mainickweb.com/menu-verticale-jquery-con-effetto-fisarmonica/">menu verticale con effetto a fisarmonica</a></strong> sperando di soddisfare la maggior parte degli utenti.</p>
<p>In questa seconda versione del tutorial aggiungiamo la possibilità di <strong>aprire l&#8217;elenco a tendina tramite un secondo bottone</strong> così da rimanere al link della voce del menu principale la sua funzione predefinita.</p>
<h2>Documento HTML</h2>
<p>Quello che andiamo a cambiare alla nostra pagina HTML è l&#8217;aggiunta di una <strong>freccia down che avrà la funzione di avviare l&#8217;effetto a fisarmonica per visualizzare le voci del sotto menu</strong>:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;li class=&quot;menu&quot;&gt; &lt;!-- costituisce ogni sezione del menu principale --&gt;
  &lt;ul&gt;
    &lt;!-- titolo della sezione che fa aprire il sotto menu --&gt;
    &lt;li class=&quot;title&quot;&gt;
		&lt;a href=&quot;http://www.mainickweb.com/category/firefox/&quot;&gt;Categoria Firefox&lt;/a&gt;
		&lt;img src=&quot;bullet_arrow_down.png&quot; /&gt;
	&lt;/li&gt;
    &lt;li class=&quot;sub-menu sub-menu-open&quot;&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href=&quot;http://www.mainickweb.com/hack-css-per-firefox-opera-safari-e-internet-explorer/&quot;&gt;Articolo 1&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&quot;http://www.mainickweb.com/firefox-3-le-caratteristiche/&quot;&gt;Articolo 2&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
</pre>
<p>Aggiungiamo un&#8217;altra classe CSS <code>sub-menu-open</code> all&#8217;elenco del sotto menu per indicare quale di default è <strong>aperto inizialmente</strong> al caricamento della pagina.</p>
<h2>Foglio di stile CSS</h2>
<p>Abbiamo modificato le proprietà di alcuni selettori per utilizzare la <strong>freccia come bottone di apertura</strong>, aggiunta la classe per il sotto menu aperto di default e aggiunto il cursore di tipo puntatore quando andiamo sopra all&#8217;immagine:</p>
<pre class="brush: css; title: ; notranslate">
ul {
	margin: 0;
	padding: 0;
}

ul.container {
	width: 240px;
	margin: 0 auto;
	padding: 50px;
}

li {
	list-style: none;
	text-align: left;
}

li.menu {
	/* Voci dell'elenco principale */
	width: 100%;
	padding: 5px 0;
}

li.title {
	display: block;
	position: relative;
	width: 200px;
	height: 34px;
	padding: 10px 20px 0;
	-moz-border-radius: 5px;
	-webkit-border-radius: 5px;
	border-radius: 5px;
	background-color: #cc0000;
}

li.title:hover {
	background-color: #f40000;
}

li.title a {
	/* Voce del menu principale */
	color: #ffffff;
	font-family: BPreplay,Arial,Helvetica,sans-serif;
	font-size: 21px;
	overflow: hidden;
}

li.title a:hover {
	text-decoration: none;
}

li.title a span {
	/* Questo span agisce come parte finale della sezione title */
	display: block;
	position: absolute;
	top: 0;
	right: 0;
	width: 4px;
	height: 44px;
}

li.title img {
	/* freccia apertura sotto menu */
	float: right;
	cursor: pointer;
}

.sub-menu {
	/* Sotto menu */
	display: none;
	width: 100%;
	padding-top: 5px;
}

.sub-menu li {
	/* Voci del sotto menu */
	margin: 5px 0;
	padding: 4px 18px;
	border: 1px solid #40392c;
	background-color: #2F2F2F;
	color: #cccccc;
}

.sub-menu-open {
	display: block;
}
</pre>
<h2>Effetti con jQuery</h2>
<p>Gli script che andremo ad includere nella pagina sono gli stessi, ma bisogna dare uno sguardo allo script che gestisce l&#8217;effetto per vedere le modifiche apportate:</p>
<pre class="brush: jscript; title: ; notranslate">
$(document).ready(function(){

	/* Cambiare l'effetto da utilizzare */
	$.easing.def = &quot;easeOutBounce&quot;;

	/* Associare una funzione all'evento click sul link */
	$('li.title img').click(function(e){

		/* Trovare l'elenco a discesa che corrisponde al menu cliccato: */
		var subMenu = $(this).parent().next();

		/* Trovare il sotto menu che corrisponde alla voce cliccata */
		$('.sub-menu').not(subMenu).slideUp('slow');
		subMenu.stop(false,true).slideToggle('slow');

		/* Prevenire l'evento predefinito (che sarebbe di seguire il collegamento) */
		e.preventDefault();
	})

});
</pre>
<p>L&#8217;unica modifica effettuata riguarda il <strong>selettore</strong> su cui catturiamo l&#8217;evento <code>click</code> <strong>per aprire il corrispondente sotto menu</strong>.</p>
<h2>Versione History</h2>
<p>Ho deciso di chiamare questo secondo tutorial in questo modo perché un&#8217;altra importante richiesta ricevuta è quella di <strong>mantenere il sotto menu aperto</strong> nella pagina raggiunta da un link di uno dei sotto menu.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php $array_label_menu = array('jquery' =&gt; '', 'php' =&gt; '', 'css' =&gt; '', 'firefox' =&gt; '') ?&gt;
&lt;?php $submenu_open = (isset($_GET['menu']) &amp;amp;&amp;amp; $_GET['menu']!='') ? $_GET['menu'] : 'php'; ?&gt;
&lt;?php $array_label_menu[$submenu_open] = 'sub-menu-open'; ?&gt;
</pre>
<p>Utilizzando un array indichiamo come chiavi di valori nulli le parole che specificano la nostra voce del menu principale e utilizzando una valore che ci inviamo tramite l&#8217;array globale <code>$_GET</code> andiamo a inserire la classe CSS <code>sub-menu-open</code> come valore alla chiave corrispondete al <code>$_GET['menu']</code> inviato.</p>
<p>Adesso vediamo come si modifica la parte riguardo al menu:</p>
<pre class="brush: php; title: ; notranslate">
&lt;li class=&quot;menu&quot;&gt; &lt;!-- costituisce ogni sezione del menu principale --&gt;
  &lt;ul&gt;
    &lt;!-- titolo della sezione che fa aprire il sotto menu --&gt;
    &lt;li class=&quot;title&quot;&gt;
		&lt;a href=&quot;http://www.mainickweb.com/category/firefox/?menu=firefox&quot;&gt;Categoria Firefox&lt;/a&gt;
		&lt;img src=&quot;bullet_arrow_down.png&quot; /&gt;
	&lt;/li&gt;
    &lt;li class=&quot;sub-menu &lt;?php echo $array_label_menu['firefox'] ?&gt;&quot;&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href=&quot;http://www.mainickweb.com/hack-css-per-firefox-opera-safari-e-internet-explorer/?menu=firefox&quot;&gt;Articolo 1&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&quot;http://www.mainickweb.com/firefox-3-le-caratteristiche/?menu=firefox&quot;&gt;Articolo 2&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
</pre>
<p align="center"><a class="codice minimal" title="Demo menu verticale con jQuery versione History" href="http://www.mainickweb.com/esempi/jquery/menu-verticale-vers-history/menu-verticale.html" target="_blank" rel="noopener noreferrer"><span>Demo</span></a> <a class="codice minimal" title="Download codice menu verticale con jQuery versione History" href="http://www.mainickweb.com/esempi/jquery/menu-verticale-vers-history.zip"><span>Download</span></a></p>
<p>The post <a rel="nofollow" href="https://www.mainickweb.com/menu-verticale-con-effetto-fisarmonica-versione-history/">Menu Verticale con Effetto Fisarmonica &#8211; versione history</a> appeared first on <a rel="nofollow" href="https://www.mainickweb.com">MaiNick Web</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.mainickweb.com/menu-verticale-con-effetto-fisarmonica-versione-history/feed/</wfw:commentRss>
			<slash:comments>26</slash:comments>
		
		
			</item>
	</channel>
</rss>
