  <?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>sviluppo web &#8211; paologironi blog</title>
	<atom:link href="https://www.gironi.it/blog/category/sviluppo-web-it/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.gironi.it/blog</link>
	<description>Appunti sparsi di (retro) informatica, analisi dei dati, statistica, seo, e cose che cambiano</description>
	<lastBuildDate>Fri, 20 Sep 2024 13:14:08 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>Html5 e Blueprintcss</title>
		<link>https://www.gironi.it/blog/html5-e-blueprintcss/</link>
					<comments>https://www.gironi.it/blog/html5-e-blueprintcss/#respond</comments>
		
		<dc:creator><![CDATA[paolo]]></dc:creator>
		<pubDate>Mon, 20 Feb 2012 15:15:03 +0000</pubDate>
				<category><![CDATA[sviluppo web]]></category>
		<guid isPermaLink="false">http://gironi.it/blog/?p=212</guid>

					<description><![CDATA[Il desiderio di iniziare a marcare i propri siti in html5 è sempre più urgente per tanti di noi, anche se la &#8220;vecchia&#8221; marcatura sarà tra noi ancora per molti anni. Gli innumerevoli problemi di (retro)compatibilità &#8211; specialmente per quanto riguarda il browser dalla e azzurra &#8211; possono essere in parte tamponati adottando le numerose &#8230; <a href="https://www.gironi.it/blog/html5-e-blueprintcss/" class="more-link">Leggi tutto<span class="screen-reader-text"> "Html5 e Blueprintcss"</span></a>]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" class="alignleft size-full wp-image-434" src="http://www.gironi.it/blog/wp-content/uploads/2012/02/logo-html.png" alt="logo-html" width="128" height="128" />Il desiderio di iniziare a marcare i propri siti in html5 è sempre più urgente per tanti di noi, anche se la &#8220;vecchia&#8221; marcatura sarà tra noi ancora per molti anni.<br />
Gli innumerevoli problemi di (retro)compatibilità &#8211; specialmente per quanto riguarda il browser dalla e azzurra &#8211; possono essere in parte tamponati adottando le numerose soluzioni note a tutti gli sviluppatori.<br />
La mia esigenza è quella di sfruttare la completezza semantica dell&#8217;html5, ma senza rinunciare alle mie amate griglie.<span id="more-212"></span></p>
<p>Ho usato e uso molti framework differenti: <a title="960 Framework" href="http://960.gs/" target="_blank" rel="noopener">960</a>, <a title="BluePrintCss" href="http://blueprintcss.org/" target="_blank" rel="noopener">BlueprintCss</a>, <a title="Less" href="http://lessframework.com/" target="_blank" rel="noopener">Less</a>. Sono conscio del fatto che classi con nome quali <em>span</em> oppure <em>column</em> non siano il massimo sotto il profilo della semantica, tuttavia il rigore delle griglie e la conseguente pulizia dei layout (oltre alla velocità di sviluppo che consentono) le rende una scelta per me quasi obbligata.<br />
Per unire le due cose (marcatura html5 e grglia) ho deciso di utilizzare, in prima battuta, <a title="HTML5 Boilerplate" href="http://html5boilerplate.com/" target="_blank" rel="noopener">HTML5Boilerplate</a> e BluePrintCss. Il risultato? Funziona, e in pochi passi molto semplici.<br />
Scarico la versione &#8220;minima&#8221; (stripped) di HTML5Boilerplate e l&#8217;ultima versione di BluePrintCss.<br />
Posso tranquillamente usare la pagina demo di html5boilerplate come modello di pagina di base.<br />
Unica accortezza, il collegamento al foglio di stile style.css di HTML5Boilerplate deve venire <strong>dopo quelli di BluePrintCss</strong>.<br />
Per il resto, marco tutto in HTML5 e per le griglie come al solito, usando i consueti div.<br />
Funziona tutto senza problemi, anche con Internet Explorer.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.gironi.it/blog/html5-e-blueprintcss/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Modelli di interfaccia utente: Mark Boulton</title>
		<link>https://www.gironi.it/blog/modelli-di-interfaccia-utente-mark-boulton/</link>
					<comments>https://www.gironi.it/blog/modelli-di-interfaccia-utente-mark-boulton/#respond</comments>
		
		<dc:creator><![CDATA[paolo]]></dc:creator>
		<pubDate>Wed, 18 Jan 2012 14:47:39 +0000</pubDate>
				<category><![CDATA[sviluppo web]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[usability]]></category>
		<guid isPermaLink="false">http://gironi.it/blog/?p=185</guid>

					<description><![CDATA[Un amico e cliente, qualche giorno fa, mi ha chiesto di valutare la curiosa implementazione dell&#8217;hover sui link in sidebar del sito di Mark Boulton. Questo, al fine di considerarne la possibile implementazione sul suo nuovo sito. In pratica, l&#8217;effetto consiste in questo: quando l&#8217;utente sposta il puntatore nella sidebar di destra del sito, tutti &#8230; <a href="https://www.gironi.it/blog/modelli-di-interfaccia-utente-mark-boulton/" class="more-link">Leggi tutto<span class="screen-reader-text"> "Modelli di interfaccia utente: Mark Boulton"</span></a>]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" class="alignleft size-full wp-image-313" alt="handy-icon_06" src="http://gironi.it/blog/wp-content/uploads/2012/01/handy-icon_06.png" width="129" height="127">Un amico e cliente, qualche giorno fa, mi ha chiesto di valutare la curiosa implementazione dell&#8217;hover sui link in sidebar del <a href="http://www.markboulton.co.uk/" target="_blank" rel="noopener">sito di Mark Boulton</a>. Questo, al fine di considerarne la possibile implementazione sul <a href="http://www.davidnicholson.it/" target="_blank" rel="noopener">suo nuovo sito</a>.<br />
In pratica, l&#8217;effetto consiste in questo: quando l&#8217;utente sposta il puntatore nella sidebar di destra del sito, tutti i link presenti nell&#8217;area in questione, fino a quel momento indistinguibili dal normale testo, &#8220;acquistano&#8221; il colore verde. Se passo sopra ogni singolo link, il mouseover è evidenziato dalla sottolineatura.<br />
Personalmente, non ricordo di aver visto in altri siti una soluzione di questo tipo. Per riprodurla al volo ho usato jquery, controllando l&#8217;evento hover dell&#8217;area compresa in un dato div e cambiando il colore del link di conseguenza. (4 righe di css e 6 righe di jquery in tutto, almeno nella mia versione di test). Problemi con i dispositivi mobili, aggravio di peso: ne vale la pena? L&#8217;impatto sulla chiarezza della fruizione è realmente positivo? Ci penso su.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.gironi.it/blog/modelli-di-interfaccia-utente-mark-boulton/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Spedire email da Xampp</title>
		<link>https://www.gironi.it/blog/spedire-email-da-xampp/</link>
					<comments>https://www.gironi.it/blog/spedire-email-da-xampp/#comments</comments>
		
		<dc:creator><![CDATA[paolo]]></dc:creator>
		<pubDate>Thu, 05 Jan 2012 22:21:53 +0000</pubDate>
				<category><![CDATA[sviluppo web]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[localhost]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[smtp]]></category>
		<category><![CDATA[Xampp]]></category>
		<guid isPermaLink="false">http://gironi.it/blog/sviluppo-web/spedire-email-da-xampp/</guid>

					<description><![CDATA[Quante volte ci è capitato di sviluppare in locale, usando Xampp e di non riuscire a testare i vari contact form? La soluzione è molto semplice. Si edita il file php.ini (nella mia installazione di Xampp è in xampp/php, ma in altre installazioni potrebbe essere in un&#8217;altra directory) e si cerca la riga contenente &#8220;SMTP&#8221;. &#8230; <a href="https://www.gironi.it/blog/spedire-email-da-xampp/" class="more-link">Leggi tutto<span class="screen-reader-text"> "Spedire email da Xampp"</span></a>]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" class="alignleft size-full wp-image-311" alt="handy-icon_11" src="http://gironi.it/blog/wp-content/uploads/2012/01/handy-icon_11.png" width="127" height="129" />Quante volte ci è capitato di sviluppare in locale, usando Xampp e di non riuscire a testare i vari contact form?</p>
<p>La soluzione è molto semplice. Si edita il file php.ini (nella mia installazione di Xampp è in xampp/php, ma in altre installazioni potrebbe essere in un&#8217;altra directory) e si cerca la riga contenente &#8220;SMTP&#8221;. Dovreste trovare qualcosa tipo:</p>
<p><code>SMTP = localhost<br />
smtp_port = 25</code></p>
<p><span id="more-177"></span></p>
<p>cambiate localhost con il server SMTP del vostro provider e riavviate Xampp</p>
<p>Ora fate una prova semplicissima. Preparate un file che potreste chiamare mailer.php:</p>
<pre>$headers = 'MIME-Version: 1.0′ . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1′ . "\r\n";
$headers .= 'From: vostronome@vostrodominio.com' . "\r\n";
mail("tu@tuodominio.com","test soggetto","test body",$headers);</pre>
<p>ovviamente sostituite gli indirizzi email con quelli reali e caricate la pagina. La mail dovrebbe essere stata spedita!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.gironi.it/blog/spedire-email-da-xampp/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>virtual host con xampp e windows in 5 minuti</title>
		<link>https://www.gironi.it/blog/virtual-host-con-xampp-e-windows-in-5-minuti/</link>
					<comments>https://www.gironi.it/blog/virtual-host-con-xampp-e-windows-in-5-minuti/#comments</comments>
		
		<dc:creator><![CDATA[paolo]]></dc:creator>
		<pubDate>Fri, 14 Oct 2011 07:54:54 +0000</pubDate>
				<category><![CDATA[server]]></category>
		<category><![CDATA[sviluppo web]]></category>
		<category><![CDATA[windows]]></category>
		<guid isPermaLink="false">http://gironi.it/blog/?p=158</guid>

					<description><![CDATA[La configurazione necessaria per settare virtual hosts con xampp sotto windows è veramente minima: basteranno 5 minuti perchè tutto &#8220;giri&#8221; alla perfezione. Non mi dilungo sugli aspetti generali e riporto solo i passi necessari per ottenere al volo il risultato. Ad esempio, voglio configurare il virtual host pippo.com, che deve puntare alla cartella c:\xampp\htdocs\pippo.com. Presumo &#8230; <a href="https://www.gironi.it/blog/virtual-host-con-xampp-e-windows-in-5-minuti/" class="more-link">Leggi tutto<span class="screen-reader-text"> "virtual host con xampp e windows in 5 minuti"</span></a>]]></description>
										<content:encoded><![CDATA[<p>La configurazione necessaria per settare virtual hosts con xampp sotto windows è veramente minima: basteranno 5 minuti perchè tutto &#8220;giri&#8221; alla perfezione. Non mi dilungo sugli aspetti generali e riporto solo i passi necessari per ottenere al volo il risultato. Ad esempio, voglio configurare il virtual host pippo.com, che deve puntare alla cartella c:\xampp\htdocs\pippo.com. Presumo che xampp sia installato nella directory c:\xampp :</p>
<p>1) Devo configurare Windows perchè riconosca l&#8217;host. Edito, come amministratore (ad es. in Vista) il file c:\windows\system32\drivers\etc\hosts</p>
<p><span id="more-158"></span>e aggiungo la riga che mi serve. Il file, tolta la parte di commento, avrà un aspetto tipo questo:</p>
<pre>127.0.0.1       localhost
127.0.0.1       pippo.com
</pre>
<p>salvo ed esco</p>
<p>2) vado in c:\xampp\apache\conf\extra</p>
<p>trovo ed edito il file httpd-vhosts.conf, aggiungendo queste righe:</p>
<pre>NameVirtualHost *:80

&lt;VirtualHost *:80&gt;
ServerAdmin webmaster@localhost
DocumentRoot C:/xampp/htdocs/pippo.com/
ServerName pippo.com

&lt;Directory "C:/xampp/htdocs/pippo.com/"&gt;
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Order allow,deny
Allow from all
&lt;/Directory&gt;
&lt;/VirtualHost&gt;</pre>
<p>3) Ora posso avviare (oppure riavviare) Xampp (o il solo Apache)</p>
<p>Fatto!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.gironi.it/blog/virtual-host-con-xampp-e-windows-in-5-minuti/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>un po&#8217; di redirect 301</title>
		<link>https://www.gironi.it/blog/un-po-di-redirect-301/</link>
					<comments>https://www.gironi.it/blog/un-po-di-redirect-301/#respond</comments>
		
		<dc:creator><![CDATA[paolo]]></dc:creator>
		<pubDate>Mon, 05 Sep 2011 09:16:24 +0000</pubDate>
				<category><![CDATA[sviluppo web]]></category>
		<category><![CDATA[301]]></category>
		<category><![CDATA[asp]]></category>
		<category><![CDATA[cold fusion]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[redirect]]></category>
		<category><![CDATA[redirect 301]]></category>
		<guid isPermaLink="false">http://gironi.it/blog/2011/09/un-po-di-redirect-301/</guid>

					<description><![CDATA[questo più che un post è un memo. Invece di cercare tra i fogli il cheatsheet con i redirect 301 (e magari non trovarlo), oppure per risparmiarmi i 5 secondi della ricerca google, aggiungo questo post. Allora: con php &#60;? Header( "HTTP/1.1 301 Moved Permanently" ); Header( "Location: http://www.gironi.it/" ); ?&#62; con cold fusion &#60;cfheader &#8230; <a href="https://www.gironi.it/blog/un-po-di-redirect-301/" class="more-link">Leggi tutto<span class="screen-reader-text"> "un po&#8217; di redirect 301"</span></a>]]></description>
										<content:encoded><![CDATA[<p>questo più che un post è un memo. Invece di cercare tra i fogli il cheatsheet con i redirect 301 (e magari non trovarlo), oppure per risparmiarmi i 5 secondi della ricerca google, aggiungo questo post. Allora:</p>
<h2>con <strong>php</strong></h2>
<pre class="brush: xml; ruler: true;">&lt;?
Header( "HTTP/1.1 301 Moved Permanently" );
Header( "Location: http://www.gironi.it/" );
?&gt;</pre>
<p><span id="more-134"></span></p>
<h2>con <strong>cold fusion</strong></h2>
<p><span style="color: #222222; font-family: arial, sans-serif; font-size: 13px; line-height: 16px; background-color: #ffffff;"> </span></p>
<pre class="brush: xml; ruler: true;">&lt;cfheader statuscode="301" statustext="Moved Permanently"&gt;
&lt;cfheader name="Location" value="http://www.gironi.it"&gt;
&lt;cfabort&gt;</pre>
<h2>con <strong>asp</strong></h2>
<pre class="brush: xml; ruler: true;">&lt;%@ Language=VBScript %&gt;
&lt;%
response.status="301 moved permanently"
Response.AddHeader "Location", "http://www.gironi.it"
%&gt;</pre>
<h2><strong>Meta http-equiv</strong></h2>
<pre class="brush: xml; ruler: true;">&lt;meta http-equiv="refresh" content="0;url=http://www.gironi.it" /&gt;</pre>
<h2>In <strong>Perl</strong></h2>
<pre class="brush: xml; ruler: true;">#!/usr/bin/perl      -w
use strict;
print "Status: 301 Moved Permanently\n";
print "Location: http://mia/pagina.htm\n\n";
exit;</pre>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.gironi.it/blog/un-po-di-redirect-301/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>le thumbnails youtube</title>
		<link>https://www.gironi.it/blog/le-thumbnails-youtube/</link>
					<comments>https://www.gironi.it/blog/le-thumbnails-youtube/#respond</comments>
		
		<dc:creator><![CDATA[paolo]]></dc:creator>
		<pubDate>Thu, 01 Sep 2011 08:55:35 +0000</pubDate>
				<category><![CDATA[sviluppo web]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[youtube]]></category>
		<category><![CDATA[embed]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[thumbnails]]></category>
		<category><![CDATA[url]]></category>
		<guid isPermaLink="false">http://gironi.it/blog/?p=130</guid>

					<description><![CDATA[Esistono un&#8217;infinità di generatori di thumbnails per i video youtube. Moltissimi sono i plugins per wordpress, utili per generare le thumb da far comparire, ad esempio, al posto del video embedded in un lancio home di un post, oppure nella sidebar. Quello che forse non tutti sanno è che in effetti youtube genera automaticamente delle &#8230; <a href="https://www.gironi.it/blog/le-thumbnails-youtube/" class="more-link">Leggi tutto<span class="screen-reader-text"> "le thumbnails youtube"</span></a>]]></description>
										<content:encoded><![CDATA[<p>Esistono un&#8217;infinità di generatori di thumbnails per i video youtube. Moltissimi sono i plugins per wordpress, utili per generare le thumb da far comparire, ad esempio, al posto del video embedded in un lancio home di un post, oppure nella sidebar.</p>
<p>Quello che forse non tutti sanno è che in effetti youtube genera automaticamente delle thumbnails. Tutto quello che serve è il link del video! In pratica. Prendiamo ad esempio un video qualunque. La URL è tipo questa:</p>
<p><span id="more-130"></span>http://www.youtube.com/watch?v=5YXVMCHG-Nk</p>
<p>ok, la parte che ci interessa è quella dopo watch?v=</p>
<p>Basta quel codice per costruire le URL che puntano alle thumbnails. Nel nostro caso, eccole:</p>
<p>http://img.youtube.com/vi/5YXVMCHG-Nk/0.jpg<br />
http://img.youtube.com/vi/5YXVMCHG-Nk/1.jpg<br />
http://img.youtube.com/vi/5YXVMCHG-Nk/2.jpg<br />
http://img.youtube.com/vi/5YXVMCHG-Nk/3.jpg</p>
<p>Ricapitolando:</p>
<ol>
<li>si ricava il codice dalla URL del video Youtube</li>
<li>si costruisce la nuova URL con il codice copiato, aggiungendo il numero di thumb (da 0 a 3) seguito dal suffisso .jpg.</li>
</ol>
<p>Facilissimo!</p>
<p>Ovviamente non è detto che il formato e il contenuto delle thumbnails siano adatti ai vostri scopi, però questo trick può rotnare utile in molte situazioni.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.gironi.it/blog/le-thumbnails-youtube/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Attivare cURL in XAMPP</title>
		<link>https://www.gironi.it/blog/attivare-curl-in-xampp/</link>
					<comments>https://www.gironi.it/blog/attivare-curl-in-xampp/#respond</comments>
		
		<dc:creator><![CDATA[paolo]]></dc:creator>
		<pubDate>Thu, 01 Sep 2011 08:35:10 +0000</pubDate>
				<category><![CDATA[sviluppo web]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[cURL]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Xampp]]></category>
		<guid isPermaLink="false">http://gironi.it/blog/?p=127</guid>

					<description><![CDATA[In Xampp non è attivato di default il supporto per cURL. cURL è un tool utilissimo da riga di comando per trasferire file con la sintassi URL. cURL ha una libreria per php, la cui presenza è richiesta, ad esempio, da molti ottimi plugin per wordpress. Attivare cURL in Xampp è questione di pochi istanti. &#8230; <a href="https://www.gironi.it/blog/attivare-curl-in-xampp/" class="more-link">Leggi tutto<span class="screen-reader-text"> "Attivare cURL in XAMPP"</span></a>]]></description>
										<content:encoded><![CDATA[<p>In Xampp non è attivato di default il supporto per cURL. cURL è un tool utilissimo da riga di comando per trasferire file con la sintassi URL. cURL ha una libreria per php, la cui presenza è richiesta, ad esempio, da molti ottimi plugin per wordpress.</p>
<p><strong>Attivare cURL in Xampp è questione di pochi istanti</strong>. Ecco la procedura da seguire:</p>
<ol>
<li>Ci si porta nella directory <em><strong>xampp</strong></em> sul proprio pc</li>
<li>Si va nella cartella <strong><em>php</em></strong></li>
<li>Si edita il file <strong>php.ini</strong> con un editor di testo</li>
<li>Si cerca la riga <strong>extension=php_curl.dll </strong>e si cancella il punto e virgola<strong> ;</strong> davanti alla riga stessa<strong></strong></li>
<li>Si riavvia il server Apache</li>
</ol>
]]></content:encoded>
					
					<wfw:commentRss>https://www.gironi.it/blog/attivare-curl-in-xampp/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Pagine con piu&#8217; scopi in php</title>
		<link>https://www.gironi.it/blog/pagine-con-piu-scopi-in-php/</link>
					<comments>https://www.gironi.it/blog/pagine-con-piu-scopi-in-php/#respond</comments>
		
		<dc:creator><![CDATA[paolo]]></dc:creator>
		<pubDate>Wed, 02 Mar 2011 21:37:10 +0000</pubDate>
				<category><![CDATA[sviluppo web]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[sviluppo]]></category>
		<category><![CDATA[web]]></category>
		<guid isPermaLink="false">http://gironi.it/blog/?p=55</guid>

					<description><![CDATA[Pagine con piu&#8217; scopi, ovvero pagine che possono decidere cosa mostrare in base a una o piu&#8217; condizioni. La lettura del bel libro di Kevin Yank e&#8217; stata illuminante&#8230; Vediamo un esempio: &#60;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&#62; &#60;html xmlns="http://www.w3.org/1999/xhtml"&#62; &#60;head&#62; &#60;title&#62;Sample Page&#60;/title&#62; &#60;meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /&#62; &#60;/head&#62; &#60;body&#62; &#60;?php if (!isset($_GET['name'])): &#8230; <a href="https://www.gironi.it/blog/pagine-con-piu-scopi-in-php/" class="more-link">Leggi tutto<span class="screen-reader-text"> "Pagine con piu&#8217; scopi in php"</span></a>]]></description>
										<content:encoded><![CDATA[<p>Pagine con piu&#8217; scopi, ovvero pagine che possono decidere cosa mostrare in base a una o piu&#8217; condizioni. La lettura del <a href="http://education.mondadori.it/Libri/SchedaLibro.asp?IdLibro=88-04-53965-8" target="_blank" rel="noopener">bel libro di Kevin Yank</a> e&#8217; stata illuminante&#8230;</p>
<p>Vediamo un esempio:</p>
<pre class="brush: xml; ruler: true;">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;head&gt;
&lt;title&gt;Sample Page&lt;/title&gt;
&lt;meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;?php if (!isset($_GET['name'])): ?&gt;

  &lt;!-- Nessun nome assegnato, per cui viene richiesto all'utente --&gt;

  &lt;form action="&lt;?php echo $_SERVER['PHP_SELF']; ?&gt;" method="get"&gt;
  &lt;label&gt;Please enter your name: &lt;input type="text" name="name" /&gt;&lt;/label&gt;
  &lt;input type="submit" value="GO" /&gt;
  &lt;/form&gt;

&lt;?php else: ?&gt;

  &lt;p&gt;Your name: &lt;?php echo $_GET['name']; ?&gt;&lt;/p&gt;

  &lt;p&gt;This paragraph contains a &lt;a href="newpage.php?name=&lt;?php echo urlencode($_GET['name']); ?&gt;"&gt;link&lt;/a&gt; that passes the name variable on to the next document.&lt;/p&gt;

&lt;?php endif; ?&gt;

&lt;/body&gt;
&lt;/html&gt;</pre>
<p><span id="more-55"></span></p>
<p>Qualche picola nota:</p>
<p>E&#8217; da da notare, l&#8217;uso della funzione <strong>isset</strong>.<br />
Questa funzione ritorna un valore &#8220;vero&#8221; se alla variabile e&#8217; assegnato un valore e &#8220;falso&#8221; se la variabile non esiste.</p>
<p>Interessante anche l&#8217;uso della variabile $_SERVER[&#8216;PHP_SELF&#8217;], utilizzata per specificare l&#8217;attributo <em>action</em> del form.</p>
<p>$_SERVER[&#8216;PHP_SELF&#8217;] e&#8217; sempre configurata sull&#8217;URL della pagina corrente, quindi il form, una volta inviato, carichera&#8217; sempre la stessa pagina, ma con la variabile settata.</p>
<hr />
<p>&nbsp;</p>
<p>Immaginiamo ora di avere un sito gestito attraverso database. Il problema e&#8217; quello di creare due differenti versioni di ciascuna pagina: una per l&#8217;utente non loggato (con la form per fare il login), una per l&#8217;utente regolarmente loggato.<br />
Usando la tecnica delle pagine con piu&#8217; scopi il problema ha in php una soluzione semplice ed elegante. L&#8217;esempio che riporto e&#8217; tratto da un articolo di Kevin Yank (<a href="http://www.devarticles.com/c/a/PHP/Developing-Multipurpose-Pages-With-PHP" target="_blank" rel="noopener">questo il link all&#8217;articolo originale</a>).</p>
<p>Bob ha una pagina con delle news e un piccolo riquadro di login. Ecco il codice:</p>
<p>&nbsp;</p>
<pre class="brush: xml; ruler: true;">&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Bob's Login Site&lt;/title&gt;
&lt;body bgcolor="#00cc00"&gt;
&lt;?php
if ($_POST['login'] == "do") {
$name = $_POST['name'];
$pass = $_POST['password'];
$db_cnct = mysql_connect("localhost", "user", "pass") or die("Could not connect to the database!");
$db = mysql_db_select("users", $db_cnct);
$sql = "SELECT user, pass FROM users WHERE user = \"$name\" and pass = \"md5($pass)\"";
// This is for an encrypted password-protection database
$check_user = mysql_query($sql);
$users = mysql_num_rows($check_user);
if ($users &lt; 1) {
echo ("&lt;center&gt;Invalid Password!&lt;/center&gt;");
echo ('&lt;form action="'.$PHP_SELF.'" method="post"&gt;');
echo ('&lt;input type="text" name="name"&gt;&lt;br /&gt;');
echo ('&lt;input type="password" name="password"&gt;&lt;br /&gt;');
echo ('&lt;input type="hidden" name="login" value="do"&gt;');
echo ('&lt;input type="submit" value="Log-in"&gt;');
echo ('&lt;/form&gt;');
}
else {
echo ("Welcome, $name!");
}
}
else {
echo ('&lt;form action="'.$PHP_SELF.'" method="post"&gt;');
echo ('&lt;input type="text" name="name"&gt;&lt;br /&gt;');
echo ('&lt;input type="password" name="password"&gt;&lt;br /&gt;');
echo ('&lt;input type="hidden" name="login" value="do"&gt;');
echo ('&lt;input type="submit" value="Log-in"&gt;');
echo ('&lt;/form&gt;');
?&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>&nbsp;</p>
<p>Lo script controlla se ci sono username e password (passati tramite il metodo HTTP POST).<br />
Se non ci sono, lo script mostrera&#8217; il codice che chiedera&#8217; di loggarsi.</p>
<p>Se ci sono, lo script interroga il database per controllare se si tratta di una coppia di valori validi.<br />
Se e&#8217; tutto ok, verra&#8217; mostrata la scritta &#8220;Welcome, $name!&#8221;, altrimenti verra&#8217; stampata a schermo una indicazione di errore e verra&#8217; riproposto il modulo di login.</p>
<p>Ed ecco un esempio pratico un po&#8217; piu&#8217; evoluto:</p>
<p>&nbsp;</p>
<pre class="brush: xml;">&lt;?PHP
$forum = $_GET['forum'];
if (!isset ($forum) ) {
$sql = "SELECT forums, ID FROM master_list";
$get_forums = mysql_query($sql);
while ($forums = mysql_fetch_array($get_forums) ) {
echo ('&lt;a href="forums.php?forum'.$forums["ID"].'"&gt;'.$forums["forums"].'&lt;/a&gt;&lt;br /&gt;');
}
}

else {
$thread = $_GET['thread'];
if (!isset ($thread) ) {
$sql = "SELECT thread, ID FROM forum".$forum;
$get_threads = mysql_query($sql);
while ($threads = mysql_fetch_array($get_forums) ) {
echo ('&lt;a href="forums.php?forum='.$forum.'&amp;thread='.$threads["ID"].'"&gt;');
echo ($threads["thread"].'&lt;/a&gt;&lt;br /&gt;');
}
}
else {
$sql = "SELECT messages FROM thread".$thread;
$get_messages = mysql_query($sql);
while ($messages = mysql_fetch_array($get_messages) ) {
echo ('&lt;table&gt;&lt;tr&gt;&lt;td&gt;'.$messages["message"].'&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;');
}
}
?&gt;</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://www.gironi.it/blog/pagine-con-piu-scopi-in-php/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Filtrare i css con i commenti condizionali</title>
		<link>https://www.gironi.it/blog/filtrare-i-css-con-i-commenti-condizionali/</link>
					<comments>https://www.gironi.it/blog/filtrare-i-css-con-i-commenti-condizionali/#respond</comments>
		
		<dc:creator><![CDATA[paolo]]></dc:creator>
		<pubDate>Wed, 01 Apr 2009 13:07:04 +0000</pubDate>
				<category><![CDATA[sviluppo web]]></category>
		<category><![CDATA[commenti condizionali]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[hack]]></category>
		<guid isPermaLink="false">http://gironi.it/blog/?p=88</guid>

					<description><![CDATA[In un mondo perfetto tutti i browser esibirebbero un comportamento omogeneo nell&#8217;interpretare le regole css. Questo, pero&#8217;, non e&#8217; un mondo perfetto ed e&#8217; spesso necessario fare ricorso ad hack (filtri, trucchi) per differenziare le istruzioni a seconda del browser utilizzato. Nel corso degli anni, numerosi hack sono stati sviluppati per ovviare ai bachi dei browser &#8230; <a href="https://www.gironi.it/blog/filtrare-i-css-con-i-commenti-condizionali/" class="more-link">Leggi tutto<span class="screen-reader-text"> "Filtrare i css con i commenti condizionali"</span></a>]]></description>
										<content:encoded><![CDATA[<p>In un mondo perfetto tutti i browser esibirebbero un comportamento omogeneo nell&#8217;interpretare le regole css.</p>
<p>Questo, pero&#8217;, non e&#8217; un mondo perfetto ed e&#8217; spesso necessario fare ricorso ad <em>hack</em> (filtri, trucchi) per differenziare le istruzioni a seconda del browser<br />
utilizzato.</p>
<p>Nel corso degli anni, numerosi hack sono stati sviluppati per ovviare ai bachi dei browser (Internet Explorer <em>in primis</em>).</p>
<p>Il metodo piu&#8217; sicuro per intervenire e&#8217; tuttavia offerto dalla tecnica dei<br />
<strong>commenti condizionali</strong>. Essi sono commenti xhtml scritti con una<br />
particolare sintassi, riconosciuta solamente da Internet Explorer per Windows.</p>
<p>Vediamone l&#8217;utilizzo pratico:</p>
<p><span id="more-88"></span></p>
<div class="box">
<pre>&lt;!--[if <em>espressione</em>]&gt; Qui il codice xhtml &lt;![endif]--&gt;</pre>
</div>
<p>Se la condizione <em>espressione</em> e&#8217; soddisfatta, vengono eseguite le espressioni<br />
xhtml.</p>
<h3>Commenti condizionali: esempi concreti di uso</h3>
<div class="box">
<p>&lt;!&#8211;[if IE]&gt; codice xhtml &lt;![endif]&#8211;&gt;</p>
<p><strong>Il codice viene interpretato solo se il browser e&#8217; Internet<br />
Explorer</strong></p>
<p>&lt;!&#8211;[if lt IE 5]&gt; codice xhtml &lt;![endif]&#8211;&gt;</p>
<p><strong>Il codice viene interpretato solo se il browser e&#8217; Internet Explorer versione<br />
inferiore alla 5</strong></p>
<p>&lt;!&#8211;[if lte IE 5]&gt; codice xhtml &lt;![endif]&#8211;&gt;</p>
<p><strong>Il codice viene interpretato solo se il browser e&#8217; Internet Explorer versione<br />
uguale o inferiore alla 5</strong></p>
<p>&lt;!&#8211;[if IE 5]&gt; codice xhtml &lt;![endif]&#8211;&gt;</p>
<p><strong>Il codice viene interpretato solo se il browser e&#8217; Internet Explorer<br />
5</strong></p>
<p>&lt;!&#8211;[if gte IE 5]&gt; codice xhtml &lt;![endif]&#8211;&gt;</p>
<p><strong>Il codice viene interpretato solo se il browser e&#8217; Internet Explorer versione<br />
uguale o superiore alla 5</strong></p>
<p>&lt;!&#8211;[if gt IE 5]&gt; codice xhtml &lt;![endif]&#8211;&gt;</p>
<p><strong>Il codice viene interpretato solo se il browser e&#8217; Internet Explorer versione<br />
superiore alla 5</strong></p>
<p>&lt;!&#8211;[if !IE 5.5]&gt; codice xhtml &lt;![endif]&#8211;&gt;</p>
<p><strong>Il codice viene interpretato solo se il browser e&#8217; Internet Explorer versione<br />
diversa dalla 5.5</strong></p>
</div>
<p>&nbsp;</p>
<p>Molto utile e&#8217; la possibilita&#8217; di <strong>caricare, dopo il foglio di stile generico,<br />
fogli di stile specifici</strong>, ad esempio, per le differenti versioni di Internet<br />
Explorer.</p>
<p>Come sempre, un esempio e&#8217; il modo piu&#8217; chiaro per illustrare il concetto.</p>
<p>Supponiamo di aver richiamato, nell&#8217;head del codice xhtml, un foglio di stile<br />
generico:</p>
<p>&nbsp;</p>
<div class="box">
<pre>&lt;link rel="stylesheet" href="stile_generico.css" type="text/css" /&gt;</pre>
</div>
<p>&nbsp;</p>
<p>ora carichiamo, dopo la precedente istruzione, un foglio di stile con le correzioni necessarie per le versioni di Internet Explorer inferiori alla 6:</p>
<p>&nbsp;</p>
<div class="box">
<pre>&lt;!--[if lte IE 6]&gt;
&lt;link rel="stylesheet" href="ie5fix.css" type="text/css" /&gt;
&lt;![endif]--&gt;</pre>
</div>
<p>&nbsp;</p>
<p>Fatto!</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.gironi.it/blog/filtrare-i-css-con-i-commenti-condizionali/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
