<?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>informatica&#38;tlc.it - Blog</title>
	<atom:link href="http://www.informaticaetlc.it/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://www.informaticaetlc.it/blog</link>
	<description>Portale dedicato all&#039;informatica e alle telecomunicazioni</description>
	<lastBuildDate>Wed, 14 Jul 2010 13:41:37 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>SEO &#8211; L&#8217;head, i tag meta e il file robots.txt</title>
		<link>http://www.informaticaetlc.it/blog/seo-lhead-i-tag-meta-e-il-file-robots-txt.html</link>
		<comments>http://www.informaticaetlc.it/blog/seo-lhead-i-tag-meta-e-il-file-robots-txt.html#comments</comments>
		<pubDate>Mon, 12 Jul 2010 07:28:40 +0000</pubDate>
		<dc:creator>ilos37</dc:creator>
				<category><![CDATA[Programmazione]]></category>

		<guid isPermaLink="false">http://www.informaticaetlc.it/blog/?p=90</guid>
		<description><![CDATA[Per un buon posizionamento nei motori di ricerca è importante strutturare la prima parte della pagina Web in maniera appropriata popolando la parte &#60;head&#62; attraverso i principali tag. Tra questi citeremo i tag &#60;title&#62; e &#60;meta&#62;.

&#60;title&#62;
Il più importante tra i tag dell&#8217;&#60;head&#62; è sicuramente il tag &#60;title&#62; che deve contenere il titolo della pagina Web. [...]]]></description>
			<content:encoded><![CDATA[<p>Per un buon posizionamento nei motori di ricerca è importante strutturare la prima parte della pagina Web in maniera appropriata popolando la parte <em>&lt;head&gt;</em> attraverso i principali tag. Tra questi citeremo i tag <em>&lt;title&gt; </em>e<em> &lt;meta&gt;.<br />
</em></p>
<p><strong>&lt;title&gt;</strong></p>
<p>Il più importante tra i tag dell&#8217;<em>&lt;head&gt;</em> è sicuramente il tag <em>&lt;title&gt;</em> che deve contenere il <em>titolo</em> della pagina Web. E&#8217; un parametro molto utilizzato dai motori di ricerca per l&#8217;indicizzazione della pagina quindi le parole contenute al suo interno devono rispecchiare le principali keyword contenute nella pagina.</p>
<p><strong>&lt;meta&gt;</strong></p>
<p>Vi sono diversi parametri che si possono impostare attraverso il tag <em>&lt;meta&gt;</em>, tra di essi però quelli che interessano maggiormente il SEO sono i parametri <strong>description</strong>, <strong>keywords </strong>e <strong>robots</strong>. Il loro utilizzo è del tipo:</p>
<pre class="chili"><code class="html""""""""""""">&lt;meta name=&quot;description&quot; content=&quot;contenuto del tag&quot;&gt;&lt;/meta&gt;
&lt;meta name=&quot;keywords&quot; content=&quot;contenuto del tag&quot;&gt;&lt;/meta&gt;
&lt;meta name=&quot;robots&quot; content=&quot;contenuto del tag&quot;&gt;&lt;/meta&gt;
</code></pre>
<p>Vediamoli in dettaglio:</p>
<ul>
<li><strong>description</strong>, è utilizzato per fornire una descrizione della pagina e deve essere significativo in quanto viene spesso utilizzato dai motori per visualizzare quella pagina tra i risultati. Conviene non inserire mai troppe informazioni e limitarsi a una descrizione breve e concisa che contenga le principali keyword contenute nella pagina cercando di non superare i 100-150 caratteri;</li>
<li><strong>keywords</strong>, contiene le principali keywords (una o più parole) della pagina in maniera non discorsiva, quasi ad elenco. Le keyword vengono separate tra loro da virgole e conviene non andare oltre le 25-30 keywords per pagina. Un tempo questo tag forniva una importante indicazione per i motori, oggi invece è quasi &#8220;evitato&#8221; (google lo considera ormai pochissimo) per l&#8217;uso improprio e indiscriminato che ne è stato fatto negli anni passati;</li>
</ul>
<ul>
<li><strong>robots</strong>, serve a indicare al motore di ricerca se seguire e/o indicizzare la pagina Web. Il content di questo tag non è libero come per gli altri 2 ma bensì può assumere solo 4 configurazioni:</li>
</ul>
<p style="padding-left: 60px;">
<pre class="chili"><code class="html""""""""""""""""""">
&lt;meta name=&quot;robots&quot; content=&quot;index, follow&quot;&gt;&lt;/meta&gt;
&lt;meta name=&quot;robots&quot; content=&quot;noindex, follow&quot;&gt;&lt;/meta&gt;
&lt;meta name=&quot;robots&quot; content=&quot;index, nofollow&quot;&gt;&lt;/meta&gt;
&lt;meta name=&quot;robots&quot; content=&quot;noindex, nofollow&quot;&gt;&lt;/meta&gt;
</code></pre>
</p>
<p style="padding-left: 30px;">La parte <strong>index</strong> sta a indicare al motore di ricerca che può indicizzare la pagina e quindi può farla, eventualmente, visualizzare tra le SERP; viceversa, <strong>noindex</strong> comunica al motore che quella pagina non deve essere indicizzata. La parte <strong>follow </strong>indica al motore che può seguire i link contenuti nella pagina in questione per poter indicizzare le pagine ad essa collegate; <strong>nofollow</strong> indica al motore di non seguire i link all&#8217;interno della pagina. E&#8217; preferibile utilizzare il meno possibile il tag robots e preferire l&#8217;inserimento del file <em>robots.txt</em> che vedremo tra poco. <strong>NOTA</strong>: se tale tag viene omesso di default la configurazione è <em>index,follow</em>.</p>
<p>Precisiamo una cosa importante: nei tag appena visti sopra, ovvero title, meta description e meta keywords <strong>utilizzate <span style="text-decoration: underline;">sempre</span> parole e frasi contenuti nella pagina Web!</strong> L&#8217;utilizzo indiscriminato di parole e frasi non contenute nella pagina ma inseriti in tali tag potrebbe portare a <strong>penalizzazioni </strong>e quindi alla visualizzazione della pagina molto più in basso nelle SERP!</p>
<p>Terminiamo questo articolo spendendo due parole sul file <strong>robotx.txt</strong> che, come accennato sopra, serve a indicare al motore di ricerca quali pagine indicizzare e quali no. Tale file va inserito nella root del sito, ovvero dove può essere visualizzato attraverso l&#8217;url principale. Un esempio molto semplice di tale file è il seguente:</p>
<pre class="chili"><code class="html""""""""""""""""""">
User-Agent: *
Disallow: /pag_protetta/
Allow:/

</code></pre>
<p>Questo robots.txt si riferisce a tutti i motori di ricerca (User-Agent: *) e ci dice che i file all&#8217;interno della cartella &#8220;pag_protetta&#8221; (la vostra cartella che non volete far indicizzare) non vanno indicizzati mentre ciò non vale per tutte le altre pagine (Allow:/). Si possono personalizzare le regole in base ai motori di ricerca inserendo al posto di &#8220;User-Agent: *&#8221; il nome dello spider desiderato (googlebot per google, slurp per yahoo ecc&#8230;).</p>

<!-- Quick Adsense Wordpress Plugin: http://techmilieu.com/quick-adsense -->
<div style="float:none;margin:10px 0 10px 0;text-align:center;">
<script type="text/javascript"><!--
google_ad_client = "pub-1846976007193594";
/* 468x15, creato 28/12/09 */
google_ad_slot = "6447647971";
google_ad_width = 468;
google_ad_height = 15;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>

<div style="font-size:0px;height:0px;line-height:0px;margin:0;padding:0;clear:both"></div>]]></content:encoded>
			<wfw:commentRss>http://www.informaticaetlc.it/blog/seo-lhead-i-tag-meta-e-il-file-robots-txt.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Invio di newsletter in PHP e gestione dello spam</title>
		<link>http://www.informaticaetlc.it/blog/invio-di-newsletter-in-php-e-gestione-dello-spam.html</link>
		<comments>http://www.informaticaetlc.it/blog/invio-di-newsletter-in-php-e-gestione-dello-spam.html#comments</comments>
		<pubDate>Sat, 10 Jul 2010 09:35:17 +0000</pubDate>
		<dc:creator>ilos37</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[allegati]]></category>
		<category><![CDATA[gmail]]></category>
		<category><![CDATA[hotmail]]></category>
		<category><![CDATA[mail]]></category>
		<category><![CDATA[newsletter]]></category>
		<category><![CDATA[phpmailer]]></category>
		<category><![CDATA[smtp]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://www.informaticaetlc.it/blog/?p=72</guid>
		<description><![CDATA[In questo articolo vedremo come inviare in maniera semplice e veloce delle mail con la classe PHPMailer e cosa fare per evitare che esse vengano viste come spam dai vari filtri antispam presenti sugli account di posta.]]></description>
			<content:encoded><![CDATA[<p>In questi giorni mi sono trovato a risolvere un problema non di poco conto: le mail inviate come <em>newsletter </em>da alcuni siti vengono viste dai riceventi come <em>spam</em>. Ciò era dovuto, nella maggior parte dei casi, alla mancanza di alcuni <em>header </em>nelle impostazioni della mail. Purtroppo non tutti i problemi si sono risolti; infatti, su <strong>yahoo </strong>e, soprattutto, <strong>hotmail </strong>le mail venivano viste ancora come posta indesiderata, mentre l&#8217;invio su account come <strong>gmail</strong>, <strong>libero </strong>e <strong>alice </strong>non davano alcun problema. Ma procediamo con ordine e analizziamo il codice per l&#8217;invio delle mail.</p>
<p>Utilizziamo la classe <strong><a title="PHPMailer" href="http://phpmailer.worxware.com/" target="_blank">PHPMailer </a></strong>per gestire in modo estremamente semplice l&#8217;invio delle mail. Per utilizzarla scarichiamo il pacchetto e inseriamo all&#8217;interno del nostro codice il file <em>class.phpmailer.php</em>:</p>
<pre class="chili"><code class="php""""""""""""""">require_once(&quot;include/class.phpmailer.php&quot;);</code></pre>
<p>dopodiché si procede con l&#8217;inserimento delle varie opzioni:</p>
<pre class="chili"><code class="php""""""""""""""">
$mail = new PHPMailer();
$mail-&gt;IsSMTP();                    // attiva l&#039;invio tramiteSMTP
$mail-&gt;Host     = &quot;vostro.server.smtp&quot;; // indirizzo smtp
$mail-&gt;From     = &quot;vostra@mail.com&quot;;
$mail-&gt;FromName = &quot;Vostro nome&quot;;
$mail-&gt;AddReplyTo(&#039;vostra-mail@reply.com&#039;);
$mail-&gt;Sender = &quot;vostra@mail.com&quot;;
$mail-&gt;AddAddress(mail@destinatario.com);
$mail-&gt;IsHTML(true);
$mail-&gt;Subject  =  &quot;Oggetto della mail&quot;;
$mail-&gt;Body     =  &quot;Corpo della mail&quot;;
if(!$mail-&gt;Send()){
echo &quot;Si è verificato un errore nell&#039;invio della mail&quot;;
}
</code></pre>
<p>Il codice è molto semplice, si istanzia un oggetto della classe in questione e abilitiamo l&#8217;invio tramite <strong>SMTP </strong>attraverso il metodo <em>IsSMTP().</em> Si inseriscono i propri dati per completare le intestazioni e l&#8217;indirizzo del destinatario della mail; con il metodo <em>IsHTML(true) </em>impostiamo l&#8217;invio della mail come <em>text/html</em> così da poter inserire i tag html per gestire il formato della mail (ovviamente se è una mail di solo testo si può omettere, anzi è consigliabile come vedremo dopo). Dopo aver inserito l&#8217;oggetto e il corpo si effettua l&#8217;invio tramite il metodo <em>Send()</em>.</p>
<p>Sulla classe PHPMailer ci sono da dire altre 2 cose importanti: tramite di essa si posso inviare email anche tramite server SMTP che richiedono l&#8217;autenticazione inserendo i seguenti parametri:</p>
<pre class="chili"><code class="php""""""""""""""">
$mail-&gt;Username =  &quot;username del server SMTP&quot;; //di solito la mail utilizzata
$mail-&gt;Password = &#039;password&#039;; //di solito la password della mail
$mail-&gt;SMTPAuth = true;
</code></pre>
<p>oppure inserire degli allegati attraverso il parametro:</p>
<pre class="chili"><code class="php""""""""""""""">
$mail-&gt;AddAttachment(&quot;filename_1.zip&quot;);
</code></pre>
<p>Anche se in maniera breve, abbiamo fatto una panoramica abbastanza esauriente sull&#8217;utilizzo della classe PHPMailer. Con le impostazioni viste sono riuscito a non avere molti problemi con i vari gestori di account di posta che analizzano principalmente le intestazioni con i loro filtri antispam. Purtroppo è il livello del filtro che fa si che la nostra email sia considerata come spam oppure no. Di solito vi è un indice numerico che stabilisce un livello massimo di tolleranza e ogni &#8220;imprecisione&#8221; o &#8220;problema&#8221; rilevato sui vari parametri della mail (intestazione, oggetto, corpo&#8230;) incide per un valore in base alla gravità. Se la somma di tali valori supera il livello massimo di tolleranza l&#8217;email verrà vista come spam.</p>
<p>Se la vostra mail è puro testo non ci dovrebbero essere molti problemi avendo tutte le impostazioni apposto, al contrario, invece, se la mail contiene codice html, i filtri antispam sono molto più restrittivi soprattutto in presenza di immagini. Per cercare di non incorrere in penalizzazioni bisogna inserire un codice html il più possibile <strong>pulito </strong>e <strong>accessibile</strong>. Bisogna inserire tutti i tag in ordine con la relativa chiusura secondo la struttura</p>
<pre class="chili"><code class="html""""""""""""""">
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=iso-8859-1&quot; /&gt;
&lt;title&gt;Title della mail&lt;/title&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;!-- Corpo della mail --&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>
<p>All&#8217;interno del body possiamo inserire tutti i tag che ci servono per formattare come meglio crediamo la mail (&lt;p&gt;, &lt;table&gt; ecc..) ricordandoci 3 importanti accorgimenti:</p>
<ol>
<li>se inseriamo immagini inseriamo SEMPRE gli attributi <strong>alt </strong>e <strong>title</strong>;</li>
<li>l&#8217;attributo <strong>title</strong> va inserito anche nei link inseriti attraverso il tag &lt;a&gt;;</li>
<li>se inseriamo immagini e/o molti tag html dobbiamo inserire anche abbastanza testo; da prove da me effettuate  una mail con anche solo un&#8217;immagine all&#8217;interno e poco testo viene penalizzata, mentre se il testo è abbastanza passa più facilmente senza penalizzazioni.</li>
</ol>
<p>Rispettando queste semplici regole sono riuscito a far pervenire, anche a utenti hotmail, la mail senza che il filtro antispam la taggasse come spam. Naturalmente in molti account è possibile personalizzare la sensibilità del filtro che potrebbe dare problemi anche con accorgimenti più accurati.</p>
<p>L&#8217;ultimo argomento dell&#8217;articolo riguarda l&#8217;analisi di una mail taggata come spam se l&#8217;accout ci fornisce le informazioni sulle penalizzazioni effettuate dal filtro antispam. Alcuni account (come gli account  email creati su aruba, ad esempio) ci forniscono tali informazioni. Vediamo un esempio pratico di una mail taggata come spam:</p>
<pre class="chili"><code class=""""""""""""""">
Content analysis details:   (5.2 points, 5.0 required)
pts rule name              description
---- ---------------------- ------------------------------
--------------------
-0.0 NO_RELAYS              Informational: message was not relayed via  SMTP
0.0 HTML_MESSAGE           BODY: HTML included in message
1.7 MIME_HTML_ONLY         BODY: Message only has text/html MIME parts
2.5 HTML_IMAGE_ONLY_16     BODY: HTML: images with 1200-1600 bytes of  words
1.1 HTML_MIME_NO_HTML_TAG  HTML-only message, but there is no HTML tag
-0.0 NO_RECEIVED            Informational: message has no Received  headers</code></pre>
<div>Questa situazione ci informa che il filtro è impostato su una sensibilità massima pari a 5.0 (5.0 required) ma l&#8217;email ha riportato un punteggio di 5.2 (5.2 points). Dall&#8217;analisi si evince che la mail era stata impostata im maniera errata, dove mancavano i tag più importanti come il tag &lt;html&gt; (&#8221;1.1 HTML_MIME_NO_HTML_TAG  HTML-only message, but there is no HTML tag&#8221;), era formata in gran parte da codice html con poco testo (&#8221;1.7 MIME_HTML_ONLY BODY: Message only has text/html MIME parts&#8221;) e il testo era insufficiente anche rispetto alle immagini inserite (2.5 HTML_IMAGE_ONLY_16 BODY: HTML: images with 1200-1600 bytes of   words). Per informazioni più dettagliate sui vari tipi di errore si veda il seguente <a href="http://spamassassin.apache.org/tests_3_3_x.html">link</a> aggiornato alla versione 3.3 che è quella più aggiornata al momento della scrittura dell&#8217;articolo.</div>
]]></content:encoded>
			<wfw:commentRss>http://www.informaticaetlc.it/blog/invio-di-newsletter-in-php-e-gestione-dello-spam.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SEO &#8211; Introduzione ai motori di ricerca</title>
		<link>http://www.informaticaetlc.it/blog/seo-introduzione-ai-motori-di-ricerca.html</link>
		<comments>http://www.informaticaetlc.it/blog/seo-introduzione-ai-motori-di-ricerca.html#comments</comments>
		<pubDate>Tue, 06 Jul 2010 17:37:30 +0000</pubDate>
		<dc:creator>ilos37</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[SEO]]></category>

		<guid isPermaLink="false">http://www.informaticaetlc.it/blog/?p=62</guid>
		<description><![CDATA[La Search Engine Optimization riveste un ruolo sempre maggiore nel Web per cercare di risalire nei risultati dei motori di ricerca per determinate keyword. In questo articolo viene effettuata una trattazione teorica sul SEO analizzando concetti come crawler, link popularity e page rank.]]></description>
			<content:encoded><![CDATA[<p>Al giorno d&#8217;oggi è sempre più frequente ricercare qualsiasi informazione attraverso i motori di ricerca, si arriva persino a inserire l&#8217;URL di un sito sul motore invece che sulla barra degli indirizzi! Si può ben capire che avere il proprio sito nelle prime posizioni risultanti dalla ricerca è un fattore molto importante soprattutto in ambito commerciale; spesso le aziende pagano i motori per far si che il loro sito risulti bene in vista se vengono digitate alcune <em>parole chiave</em> (<strong>keyword</strong>) come nel caso di <strong>google </strong>con <em>google adwords,</em> che propone dei link &#8220;sponsorizzati&#8221; in cima alla lista dei risultati della ricerca o inseriti laterali alla stessa pagina. Tale servizio, però, si paga <em>&#8220;a click</em>&#8221; e in base alla mole di visitatori il costo salirebbe vertiginosamente: in questo contesto nasce la scienza che studia in che modo funziona l&#8217;algoritmo di ricerca dei motori e le relative applicazioni pratiche per poter far comparire un sito nelle prime posizioni delle ricerche in relazione all&#8217;utilizzo di determinate keyword. Tali procedure prendono il nome di <em><strong>ottimizzazione dei motori di ricerca</strong></em> o <strong><em>Search  Engine Optimization</em></strong> (<strong>SEO</strong>)</p>
<p>E&#8217; stato precedentemente citato google non a caso. Il colosso di Mountain View, infatti, è il motore di ricerca più utilizzato al mondo e il suo algoritmo di ricerca è ancora poco chiaro in tutti i suoi punti, però si hanno molte infomazioni su come lavora. La nostra trattazione di SEO consterà maggiormente su come ottimizzare una pagina web e/o un intero sito internet per google.</p>
<p>L&#8217;attività di SEO è un&#8217;operazione che va effettuata sia sul codice HTML che sui contenuti, non basta infatti inserire dei tag &lt;meta&gt; al posto giusto per fare SEO, quello serve ma non è abbastanza: i contenuti di una pagina web svolgono un ruolo importante nel farla posizionare bene utilizzando vocaboli appropriati che possano consentire una migliore visibilità da parte dei motori. L&#8217;ottimizzazione sul codice verrà trattata in un altro articolo.</p>
<p>Come avviene la scansione di un sito da parte di un motore di ricerca? La ricerca delle pagine web avviene attraverso meccanismi automatizzati, da script che analizzano un sito web in maniera iterativa seguendo i link che vi sono al suo interno partendo dall&#8217;URL principale fino alle pagine più interne. Tali script prendono il nome di <strong>crawler</strong> o <strong>spider</strong>. Ogni motore ha uno spider apposito, quello di google di chiama <em>googlebot</em>, di <strong>Yahoo</strong> si chiama <strong>Yahoo! Slurp</strong> e così via&#8230;. Lo spider continua la scansione in tutte le pagine senza fare distinzione tra le cartelle, andando così a indicizzare (e quindi rendere potenzialmente pubblici) anche file e/o pagine che si vorrebbero tenere lontano dai motori di ricerca. Per limitare la scansione si può utilizzare un file che si deve chiamare <span style="text-decoration: underline;"><em>robots.txt</em></span> nella root del sito indicando le directory da non indicizzare e alcune regole da utilizzare.<span style="text-decoration: underline;"><strong><br />
Importante</strong></span>: il crawler dovrebbe non andare a leggere il contenuto delle cartelle che sono state indicate nel robots.txt, ma alcuni crawler lo fanno comunque, è bene tenerlo presente. Googlebot segue bene le indicazioni inserite sul robots.txt.</p>
<p>Terminiamo questa breve introduzione teorica sul SEO introducendo dei parametri molto cari a google: <strong>link popularity</strong> e <strong>page rank</strong>. Ogniqualvolta si effettua una ricerca si ha un elenco ordinato di risultati che prendono il nome di <strong>search engine result page</strong> (<strong>SERP</strong>). A parità di tag e di contenuti, un sito può risultare molto più in alto nelle SERP di un altro proprio in base a questi due parametri.<br />
La <em>link popularity</em> è il numero dei link che puntano a una determinata pagina Web e indica la &#8220;popolarità&#8221; di un sito. Infatti, un link verso una pagina Web di un sito da parte di un altro può essere visto come un &#8220;consiglio&#8221; hai visitatori e quindi l&#8217;indicazione che il sito vale la pena di essere visitato.<br />
Il <em>page rank</em> può essere visto come una link popularity &#8220;pesata&#8221; dove ci sono link che &#8220;valgono&#8221; di più e link che &#8220;valgono&#8221; di meno. Esso è un valore che va da 0 a 10 e si calcola in base al seguente algoritmo</p>
<div id="attachment_65" class="wp-caption aligncenter" style="width: 308px"><img class="size-full wp-image-65" title="page_rank" src="http://www.informaticaetlc.it/blog/wp-content/uploads/2010/07/page_rank.png" alt="formula per il calcolo del page rank da parte di google" width="298" height="51" /><p class="wp-caption-text">formula per il calcolo del page rank da parte di google</p></div>
<p>Dove:</p>
<ul>
<li><em>PR[A]</em> è il valore di PageRank della pagina A che vogliamo  calcolare.</li>
<li><em>n</em> è il numero di pagine che contengono almeno un link verso  A. <em>P<sub>k</sub></em> rappresenta ognuna di tali pagine.</li>
<li><em>PR[P<sub>k</sub>]</em> sono i valori di PageRank di ogni pagina P<sub>k</sub>.</li>
<li><em>C[P<sub>k</sub>]</em> sono il numero complessivo di link contenuti  nella pagina che offre il link.</li>
<li><em>d (damping factor)</em> è un fattore deciso da Google e che nella  documentazione originale assume valore 0,85. Può essere aggiustato da  Google per decidere la percentuale di PageRank che deve transitare da  una pagina all&#8217;altra e il valore di PageRank minimo attribuito ad ogni  pagina in archivio.</li>
</ul>
<p>Dalla formula si nota quindi che all&#8217;aumentare del numero di link  complessivi dei siti che puntano ad A il PageRank aumenta. (Fonte Wikipedia)</p>
<p>Ovviamente, la trattazione di oggi non esaurisce tutti gli argomenti teorici riguardanti il SEO, ma è la base per poter comprendere meglio la parte pratica che verrà sviluppata nel prossimo articolo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.informaticaetlc.it/blog/seo-introduzione-ai-motori-di-ricerca.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Principali funzioni php per lavorare sulle stringhe</title>
		<link>http://www.informaticaetlc.it/blog/principali-funzioni-php-per-lavorare-sulle-stringhe.html</link>
		<comments>http://www.informaticaetlc.it/blog/principali-funzioni-php-per-lavorare-sulle-stringhe.html#comments</comments>
		<pubDate>Tue, 05 Jan 2010 14:44:13 +0000</pubDate>
		<dc:creator>ilos37</dc:creator>
				<category><![CDATA[Programmazione]]></category>

		<guid isPermaLink="false">http://www.informaticaetlc.it/blog/?p=54</guid>
		<description><![CDATA[PHP mette a disposizione molte funzionalità utili per lavorare sulle stringhe e facilitando il lavoro del programmatore. In questo articolo vedremo come utilizzare alcune funzioni che sono di uso ricorrente nel trattamento delle stringhe.
Le prime funzioni che andremo a vedere riguardano la forma del testo. PHP permette di modificare una stringa (intesa come singola parola [...]]]></description>
			<content:encoded><![CDATA[<p>PHP mette a disposizione molte funzionalità utili per lavorare sulle stringhe e facilitando il lavoro del programmatore. In questo articolo vedremo come utilizzare alcune funzioni che sono di uso ricorrente nel trattamento delle stringhe.</p>
<p>Le prime funzioni che andremo a vedere riguardano la forma del testo. PHP permette di modificare una stringa (intesa come singola parola o come intera frase) in modo da trasformarla in tutto o in parte in maiuscolo o minuscolo. Le funzioni <strong>strtoupper() </strong>e <strong>strtolower()</strong> permettono di modificare la stringa trasformando ciascuna lettere rispettivamente in maiuscolo o in minuscolo. Si potrebbero usare ad esempio per modificare un indirizzo in email tutto in minuscolo oppure un codice fiscale tutto in maiuscolo come di solito vengono rappresentati. Possiamo modificare solo la prima solo la prima lettera di una stringa portandola maiuscola con <strong>ucfirst()</strong> oppure tutti i primi caratteri di ogni parola con <strong>ucwords()</strong>.</p>
<p>La funzione <strong>strlen()</strong> ci permette di conoscere il numero di caratteri all&#8217;interno di una stringa mentre se volessimo ottenere una sottostringa  potremmo utilizzare la funzione <strong>substr()</strong> che accetta 3 parametri: la stringa, il punto di partenza e la lunghezza della sottostringa partendo da quel punto.  Il punto di partenza può anche essere negativo, in questo caso si inizia a contare dalla fine della stringa da elaborare.  Un&#8217;altra funzione ricorrente è <strong>str_replace()</strong> che accetta in ingresso 3 parametri:  il primo è la frase (o parola) da sostituire, il secondo la frase in sostituzione e il terzo la stringa da elaborare.</p>
<p>Adesso passiamo a funzioni molto utili quando si lavora in con delle form html. La prima di esse è la funzione <strong>nl2br()</strong> che trasforma i caratteri di <em>new line</em> (ovvero gli <em>\n</em>, a capo) nei corrispondenti tag <em>&lt;br&gt;</em> di html, che si possono ritrovare dalla compilazione di una textarea. Per eliminare invece qualsiasi tag html e/o javascript  si può utilizzare <strong>strip_tags()</strong>. La funzione <strong>trim()</strong>, invece, permette di eliminare gli spazi bianchi all&#8217;esterno della stringa (all&#8217;inizio e alla fine) ma anche i caratteri di <em>\n</em> e <em>\r</em>. Le varianti di questa funzione sono <em>ltrim()</em> e <em>rtrim()</em> che ripuliscono la stringa allo stesso modo di <strong>trim()</strong> ma rispettivamente all&#8217;inizio e alla fine.</p>
<p>Se non si vuole far interpretare il codice html inserito si possono utilizzare le funzioni <strong>htmlspecialchars()</strong> e <strong>htmlhentities()</strong>. La prima trasforma in entità html i caratteri <em>&amp;, &#8220;, &lt; e &gt;</em>; la seconda, invece, codifica in entità html tutti i caratteri che hanno una corrispondenza con tale codifica. Vengono spesso usate per motivi di sicurezza quando non si vogliono far inserire all&#8217;utente tag html che posso pregiudicare la grafica del sito o per altri scopi di sicurezza. Legata alla sicurezza è anche la funzione <strong>addslashes()</strong> che immette i caratteri di escape davanti a quei caratteri che possono generare errore utilizzando un dbms. La funzione inversa a <strong>addslashes()</strong> è <strong>stripslashes()</strong> che rimuove invece tutti i caratteri di escape inseriti dalla prima funzione. Da tenere in considerazione è la configurazione del php.ini: infatti, se la direttiva <em><strong>magic_quotes_gpc</strong></em> è impostata su on non vi è il bisogno di utilizzare <strong>addslashes()</strong> in quanto tutti i dati provenienti da form o da cookie verranno automaticamente modificati.</p>
<p>Vediamo infine come trasformare una stringa in un array e viceversa. La funzione <strong>explode()</strong> accetta in ingresso 2 parametri: un carattere separatore e la stringa. Il risultato della funzione è un array che ha gli elementi della stringa, ogni volta che si incontra un carattere separatore viene impostato un nuovo elemento nell&#8217;array. La funzione inversa è la funzione<strong> implode() </strong>che trasforma un array in una stringa. Anch&#8217;essa ha 2 parametri, il carattere separatore e l&#8217;array da convertire; il risultato è una stringa composta dalla sequenza di stringhe contenute nell&#8217;array separate dal carattere separatore voluto.</p>
<p>Presto posterò gli esempi per ogni funzione illustrata. Naturalmente queste non sono le sole funzioni che PHP mette a disposizione per manipolare le stringhe, ma sono quelle che una volta imparate verranno utilizzate ogni volta ce ne sia il bisogno.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.informaticaetlc.it/blog/principali-funzioni-php-per-lavorare-sulle-stringhe.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Validare campi di input con php e le espressioni regolari</title>
		<link>http://www.informaticaetlc.it/blog/validare-campi-di-input-con-php.html</link>
		<comments>http://www.informaticaetlc.it/blog/validare-campi-di-input-con-php.html#comments</comments>
		<pubDate>Fri, 01 Jan 2010 20:19:56 +0000</pubDate>
		<dc:creator>ilos37</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.informaticaetlc.it/blog/?p=39</guid>
		<description><![CDATA[In questo breve articolo vedremo come validare alcune stringhe attraverso le espressioni regolari di php. In particolare vedremo come controllare l'esattezza (semantica) del codice fiscale, dell'email e della partita IVA.]]></description>
			<content:encoded><![CDATA[<p>Molto spesso ci si trova a dover lavorare su campi di input e controllarne l&#8217;esattezza. In questo articolo vedremo come validare, tramite le espressioni regolari, tre tipi di dato che spesso si trovano nei form delle pagine html, ovvero l&#8217;email, il codice fiscale e la partita IVA. Il controllo che viene effettuato non controlla che essi siano corrispondenti a verità, ad esempio, non verifica che l&#8217;email esista, ma solo che è scritta nel formato corretto.</p>
<p>Per prima cosa impostiamo l&#8217;espressione per il controllo sotto forma di funzione:</p>
<pre><code ="php"> function controlla($stringa)  {
  $pattern="...."; //vedremo tra poco cosa inserire
  if(preg_match($pattern, trim($stringa)))
    return true;
  else
    return false;
}</code></pre>
<p>Come si può notare la funzione è di tipo booleano, restituisce <code>true</code> se la stringa è conforme a un modello predefinito (pattern) altrimenti restituisce <code>false</code>. Quello che inseriremo nella variabile <code>$pattern</code> dipenderà dal tipo di controllo che vogliamo effettuare. Per effettuare il controllo sull&#8217;indirizzo email la variabile dovrà essere del tipo:</p>
<p><code>$pattern="^([a-z0-9_\.-])+@(([a-z0-9_-])+\\.)+[a-z]{2,6}$";</code></p>
<p>per il codice fiscale il pattern sarà:</p>
<p><code>$pattern="^[a-zA-Z]{6}[0-9]{2}[a-zA-Z][0-9]{2}[a-zA-Z][0-9]{3}[a-zA-Z]$";</code></p>
<p>mentre, infine, per validare una partita IVA il pattern sarà:</p>
<p><code>$pattern="^[0-9]{11}$";</code></p>
<p>Per effettuare il controllo basterà una semplice condizione:</p>
<p><code>if(controlla($dato)){<br />
echo "email/cf/piva corretti";<br />
else<br />
echo "Ricontrolla i dati";</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.informaticaetlc.it/blog/validare-campi-di-input-con-php.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Visualizzare località in Google Maps da coordinate inserite in un database</title>
		<link>http://www.informaticaetlc.it/blog/visualizzare-localita-in-google-maps-da-coordinate-inserite-in-un-database.html</link>
		<comments>http://www.informaticaetlc.it/blog/visualizzare-localita-in-google-maps-da-coordinate-inserite-in-un-database.html#comments</comments>
		<pubDate>Mon, 28 Dec 2009 21:18:26 +0000</pubDate>
		<dc:creator>ilos37</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.informaticaetlc.it/blog/?p=29</guid>
		<description><![CDATA[Questo articolo cerca di fornire una soluzione semplice all'utilizzo delle Google Maps prendendo dati dal database. La soluzione utilizza sia javascript che php.]]></description>
			<content:encoded><![CDATA[<p>Posto questo articolo per un problema che mi ha fatto dannare per qualche sera. Avevo degli indirizzi in un database da convertire tramite <strong><em>geocoding</em></strong> in coordinate e quindi visualizzarli in google maps. Problema: non riuscivo ad avere un comportamento coerente delle visualizzazioni a ogni caricamento della pagina&#8230; Perciò ho cambiato il codice inserendo nel DB non solo l&#8217;indirizzo ma direttamente le coordinate. Lo script proposto avrà una parte php per l&#8217;inserimento delle coordinate nel DB e una parte javascript per la visualizzazione della mappa.</p>
<p>Per prima cosa vediamo come fare l&#8217;inserimento di un indirizzo nel DB utilizzando la <strong>classe geocoder5</strong> che ho trovato al <a title="geocoding in php" rel="nofollow" href="http://www.mariospada.net/2008/04/php-una-classe-per-trovare-le.html" target="_blank">questo</a> indirizzo.  Supponiamo di aver inserito i valori che ci interessano (via, cap, città, proviancia ed, eventualmente, nazione) in un form e di riprenderli in un file che li elabora.</p>
<pre class="chili"><code class="html""">require(&quot;geocoder5.class.php&quot;);</code></pre>
<pre class="chili"><code class="html""">
//inseriamo la nostra apiKey
$gmpKey = &quot;tua apiKey&quot;;
$data = array();

//la variabile sede contiene tutti i campi sopra citati
array_push($data, addslashes($sede));
$test = &amp; new geocodeaddr($data,$gmpKey); //istanzio il nuovo oggetto
$geocodeResults = $test-&gt;getAddress(); //richiamo la funzione
$a=0;

//controllo che l&#039;indirizzo sia stato trovato altrimenti visualizzo l&#039;errore
$controlla=$test-&gt;errorMsg1;
if ($controlla==&#039;&#039;)
foreach ($geocodeResults as $rowResult){

//prendo i valori solo alla prima iterazione
if($a==0){
$query=&quot;INSERT INTO mappa (sede, latitudine, longitudine) VALUES( &#039;$sede&#039;, &#039;&quot;.$rowResult[&#039;lat&#039;].&quot;&#039;, &#039;&quot;.$rowResult[&#039;lng&#039;].&quot;&#039;);&quot;;
mysql_query($query) or die(mysql_error());
}

$a++;
}
else
echo $test-&gt;errorMsg1;
} ?&gt;
</code></pre>
<p>Il codice fin qua è molto semplice, stiamo solamente utilizzando la classe per tradurre l&#8217;indirizzo (che ricordo deve essere possibilmente nella forma via, cap, città, proviancia ed, eventualmente, nazione) in coordinate geografiche e inseriamo tali dati in una tabella del DB. Inoltre vi è la possibilità di gestire l&#8217;eventuale errore (indirizzo non trovato) personalizzandolo a vostro piacimento .</p>
<p>Passiamo adesso alla visualizzazione della mappa. Per prima cosa bisogna recuperare i dati dal database e inserirli in un vettore; avremo tre vettori: uno per l&#8217;indirizzo (lo useremo come descrizione nella nuvoletta che compare cliccando sopra un punto ben preciso), uno per la latitudine e uno per la longitudine. Salto questa parte che è abbastanza semplice e passiamo al resto del codice.</p>
<pre class="chili"><code class="html""""""""">
&lt;script src=&quot;http://maps.google.com/maps?file=api&amp;amp;dev=2&amp;amp;hl=it&amp;amp;key=&quot;&lt;span style=&quot;color: #888888;&quot;&gt;tuaKey&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
//&lt; ![CDATA[&lt;/code&gt;

var map = null;

&lt;span style=&quot;color: #ccffcc;&quot;&gt;&lt;span style=&quot;color: #333399;&quot;&gt;function load()&lt;/span&gt; &lt;/span&gt;{
if (GBrowserIsCompatible()) {

map = new GMap2(document.getElementById(&quot;map&quot;));
map.addControl(new GSmallMapControl());   /* pannellino in alto a sx x ingrandire o diminuire lo zoom */
map.addControl(new GMapTypeControl());
map.setCenter(new GLatLng(41.90, 12.49), 5);  /* centro la mappa sull&#039;italia */
geocoder = new GClientGeocoder();    /* oggetto che mi consente di comunicare col server gg x ottenere lat e log degli indirizzi*/

}
}//load

&lt;span style=&quot;color: #333399;&quot;&gt;function createMaker&lt;/span&gt;(infos, lat, lon){

var point;
point = new GLatLng(lat,lon); //creo il punto
map.addOverlay(createMarker(point, infos)); //aggiunge il punto alla mappa

}

&lt;span style=&quot;color: #333399;&quot;&gt;function createMarker&lt;/span&gt;(point, infos)
{
var icona = new GIcon();
icona.image = &quot;img/marker.png&quot;; //scelgo il puntatore
icona.iconSize = new GSize(12, 20);
icona.iconAnchor = new GPoint(6, 20);
icona.infoWindowAnchor = new GPoint(6, 20);
icona.shadowSize = new GSize(24, 20);

// Variabile marker
var marker = new GMarker(point, icona);

// Crea listener per il click sull&#039;oggetto
GEvent.addListener(marker, &quot;click&quot;, function()
{
marker.openInfoWindowHtml(infos);
});

return marker;
}

&lt;span style=&quot;color: #333399;&quot;&gt;function showAll()&lt;/span&gt;{

var infos=Array(
&lt; ?php
$b=0;
while($b&lt;(count($x)-1)){
echo &quot;$indirizzi[$b]&quot;;
if($b!=(count($indirizzi)-2)) echo &quot;,&quot;;
$b++;
}//while1
?&gt;
);

var latitudine=Array(
&lt; ?php
$c=0;
while($c&lt;(count($latitudine)-1)){
echo &quot;$latitudine[$c]&quot;;
if($c!=(count($latitudine)-2)) echo &quot;,&quot;;
$c++;
}//while2
?&gt;
);

var longitudine=Array(
&lt; ?php
$d=0;
while($d&lt;(count($longitudine)-1)){
echo &quot;$longitudine[$d]&quot;;
if($d!=(count($longitudine)-2)) echo &quot;,&quot;;
$d++;
}//while3
?&gt;
);

for(var i=0; i&lt;indirizzi .length; i++) createMaker(infos[i], latitudine[i], longitudine[i]);

}//showAll
//]]&gt;
&lt;/indirizzi&gt;&lt;/script&gt;
</code></pre>
<p>La funzione <span style="color: #333399;">load()</span> ha il compito di istanziare un oggetto del tipo <span style="color: #333399;">GMap2</span> che è quello che ci permette di comunicare con il server di google per ottenere i servizi necessari al nostro scopo. Successivamente verrà richiamata la funzione <span style="color: #333399;">showAll()</span> che ha il compito di trasformare gli array php in array javascript per passarli alla funzione <span style="color: #333399;">createMaker<span style="color: #000000;">. Quest&#8217;ultima funzione verrà richiamata più volte per quante sono le località da visualizzare nella mappa.</span></span></p>
<p><span style="color: #333399;"><span style="color: #000000;">La funzione </span></span><span style="color: #333399;">createMaker <span style="color: #000000;">deve creare, per ogni coppia di coordinate geografiche, un punto per la mappa che verrà aggiunto dalla funzione </span></span><span style="color: #333399;">addOverlay </span>della classe GMap2<span style="color: #333399;"><span style="color: #000000;"> </span>. <span style="color: #000000;">Tale funzione accetta in ingresso, però, un oggetto di tipo GMarker e, per ottenere tale oggetto, richiamiamo la funzione </span></span><span style="color: #333399;">createMarker. <span style="color: #000000;">All&#8217;interno di tale funzione </span></span><span style="color: #333399;"><span style="color: #000000;">possiamo definire l&#8217;icona (un&#8217;immagine a nostra scelta) da utilizzare e le sue proprietà, ma lo scopo principale è quello di creare il <span style="color: #333399;">marker </span>passandogli il punto e le informazioni da visualizzare nella relativa nuvoletta. Nell&#8217;esempio riportato la nuvoletta delle informazioni viene visualizzata al click del mouse sull&#8217;icona ed è gestita da </span></span><span style="color: #333399;">GEvent.addListener</span><span style="color: #333399;"><span style="color: #000000;">.</span></span></p>
<p><span style="color: #333399;"><span style="color: #000000;">Supponiamo di inserire il codice appena visto in un file chiamato mappa.php, per terminare il nostro script non ci resta che richiamare le funzioni al caricamento della pagina:</span></span></p>
<pre class="chili"><code class="html""">&lt;body onLoad=&quot;load(); showAll();&quot; onUnload=&quot;GUnload()&quot;&gt;</code></pre>
<p><span style="color: #333399;"><span style="color: #000000;"> Se volessimo integrare la mappa in una nostra pagina web a parte basta inserire il codice:</span></span></p>
<pre class="chili"><code class="html""">&lt;iframe align=&quot;middle&quot; width=&quot;430&quot; height=&quot;450&quot; frameborder=&quot;0&quot; src=&quot;mappa.php&quot;&gt;</code></pre>
<p>nel punto della pagina in cui vogliamo visualizzare la mappa e il gioco è fatto.</iframe></body></p>
]]></content:encoded>
			<wfw:commentRss>http://www.informaticaetlc.it/blog/visualizzare-localita-in-google-maps-da-coordinate-inserite-in-un-database.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SHORT &#8211; Effettuare un redirect 301 tramite .htaccess (mod_rewrite) o PHP</title>
		<link>http://www.informaticaetlc.it/blog/short-effettuare-un-redirect-301-tramite-htaccess-mod_rewrite.html</link>
		<comments>http://www.informaticaetlc.it/blog/short-effettuare-un-redirect-301-tramite-htaccess-mod_rewrite.html#comments</comments>
		<pubDate>Mon, 28 Dec 2009 18:37:31 +0000</pubDate>
		<dc:creator>ilos37</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.informaticaetlc.it/blog/?p=23</guid>
		<description><![CDATA[Gli articoli "short" sono articoli brevi che cercano di dare una soluzione veloce a un problema spesso senza dilungarsi troppo nelle spiegazioni dei singoli passi. Questo è un semplice codice per effettuare un mod_rewrite, l'esempio effettua un reindirizzamento permanente da un indirizzo a un altro.]]></description>
			<content:encoded><![CDATA[<p>Capita spesso di dover modificare l&#8217;indirizzo di una pagina web, ad esempio, nei cambi di dominio per reindirizzare al nuovo dominio; proprio in questi casi abbiamo bisogno di indicare che lo spostamento di indirizzo è permanente, così che anche i motori di ricerca modifichino il loro database. Il metodo migliore per effettuare tale operazione è il cosiddetto <strong><em>redirect 301</em></strong>. Il redirect 301 può essere implementato in diverse maniere in base al linguaggio, noi ne vedremo solo 2.</p>
<p>Una prima soluzione è quella di utilizzare la funzione <span style="color: #333399;">header()</span> di php nel seguente modo:</p>
<p><span style="color: #333399;">&lt;?<br />
header( &#8220;HTTP/1.1 301 Moved Permanently&#8221; );<br />
header( &#8220;Location: http://www.nuovo-indirizzo.com&#8221;                       );<br />
?&gt;</span></p>
<p><span style="color: #333399;"><span style="color: #000000;">Se però il web server utilizzato è Apache con il </span></span>modulo mod_rewrite attivo allora la soluzione ottimale è senza dubbio utilizzare un file <span style="color: #333399;"><span style="color: #333399;">.htaccess <span style="color: #000000;">configurato nel seguente modo:</span></span></span></p>
<p><span style="color: #333399;">&lt;IfModule mod_rewrite.c&gt;<br />
RewriteEngine On<br />
RewriteBase /<br />
RewriteCond %{HTTP_HOST} ^tuodominio.it [NC]<br />
RewriteRule ^(.*)$ http://www.tuodominio.it/$1 [L,R=301]<br />
Redirect permanent /vecchia-pagina.php http://www.nuovo-link.it<br />
&lt;/IfModule&gt;</span></p>
<p>Questo codice non fa altro che impostare su <em>tuodominio.it</em> un rewrite 301 dalla pagina <em>/<span style="color: #000000;">vecchia-pagina.php </span></em><span style="color: #000000;">(che può essere l&#8217;index se si vuole reindirizzare l&#8217;url principale)</span><em><span style="color: #000000;"> </span></em><span style="color: #000000;">alla pagina </span><span style="color: #000000;"><em>http://www.nuovo-link.it </em>(in questo caso ci va tutto l&#8217;url).</span></p>
<p><span style="color: #000000;"><br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.informaticaetlc.it/blog/short-effettuare-un-redirect-301-tramite-htaccess-mod_rewrite.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Controllo di dati inseriti da form html</title>
		<link>http://www.informaticaetlc.it/blog/controllo-di-dati-inseriti-da-form-html.html</link>
		<comments>http://www.informaticaetlc.it/blog/controllo-di-dati-inseriti-da-form-html.html#comments</comments>
		<pubDate>Thu, 24 Dec 2009 20:21:10 +0000</pubDate>
		<dc:creator>ilos37</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.informaticaetlc.it/blog/?p=5</guid>
		<description><![CDATA[Il controllo dei dati inseriti dall'utente può essere effettuato sia lato client attraverso javascript (al submit dell'utente) o lato server.  In questo articolo vedremo come effettuare un controllo molto semplice sui dati attraverso PHP.]]></description>
			<content:encoded><![CDATA[<p>Il controllo dei dati inseriti dall&#8217;utente può essere effettuato sia lato client attraverso javascript (al submit dell&#8217;utente) o lato server.  In questo articolo vedremo come effettuare un controllo molto semplice sui dati attraverso PHP.</p>
<p>Supponiamo di avere un form di questo tipo:</p>
<p><span style="background-color: #ffffff;"><span style="color: #333399;">&lt;?php<br />
if(isset($_SESSION['errore'])){<br />
echo $_SESSION['errore'];<br />
unset($_SESSION['errore']);<br />
}<br />
?&gt;</span></span></p>
<p><span style="background-color: #ffffff;"><span style="color: #333399;">&lt;form name=&#8221;mioForm&#8221; action=&#8221;inoltra.php&#8221; method=&#8221;post&#8221; &gt;<br />
&lt;table width=&#8221;420&#8243; border=&#8221;0&#8243; cellspacing=&#8221;2&#8243; cellpadding=&#8221;2&#8243; &gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;&lt;label for=&#8221;nome&#8221;&gt;Nome*&lt;/label&gt;&lt;/td&gt;<br />
&lt;td&gt;&lt;input type=&#8221;text&#8221; name=&#8221;nome&#8221; id=&#8221;nome&#8221; size=&#8221;20&#8243; maxlength=&#8221;40&#8243; value=&#8221;&lt;?php<br />
if(isset($_SESSION['nome'])){<br />
echo $_SESSION['nome'];<br />
unset($_SESSION['nome']);<br />
}<br />
?&gt;&#8221;/&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;&lt;label for=&#8221;password&#8221;&gt;</span><span style="color: #333399;">Password</span><span style="color: #333399;">*&lt;/label&gt;&lt;/td&gt;<br />
&lt;td&gt;&lt;input type=&#8221;</span><span style="color: #333399;">password</span><span style="color: #333399;">&#8221; name=&#8221;</span><span style="color: #333399;">password</span><span style="color: #333399;">&#8221; id=&#8221;</span><span style="color: #333399;">password</span><span style="color: #333399;">&#8221; size=&#8221;20&#8243; maxlength=&#8221;40&#8243; value=&#8221;&lt;?php<br />
if(isset($_SESSION['</span><span style="color: #333399;">password</span><span style="color: #333399;">'])){<br />
echo $_SESSION['</span><span style="color: #333399;">password</span><span style="color: #333399;">'];<br />
unset($_SESSION['</span><span style="color: #333399;">password</span><span style="color: #333399;">']);<br />
}<br />
?&gt;&#8221;/&gt;&lt;/td&gt;<br />
&lt;/tr&gt;&lt;input type=&#8221;submit&#8221; value=&#8221;Invia&#8221; /&gt;</span></span></p>
<p><span style="background-color: #ffffff;"><span style="color: #333399;">&lt;/form&gt;</span></span><br />
Per adesso commentiamo solo il fatto che il form è composto da 2 campi: nome e password. I dati verranno passati alla pagina inoltra.php tramite il metodo POST;  tale pagina effettueremo il controllo, vediamo una parte di codice:</p>
<p><span style="color: #333399;">&lt;?php session_start();</span></p>
<p><span style="color: #333399;">if (isset($_POST['nome']) &amp;&amp; $_POST['nome']!=&#8221;"){<br />
$_SESSION['nome']=(string)$_POST['nome'];<br />
$nome=$_SESSION['nome'];<br />
}else{<br />
$_SESSION['errore']=&#8217;&lt;p&gt;&lt;strong&gt;ERRORE: completare il campo &#8220;Nome&#8221;&lt;/strong&gt;&lt;/p&gt;&#8217;;<br />
//ricavo l&#8217;URL della pagina di provenienza<br />
$url = $_SERVER['HTTP_REFERER'];<br />
//effettuo il reindirizzamento<br />
header(&#8221;Location: $url&#8221;);<br />
break;<br />
}</span></p>
<p><span style="color: #333399;">if (isset($_POST['password']) &amp;&amp; </span><span style="color: #333399;">strlen(</span><span style="color: #333399;"><span style="color: #333399;">$_POST['passw</span>ord'])&lt;4){<br />
$_SESSION['password']=(string)$_POST['password'];<br />
$password=$_SESSION['password'];<br />
}else{<br />
$_SESSION['errore']=&#8217;&lt;p&gt;&lt;strong&gt;ERRORE:  il campo &#8220;Password&#8221; deve essere di almeno 4 caratteri&lt;/strong&gt;&lt;/p&gt;&#8217;;<br />
$url = $_SERVER['HTTP_REFERER'];<br />
header(&#8221;Location: $url&#8221;);<br />
break;<br />
} ?&gt;<br />
</span></p>
<p><span style="color: #333399;"><span style="color: #000000;">Il codice è molto semplice. Con un<span style="color: #333399;"> if</span> controlliamo che il dato passato sia settato e non sia un campo vuoto, se la condizione è verificata allora inserisco il valore del dato passato sia in una variabile si sessione che in una variabile locale (è una scelta soggettiva, io preferisco usare le variabili di sessione solo tra pagine e poi utilizzare variabili locali per tutti gli altri scopi); il controllo su una variabile vuota si può anche fare tramite la funzione <span style="color: #333399;">empty()</span>. Per quanto riguarda il campo password ho effettuato il controllo sulla lunghezza della stessa che deve, in questo caso, essere formata da almeno 4 caratteri.</span></span></p>
<p><span style="color: #333399;"><span style="color: #000000;">Se almeno un controllo non va a buon fine si inizializza un&#8217;altra variabile di sessione riportante l&#8217;errore riscontrato, si richiama l&#8217;indirizzo della pagina di provenienza (molto utile se il form è inserito in più di una url), si fa il redirect alla pagina suddetta e infine si blocca l&#8217;esecuzione dello script. Senza l&#8217;istruzione <span style="color: #333399;">break </span>verrà fatto il reindirizzamento dopo che lo script sarà eseguito completamente, quindi verranno eseguite eventuali query o altre operazioni su dati incompleti o mancanti.<br />
</span></span></p>
<p><span style="color: #333399;"><span style="color: #000000;"><span style="color: #000000;">Ritorniamo alla pagina contenente il form. Se è la prima volta che si arriva al form il codice php non contribuirà a dare nessun risultato perché le variabili di sessione non sono ancora state inizializzate. Nel caso in cui il form sia già stato compilato ma in maniera incompleta, l</span></span></span><span style="color: #333399;"><span style="color: #000000;"><span style="color: #000000;">a prima operazione php è la visualizzazione dell&#8217;errore riscontrato prima del form così da avvisare l&#8217;utente dell&#8217;errore. Successivamente le sessioni vengono utilizzate per immettere nei campi i valori precedentemente immessi, velocizzando quindi, in caso di errore, la compilazione dei campi </span></span></span><span style="color: #333399;"><span style="color: #000000;">da parte dell&#8217;utente. Alla fine di ogni operazione viene de-allocata la variabile di sessione per evitare che essa sia visualizzabile ogni volta all&#8217;arrivo del form dello stesso utente.</span></span><br />
Naturalmente il controllo visto ora è un controllo minimale che tende solo a verificare che l&#8217;utente abbia inserito dei dati e che essi rispettino una certa lunghezza; controlli più estesi si potrebbero fare sul contenuto del campo attraverso le espressioni regolari. In un altro articolo vedremo come usare le espressioni regolari e come modificare il contenuto dei dati sia per motivi di sicurezza che per evitare errori nell&#8217;utilizzo del database.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.informaticaetlc.it/blog/controllo-di-dati-inseriti-da-form-html.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
