<?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 &#187; PHP</title>
	<atom:link href="http://www.mainickweb.com/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mainickweb.com</link>
	<description>Tutorial e Risorse gratuite su jQuery, PHP e CSS</description>
	<lastBuildDate>Sun, 29 Jan 2012 10:17:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>Come rendere il database pi&#249; sicuro</title>
		<link>http://www.mainickweb.com/come-rendere-il-database-pi-sicuro/</link>
		<comments>http://www.mainickweb.com/come-rendere-il-database-pi-sicuro/#comments</comments>
		<pubDate>Mon, 09 May 2011 06:30:00 +0000</pubDate>
		<dc:creator>MaiNick</dc:creator>
				<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[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 [...]]]></description>
			<content:encoded><![CDATA[<p><img 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>
]]></content:encoded>
			<wfw:commentRss>http://www.mainickweb.com/come-rendere-il-database-pi-sicuro/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mtrack: un completo tracker per lo sviluppo di progetti</title>
		<link>http://www.mainickweb.com/mtrack-un-completo-tracker-per-lo-sviluppo-di-progetti/</link>
		<comments>http://www.mainickweb.com/mtrack-un-completo-tracker-per-lo-sviluppo-di-progetti/#comments</comments>
		<pubDate>Mon, 14 Mar 2011 06:00:00 +0000</pubDate>
		<dc:creator>MaiNick</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Servizi]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[project management]]></category>

		<guid isPermaLink="false">http://www.mainickweb.com/?p=586</guid>
		<description><![CDATA[mtrack è un&#8217;applicazione open source, realizzata in PHP, per il completo controllo di un progetto software/web applicazione. Permette la gestione del progetto, navigazione del codice, wiki e caratteristiche di time tracking. L&#8217;applicazione ha un sistema di tracciamento dei componenti, priorità, gravità e tappe, in base anche alle stime di tempo e fatiche registrate. Inoltre si [...]]]></description>
			<content:encoded><![CDATA[<p><img style="display: block; margin-left: auto; margin-right: auto;" src="http://www.mainickweb.com/wp-content/2011/03/mtrack.jpg" border="0" alt="mtrack - software development tracker" width="500" height="362" /></p>
<p><a title="software development tracker" href="http://mtrack.wezfurlong.org/" target="_blank">mtrack</a> è un&#8217;applicazione open source, realizzata in PHP, per il <strong>completo controllo di un progetto</strong> software/web applicazione.</p>
<p>Permette la <strong>gestione del progetto</strong>, <strong>navigazione del codice</strong>, <strong>wiki</strong> e caratteristiche di <strong>time tracking</strong>. L&#8217;applicazione ha un sistema di tracciamento dei componenti, priorità, gravità e tappe, in base anche alle stime di tempo e fatiche registrate. Inoltre si integra perfettamente con i servizi di repository Subversion, Mercurial e Git per la <strong>gestione delle versioni del progetto</strong>.</p>
<p>Gli utenti possono ricevere notifiche di aggiornamento del codice del progetto o comunicare con gli altri collaboratori via e-mail.</p>
<p>Inoltre è possibile estendere o personalizzare ulteriormente mtrack attraverso le API offerte.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mainickweb.com/mtrack-un-completo-tracker-per-lo-sviluppo-di-progetti/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Xdebug: debugging e profiling delle applicazioni PHP</title>
		<link>http://www.mainickweb.com/xdebug-debugging-e-profiling-delle-applicazioni-php/</link>
		<comments>http://www.mainickweb.com/xdebug-debugging-e-profiling-delle-applicazioni-php/#comments</comments>
		<pubDate>Thu, 17 Feb 2011 15:18:41 +0000</pubDate>
		<dc:creator>MaiNick</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[debug php]]></category>
		<category><![CDATA[xdebug]]></category>

		<guid isPermaLink="false">http://www.mainickweb.com/?p=578</guid>
		<description><![CDATA[Xdebug è un&#8217;estensione PHP gratuita e open source che permette il debugging e il profiling degli script PHP in dettaglio. Considerando che è una estensione, l&#8217;utilizzo è facile e richiede pochissime configurazione per integrarlo nelle nostre applicazioni. Xdebug ti aiuta fornendo molte informazioni utili di debug: tracce di funzioni e di stack delle variabili nei [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-576" style="width: 500px; border: 0pt none;" title="Xdebug" src="http://www.mainickweb.com/wp-content/2011/02/xdebug-logo.png" alt="Xdebug estensione per il debug degli scripts PHP" width="500" height="290" /></p>
<p><a href="http://xdebug.org/" target="_blank">Xdebug</a> è un&#8217;estensione PHP gratuita e open source che <strong>permette il debugging e il profiling degli script PHP</strong> in dettaglio.</p>
<p>Considerando che è una estensione, l&#8217;utilizzo è facile e richiede <strong>pochissime configurazione</strong> per integrarlo nelle nostre applicazioni.<br />
Xdebug ti aiuta fornendo molte informazioni utili di debug:</p>
<ul>
<li>tracce di funzioni e di <strong>stack delle variabili</strong> nei messaggi di errore con la completa <strong>visualizzazione dei parametri delle funzioni definite dall&#8217;utente</strong>, il nome della funzione, il nome del file e il numero di linea nel codice in cui si è verificato l&#8217;errore.</li>
<li><strong>allocazione di memoria</strong></li>
<li>protezione da cicli infiniti</li>
</ul>
<p>Inoltre fornisce informazioni di profiling, un potente strumento che analizza il codice PHP e <strong>determina i colli di bottiglia</strong> o in generale <strong>individua le parti del codice più lente</strong>, analisi del code coverage ed ha la capacità di eseguire il debug in modo interattivo attraverso un interfaccia da browser, tramite estensioni per i browser di interagire con l&#8217;esecuzione degli scripts PHP.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mainickweb.com/xdebug-debugging-e-profiling-delle-applicazioni-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Come utilizzare funzioni di callback in PHP</title>
		<link>http://www.mainickweb.com/come-utilizzare-funzioni-di-callback-in-php/</link>
		<comments>http://www.mainickweb.com/come-utilizzare-funzioni-di-callback-in-php/#comments</comments>
		<pubDate>Wed, 24 Nov 2010 06:30:09 +0000</pubDate>
		<dc:creator>MaiNick</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[callback]]></category>

		<guid isPermaLink="false">http://www.mainickweb.com/?p=520</guid>
		<description><![CDATA[Una tecnica comunemente usata in programmazione è l&#8217;utilizzo delle callback. Una callback è una funzione che data come parametro ad un&#8217;altra funzione può essere richiamata nello svolgimento di quest&#8217;ultima. In questo articolo vi mostrerò come definire e richiamare callbacks in PHP, e come può essere utile farne uso. Supponiamo di avere uno script PHP che [...]]]></description>
			<content:encoded><![CDATA[<p><img style="display: block; margin-left: auto; margin-right: auto;" src="http://www.mainickweb.com/wp-content/2010/11/snippet-javascript.jpg" border="0" alt="Callback in PHP" width="500" height="167" /></p>
<p>Una tecnica comunemente usata in programmazione è l&#8217;utilizzo delle <strong>callback</strong>. Una callback è una funzione che data come parametro ad un&#8217;altra funzione può essere richiamata nello svolgimento di quest&#8217;ultima.</p>
<p>In questo articolo vi mostrerò come <strong>definire e richiamare callbacks in PHP</strong>, e come può essere utile farne uso.</p>
<p>Supponiamo di avere uno script PHP che quando viene eseguito fa una ricerca del termine su diversi motori di ricerca. Il tutorial non vuole spiegherà come elaborare i risultati di ricerca, ma solo dimostrare come una callback può essere utile﻿.</p>
<p>Implementare l&#8217;esempio sopra senza l&#8217;utilizzo di callback può essere simile al seguente codice:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
function searchBySearchEngine($term, $searchEngine) {
  $result = array();
  foreach ($searchEngine as $engine( {
    // ricerca termine per ciascun motore di ricerca
    $result[] = array(
      'search_engine' =&gt; $engine,
      'result' =&gt; 'risultati di ricerca'
    );
  }
  return $result;
}
$searchEngine = array('http://www.google.it', 'http://www.bing.com', 'http://it.yahoo.com', // altri...);
// inizio ricerca del termine sui motori di ricerca
$term = 'MaiNick';
$data = searchBySearchEngine($term, $searchEngine);
// output dei risultati
foreach ($data as $result) {
  echo &quot;Risultati di ricerca di &quot; . $term . &quot; eseguita su &quot; . $result['search_engine'] . &quot;&lt;br /&gt;&quot;;
}
?&gt;
</pre>
<p>L&#8217;esempio può essere modificato per utilizzare la <strong>funzione di callback</strong>, richiamata ogni volta che un singolo motore di ricerca ha completato la ricerca.</p>
<p>Ci sono tre tipi di utilizzo di callback:</p>
<ul>
<li>una <strong>funzione PHP</strong> standard: passata come una stringa.</li>
<li>un <strong>metodo statico</strong> di una classe: passato come un array in cui il primo elemento è il nome della classe e il secondo è il nome del metodo.</li>
<li>un <strong>metodo di un oggetto</strong>: anch&#8217;esso passato come prima tramite array, dove il primo elemento è l&#8217;oggetto stesso.</li>
</ul>
<p>Ecco il codice che illustra come definire ogni tipologia di callback:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
// 1 metodo
function myCallback() {
}
$callback = 'myCallback';

// 2 metodo
class MyClass {
  public static function myCallback() {
  }
}
$callback = array('MyClass', 'myCallback');

// 3 metodo
class MyClassObj {
  public function myCallback() {
  }
}
$obj = new MyClassObj();
$callback = array($obj, 'myCallback');
?&gt;
</pre>
<p>Per verificare se una variabile può essere definita come una funzione, e quindi utilizzato come una callback, possiamo utilizzare <code>is_callable()</code>, una funzione PHP che accetta la callback come unico argomento. Quindi possiamo utilizzare la funzione <code>call_user_func()</code> che permette di <strong>richiamare la funzione callback</strong> passata come primo argomento e ulteriori argomenti passati come parametri alla callback stessa.</p>
<p>Tornando al nostro esempio iniziale, possiamo modificare la funzione <code>searchBySearchEngine</code> in modo che prenda come terzo argomento la callback, richiamata ogni volta che un motore di ricerca ha completato la sua ricerca.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
function searchBySearchEngine($term, $searchEngine, $callback = null) {
  $result = array();
  foreach ($searchEngine as $engine( {
    // ricerca termine per ciascun motore di ricerca
    if (is_callable($callback)) {
      $result = call_user_func($callback, $term, $searchEngine);
    }
  }
  return $result;
}

// classe fittizia utilizzate per la callback
class MyClass {
  public static function searchComplete($term, $searchEngine) {
    $values = array(
      'search_engine' =&gt; $engine,
      'result' =&gt; 'risultati di ricerca'
    );
    echo &quot;Risultati di ricerca di $quot; . $term . &quot; eseguita su &quot; . $values['search_engine'] . &quot;&lt;br /&gt;&quot;;

    return $values;
  }
}
$searchEngine = array('http://www.google.it', 'http://www.bing.com', 'http://it.yahoo.com', // altri...);
// inizio ricerca del termine sui motori di ricerca
$term = 'MaiNick';
$data = searchBySearchEngine($term, $searchEngine, array('MyClass', 'searchComplete'));
?&gt;
</pre>
<p>Potere notare che all&#8217;esecuzione del codice sopra i messaggi di feedback vengono visualizzati ogni qual volta un motore di ricerca ha restituito dei risultati, e non come nel primo codice al termine dello script.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mainickweb.com/come-utilizzare-funzioni-di-callback-in-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Come creare miniature di immagini con PHP e la libreria GD</title>
		<link>http://www.mainickweb.com/come-creare-miniature-di-immagini-con-php-e-la-libreria-gd-2/</link>
		<comments>http://www.mainickweb.com/come-creare-miniature-di-immagini-con-php-e-la-libreria-gd-2/#comments</comments>
		<pubDate>Mon, 10 May 2010 07:00:39 +0000</pubDate>
		<dc:creator>MaiNick</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[immagini]]></category>
		<category><![CDATA[libreria GD]]></category>
		<category><![CDATA[thumbnails]]></category>

		<guid isPermaLink="false">http://www.mainickweb.com/?p=417</guid>
		<description><![CDATA[In questo tutorial di oggi vedremo come creare miniature di immagini con PHP e l&#8217;uso della libreria GD. Caricare sul server immagini in dimensioni originali pu&#242; essere dispendioso per lo spazio a disposizione ma soprattutto per la banda quando bisogna visualizzarle ad ogni richiesta al server.In questo caso la libreria GD si rivela utilissima perch&#233; [...]]]></description>
			<content:encoded><![CDATA[<div style="text-align:center;"><img src="http://www.mainickweb.com/wp-content/2010/05/ridimensiona-immagini.jpg" alt="ridimensiona-immagini.jpg" border="0" width="500" height="300" /></div>
<p>In questo tutorial di oggi vedremo come <strong>creare miniature di immagini</strong> con PHP e l&#8217;uso della <a href="http://php.net/manual/en/book.image.php" title="Manuale libreria GD" target="_blank">libreria GD</a>.</p>
<p>Caricare sul server immagini in dimensioni originali pu&ograve; essere dispendioso per lo spazio a disposizione ma soprattutto per la banda quando bisogna visualizzarle ad ogni richiesta al server.<br />In questo caso la libreria GD si rivela utilissima perch&eacute; permette di poter prendere un&#8217;immagine jpg, gif o png e crearne una nuova con <strong>dimensioni ridotte</strong>, quindi <strong>pi&ugrave; leggera e pi&ugrave; veloce da caricare</strong>.<br />Durante il ridimensionamento delle immagini &egrave; inoltre possibile ridefinire il livello di compressione, regolando quindi il rapporto qualit&agrave;/dimensione, rendendo cos&igrave; pi&ugrave; veloce il caricamento della miniatura.</p>
<p>Questa funzione php permette il resize di immagini jpeg, gif e png. I parametri da settare per la funzione sono il nome del file da ridimensionare, la cartella dove &egrave; presente l&#8217;immagine, la cartella dove salvare la nuova immagine e la larghezza della nuova immagine.<br />Ho deciso di poter passare solo la larghezza perch&eacute; una dimensione fissa dei lati dell&#8217;immagine potrebbe portare a creare un&#8217;immagine che non mantiene le proporzioni e quindi deformata.</p>
<h2>Funzione per creare e salvare sul server un&#8217;immagine ridimensionata</h2>
<pre class="brush: php; title: ; notranslate">
/**
 * =---------------------------------------------------------------------=
 * createThumbnail
 * =---------------------------------------------------------------------=
 * Questa funzione creer&amp;agrave; una miniatura dell'immagine caricata.
 *
 * @param $filename	- nome immagine.
 * @param $dir_in		- directory dove &amp;egrave; presente l'immagine.
 * @param $dir_out		- directory dove caricare l'immagine.
 * @param $width_image	- larghezza immagine da creare.
 */
function createThumbnail($filename, $dir_in, $dir_out, $width_image) {
  // apro l'immagine originale (jpeg,gif,png)
  if (preg_match('/[.]jpg$/', $filename)) {
    $im = imagecreatefromjpeg($dir_in.$filename);
  }
  else if (preg_match('/[.]gif$/', $filename)) {
    $im = imagecreatefromgif($dir_in.$filename);
  }
  else if (preg_match('/[.]png$/', $filename)) {
    $im = imagecreatefrompng($dir_in.$filename);
  }
  // calcolo la larghezza e l'altezza dell'immagine originale
  $ox = imagesx($im);
  $oy = imagesy($im);
  // larghezza della miniatura data in input
  $nx = $width_image;
  // altezza calcolata proporzionalmente all'immagine originale
  $ny = floor($oy * ($width_image / $ox));
  // creo l'immagine della miniatura
  $nm = imagecreatetruecolor($nx, $ny);
  // copio l'immagine originale in quella della miniatura ridimensionaldola
  imagecopyresized($nm, $im, 0,0,0,0, $nx, $ny, $ox, $oy);
  // verifico l'esistenza della cartella dove salvare la miniatura
  if (!file_exists($dir_out)) {
    if (!mkdir($dir_out)) {
      die(&quot;There was a problem.&quot;);
    }
  }
  // salvo l'immagine della miniatura
  if (imagejpeg($nm, $dir_out.$filename)) {
    return TRUE;
  } else {
    return FALSE;
  }
}
</pre>
<p>Con le prime istruzioni condizionali apriamo l&#8217;immagine originale sia che essa sia jpeg, gif e png. Poi memorizziamo le dimensioni (larghezza <code>$ox</code> e altezza <code>$oy</code>) dell&#8217;immagine originale e le dimensioni della miniatura da creare; la larghezza <code>$width_image </code> fissa passata in input alla funzione e l&#8217;altezza calcolate per mantenere la proporzione e non deformare l&#8217;immagine nella miniatura.<br />Una volta creata la base per la miniatura, andiamo a copiare il contenuto dell&#8217;immagine originale con le nuove dimensioni (<code>imagecopyresized()</code>). Copiata l&#8217;immagine la salviamo con <code>imagejpeg()</code> nel formato jpeg: il terzo parametro, omesso, rappresenta il grado di compressione che pu&ograve; essere un valore variabile da 0 a 100 (pi&ugrave; l&#8217;immagine &egrave; compressa pi&ugrave; &egrave; leggera e allo stesso tempo pi&ugrave; perde di definizione).</p>
<p>Possiamo modificare l&#8217;ultima parte della funzione per salvare l&#8217;immagine di miniatura nello stesso formato del file originale utilizzando, come nella prima parte, delle istruzioni condizionali e le rispettive funzioni <code>imagejpeg()</code>, <code>imagegif()</code> e <code> imagepng()</code>, di cui &egrave; facile intuire il significato.</p>
<p>In conclusione ricordo che la libreria GD &egrave; nativa su PHP a partire dalla versione 4.3.0, questo comporta il non funzionamento della funzione <code>createThumbnail()</code> con una versione di PHP inferiore.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mainickweb.com/come-creare-miniature-di-immagini-con-php-e-la-libreria-gd-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Duplicare campi di un modulo con jQuery</title>
		<link>http://www.mainickweb.com/duplicare-campi-di-un-modulo-con-jquery/</link>
		<comments>http://www.mainickweb.com/duplicare-campi-di-un-modulo-con-jquery/#comments</comments>
		<pubDate>Tue, 27 Apr 2010 07:00:40 +0000</pubDate>
		<dc:creator>MaiNick</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[duplica camo]]></category>
		<category><![CDATA[plugin jquery]]></category>
		<category><![CDATA[relCopy]]></category>

		<guid isPermaLink="false">http://www.mainickweb.com/?p=409</guid>
		<description><![CDATA[Avendo bisogno di implementare una rubrica in un progetto ho avuto l&#8217;esigenza di memorizzare per ciascun contatto un numero non precisato di recapiti. Per la duplicazione del campo recapito ho utilizzato il plugin jquery relCopy che copia un qualsiasi elemento, e suoi figli, dal DOM. Questo in realtà è uno strumento relativamente semplice che chiunque [...]]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;"><img src="http://www.mainickweb.com/wp-content/2010/04/multi-recapiti.jpg" border="0" alt="multi-recapiti.jpg" width="500" height="276" /></div>
<p>Avendo bisogno di implementare una rubrica in un progetto ho avuto l&#8217;esigenza di memorizzare per ciascun contatto <strong>un numero non precisato</strong> di recapiti.</p>
<p>Per la <strong>duplicazione del campo</strong> recapito ho utilizzato il <a title="relCopy jQuery Plugin" href="http://www.andresvidal.com/labs/relcopy.html" target="_blank">plugin jquery relCopy</a> che copia un qualsiasi elemento, e suoi figli, dal DOM. Questo in realtà è uno strumento relativamente semplice che chiunque sarà in grado di utilizzare. Se avete lavorato con altri tipi di plugin di jQuery, o anche solo visto un sito come <a href="http://www.partypoker.it/">http://partypoker.it/</a>, allora non dovrebbe essere troppo difficile per voi. Utilizzare questo tipo di plugin risolve il problema, come nel mio caso, di provvedere manualmente a realizzare il codice per duplicare una certa porzione della nostra pagina.<br />
Opzioni del plugin sono:</p>
<ul>
<li><strong>excludeSelector</strong> (<em>string</em>): selettore jQuery utilizzato per escludere un elemento ed i suoi figli.</li>
<li><strong>limit</strong> (<em>integer</em>): numero di copie permesse [Default 0: illimitato].</li>
<li><strong>append</strong> (<em>string</em>): HTML da allegare alla fine di ogni copia.</li>
<li><strong>copyClass</strong> (<em>string</em>): una classe da associare a ciascuna copia [Default 'copy'].</li>
<li><strong>clearInputs</strong> (<em>boolean</em>): opzione per cancellare i valori dei campi input e textarea clonati [Default true].</li>
</ul>
<p>Per utilizzarlo basta chiamare <code>$('selettore').relCopy({opzioni})</code> su un qualsiasi elemento del DOM con un selettore di tipo jQuery definito nell&#8217;attributo <code>rel</code> dell&#8217;elemento.</p>
<h2>Documento HTML</h2>
<p>Il modulo visualizzato contiene i campi descrittivi del contatto più la possibilità di associarvi quanti recapiti vogliamo:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;p class=&quot;clone&quot;&gt;&lt;input type=&quot;text&quot; name=&quot;recapiti[]&quot; class='input'/&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;#&quot; class=&quot;add&quot; rel=&quot;.clone&quot;&gt;Aggiungi recapito&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;input type=&quot;submit&quot; value=&quot;Salva&quot; /&gt;&lt;/p&gt;
</pre>
<p>Dopo i campi predefiniti per descrivere un contatto abbiamo un paragrafo con un campo di tipo testo. Il paragrafo ha la classe <code>clone</code> la stessa utilizzata nell&#8217;attributo <code>rel</code> del link posto sotto, il quale ha la funzione di clonarlo.</p>
<p>Abbiamo indicato <code>recapiti[]</code> nell&#8217;attributo <code>name</code> del campo del recapito in modo da ottenere un array di tutti i recapiti inseriti nell&#8217;array globale <code>$_POST</code>: <strong>non mettendo le parentesi quadrate</strong> il modulo invierebbe il valore dell&#8217;ultimo recapito aggiunto.</p>
<h2>Script jQuery</h2>
<p>Per prima cosa bisogna includere la libreria jQuery (dai server di Google) poi il plugin relCopy ed infine il nostro file di script:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;relCopy.jquery.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;script.js&quot;&gt;&lt;/script&gt;
</pre>
<p>Ecco il codice del nostro file di script:</p>
<pre class="brush: jscript; title: ; notranslate">
$(document).ready(function(){
  // link inserito alla fine dell'elemento clonato che permette di eliminarlo
  var removeLink = ' &lt;a class=&quot;remove&quot; href=&quot;#&quot; onclick=&quot;$(this).parent().slideUp(function(){ $(this).remove() }); return false&quot;&gt;remove&lt;/a&gt;';

  // chiamata permette di clonare il paragrafo con all'interno il campo di testo del recapito
  $('a.add').relCopy({ append: removeLink });
});
</pre>
<p>Tramite la chiamata <code>$('a.add').relCopy({ append: removeLink});</code> associamo al collegamento la funzione di clonare il recapito. Nell&#8217;opzione <code>append</code> utilizzata del plugin abbiamo definito un link che tramite un metodo jQuery permette di eliminare il corrispondente elemento clonato.</p>
<h2>Salva contatto in PHP</h2>
<p>Il codice che segue scandisce l&#8217;array <code>$_POST['recapiti']</code> per estrarre i singoli valori inseriti:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
if($_POST['recapiti']){
  $array_recapiti = $_POST['recapiti'];
  foreach ($array_recapiti as $recapito) {
    if (strlen($recapito)&gt;0) {
      //operazioni sul singolo recapito
      echo $recapito.&quot;&lt;br /&gt;&quot;;
    }
  }
}
?&gt;
</pre>
<p><a class="codice" title="Demo duplicare campi di un modulo con jQuery" href="http://www.mainickweb.com/esempi/jquery/multi-recapiti.html" target="_blank"><span>Demo</span></a> <a class="codice" title="Download codice duplicare campi con jQuery" href="http://www.mainickweb.com/esempi/jquery/multi-recapiti.zip"><span>Download</span></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mainickweb.com/duplicare-campi-di-un-modulo-con-jquery/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Evento Symfony Live 2010</title>
		<link>http://www.mainickweb.com/evento-symfony-live-2010/</link>
		<comments>http://www.mainickweb.com/evento-symfony-live-2010/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 20:05:22 +0000</pubDate>
		<dc:creator>MaiNick</dc:creator>
				<category><![CDATA[Eventi]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[framework php]]></category>
		<category><![CDATA[symfony live]]></category>

		<guid isPermaLink="false">http://www.mainickweb.com/?p=365</guid>
		<description><![CDATA[Il principale evento della stagione dedicato totalmente al framework Symfony è iniziato ieri: è il secondo evento Symfony Live ma il primo dedicato alla comunità internazionale, in quanto il precedente era in lingua esclusivamente francese. La conferenza si terrà nel giorni 16-17 febbraio a Parigi, un&#8217;occasione unica per parlare con il team di sviluppo del [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.mainickweb.com/wp-content/2010/02/banner_square.jpg" alt="Banner Symfony Live 2010" title="banner_square" width="215" height="215" class="alignleft size-full wp-image-367" style="border:none;margin:0 10px 5px 0;" />Il principale evento della stagione dedicato totalmente al <a href="http://www.symfony-project.org/" title="Web PHP Framework Symfony">framework Symfony</a> è iniziato ieri: è il secondo evento <strong>Symfony Live</strong> ma il primo dedicato alla comunità internazionale, in quanto il precedente era in lingua esclusivamente francese.<br />
La conferenza si terrà nel giorni 16-17 febbraio a Parigi, un&#8217;occasione unica per parlare con il <strong>team di sviluppo del core</strong>, per incontrare e condividere le proprie esperienze con la community.</p>
<p>Ieri, il giorno prima della conferenza, è stata dedicato interamente alla formazione costituita da 5 <strong>corsi di formazione</strong> in parallelo, tutti ospitati da un membro del team del core di symfony.</p>
<p>Tra gli ospiti illustri alla conferenza, <strong>Matthew Weier O&#8217;Phinney</strong>, capo progetto per <strong>Zend Framework</strong>, parlerà di come sviluppare con Symfony e Zend Framework insieme, e <strong>Dustin Whittle</strong>, evangelista sviluppatore per la strategia Open di Yahoo.</p>
<p>Per chiudere la seconda giornata della conferenza, ospiterà una sessione su Symfony 2.0 per rivelare poi la prima release alpha.</p>
<p>Maggiori informazioni dal sito dedicato all&#8217;evento <a href="http://www.symfony-live.com/" title="Symfony Live 2010" target="_blank">Symfony Live 2010</a> e su Twitter utilizzando l&#8217;hashtag ufficiale <a href="http://search.twitter.com/search?q=%23sflive2010" title="hashtag Symfony Live 2010" target="_blank">#sflive2010</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mainickweb.com/evento-symfony-live-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utilizzare più istruzioni SQL prepare con PHP MySQLi</title>
		<link>http://www.mainickweb.com/utilizzare-piu-istruzioni-sql-prepare-con-php-mysqli/</link>
		<comments>http://www.mainickweb.com/utilizzare-piu-istruzioni-sql-prepare-con-php-mysqli/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 07:00:41 +0000</pubDate>
		<dc:creator>MaiNick</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[mysqli]]></category>

		<guid isPermaLink="false">http://www.mainickweb.com/?p=360</guid>
		<description><![CDATA[Giorni fa in ufficio, durante lo sviluppo di un&#8217;applicazione di gestione, mi sono imbattuto in un errore causato dal tentativo di utilizzare pi&#249; istruzioni prepare di MySQLi. Ieri ho trovato un articolo che mi ha risolto il problema: Carson McDonald spiega quale sia la causa che genera l&#8217;errore e come &#232; possibile utilizzare pi&#249; istruzioni [...]]]></description>
			<content:encoded><![CDATA[<p>Giorni fa in ufficio, durante lo sviluppo di un&#8217;applicazione di gestione, mi sono imbattuto in un errore causato dal tentativo di utilizzare pi&ugrave; istruzioni <code>prepare</code> di <a href="http://www.php.net/manual/en/book.mysqli.php" title="PHP MySQL Improved Extension">MySQLi</a>.<br />
Ieri ho trovato un articolo che mi ha risolto il problema: Carson McDonald spiega quale sia la causa che genera l&#8217;errore e come &egrave; possibile utilizzare pi&ugrave; istruzioni SQL <code>prepare</code> per l&#8217;esecuzione.</p>
<p>Carson McDonald ha scoperto l&#8217;errore quando ha cercato di eseguire una dichiarazione <code>prepare</code> in un ciclo su un set di risultati di un&#8217;altra istruzione preparata, dichiarata precedentemente il ciclo ma create entrambe sulla stessa connessione.</p>
<p>Cercando dettagli sull&#8217;errore generato nella <a href="http://dev.mysql.com/doc/refman/5.0/en/commands-out-of-sync.html">documentazione di MySQL</a>, emerge che il set di risultati di un&#8217;istruzione <code>prepare</code> eseguita devono essere scaricati completamente prima di eseguire un&#8217;altra istruzione preparata sulla stessa connessione.</p>
<p>Il problema pu&ograve; essere semplicemente risolto utilizzando l&#8217;istruzione <a href="http://php.net/manual/en/mysqli-stmt.store-result.php"><strong>store_result</strong></a> che trasferisce un set di risultati da una dichiarazione <code>prepare</code>.</p>
<p>Riporto lo stesso esempio analizzato nel suo articolo da McDonald:</p>
<pre class="brush: php; title: ; notranslate">
&lt; ?php
  $db_connection = new mysqli('127.0.0.1', 'user', '', 'test');
  $post_stmt = $db_connection-&gt;prepare(&quot;select id, title from post where id = 1000&quot;);
  $comment_stmt = $db_connection-&gt;prepare(&quot;select user_id from comment where post_id = ?&quot;);
  if ($post_stmt-&gt;execute()) {
    $post_stmt-&gt;bind_result($post_id, $title);
    if ($post_stmt-&gt;fetch()) {
      $comments = array();
      $comment_stmt-&gt;bind_param('i', $post_id);
      if ($comment_stmt-&gt;execute()) {
        $comment_stmt-&gt;bind_result($user_id);
        while ($comment_stmt-&gt;fetch()) {
          array_push($comments, array('user_id' =&gt; $user_id));
        }
      } else {
        printf(&quot;Comment statement error: %s\n&quot;, $comment_stmt-&gt;error);
      }
    }
  } else {
    printf(&quot;Post statement error: %s\n&quot;, $post_stmt-&gt;error);
  }

  $post_stmt-&gt;close();
  $comment_stmt-&gt;close();
  $db_connection-&gt;close();

  printf(&quot;ID: %d -&gt; %s\n&quot;, $post_id, $post_title);
  print_r($comments);
?&gt;
</pre>
<p>il codice sopra comporter&agrave; il seguente errore:</p>
<pre class="brush: bash; title: ; notranslate">
Comment statement error: Commands out of sync; you can't run this command now
PHP Notice:  Undefined variable: post_title in error.php on line 41
ID: 9033 -&amp;gt;
Array
(
)
</pre>
</p>
<p>Inserendo l&#8217;istruzione <code>store_result</code> risolviamo il problema:</p>
<pre class="brush: php; title: ; notranslate">
&lt; ?php
  $db_connection = new mysqli('127.0.0.1', 'user', '', 'test');
  $post_stmt = $db_connection-&gt;prepare(&quot;select id, title from post where id = 1000&quot;);
  $comment_stmt = $db_connection-&gt;prepare(&quot;select user_id from comment where post_id = ?&quot;);
  if ($post_stmt-&gt;execute()) {
    //se eseguita correttamente scarico il set di risultati
    $post_stmt-&gt;store_result();
    $post_stmt-&gt;bind_result($post_id, $title);
    if ($post_stmt-&gt;fetch()) {
      $comments = array();
      $comment_stmt-&gt;bind_param('i', $post_id);
      if ($comment_stmt-&gt;execute()) {
        $comment_stmt-&gt;bind_result($user_id);
        while ($comment_stmt-&gt;fetch()) {
          array_push($comments, array('user_id' =&gt; $user_id));
        }
      } else {
        printf(&quot;Comment statement error: %s\n&quot;, $comment_stmt-&gt;error);
      }
    }
    $post_stmt-&gt;free_result();
  } else {
    printf(&quot;Post statement error: %s\n&quot;, $post_stmt-&gt;error);
  }

  $post_stmt-&gt;close();
  $comment_stmt-&gt;close();
  $db_connection-&gt;close();

  printf(&quot;ID: %d -&gt; %s\n&quot;, $post_id, $post_title);
  print_r($comments);
?&gt;
</pre>
</p>
<p>Come &egrave; stato utile per me, spero di aver fatto cosa buona anche per voi.<br />
Se avete utilizzato un&#8217;altra soluzione datemene notizia nei commenti.</p>
<p>[Fonte: <a href="http://www.ioncannon.net/programming/889/php-mysqli-and-multiple-prepared-statements/" title="PHP MySQLi and Multiple Prepared Statements" target="_blank">IONCANNON</a>]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mainickweb.com/utilizzare-piu-istruzioni-sql-prepare-con-php-mysqli/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Conversioni tra tipi di dati</title>
		<link>http://www.mainickweb.com/conversioni-tra-tipi-di-dati/</link>
		<comments>http://www.mainickweb.com/conversioni-tra-tipi-di-dati/#comments</comments>
		<pubDate>Wed, 12 Nov 2008 12:30:58 +0000</pubDate>
		<dc:creator>MaiNick</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[booleani]]></category>
		<category><![CDATA[conversione dati]]></category>
		<category><![CDATA[conversione tipi]]></category>
		<category><![CDATA[conversione tra tipi di dati]]></category>
		<category><![CDATA[interi]]></category>
		<category><![CDATA[numeri a virgola mobile]]></category>
		<category><![CDATA[oggetti]]></category>
		<category><![CDATA[stringhe]]></category>

		<guid isPermaLink="false">http://www.mainickweb.com/?p=218</guid>
		<description><![CDATA[In php le variabili non sono dichiarate di un certo tipo e il motore del linguaggio converte liberamente tra i diversi tipi durante l&#8217;esecuzione. Esistono due sistemi principali per convertire le variabili di un tipo in un altro. Conversioni di tipo implicite I casi più frequenti in cui avvengono conversioni implicite (automatiche) di tipo sono [...]]]></description>
			<content:encoded><![CDATA[<p>In php le variabili non sono dichiarate di un certo tipo e il motore del linguaggio converte liberamente tra i diversi tipi durante l&#8217;esecuzione. Esistono due sistemi principali per <strong>convertire le variabili</strong> di un tipo in un altro.</p>
<h2>Conversioni di tipo implicite</h2>
<p>I casi più frequenti in cui avvengono conversioni implicite (automatiche) di tipo sono i seguenti:</p>
<ul>
<li><strong><em>Operatori aritmetici binari</em></strong>. Se un operando è un intero e l&#8217;altro è un numero a virgola mobile, il valore intero viene convertito in float. Se uno è una stringa e l&#8217;altro è un intero, PHP converte la stringa in un intero prima di valutare entrambi gli operandi come interi.</li>
<li><em><strong>Espressioni booleane e operatori di espressione</strong></em>. Nel caso in cui un&#8217;espressione deve essere valutata come un booleano, PHP converte il risultato dell&#8217;espressione in un booleano.</li>
<li><em><strong>Alcuni metodi che richiedono le stringhe</strong></em>. Alcuni metodi e operatori, echo, print o l&#8217;operatore di concatenazione della stringa (.), richiedono che i loro operandi siano stringhe.</li>
</ul>
<h2>Conversioni di tipo esplicite</h2>
<p>Si tenta la conversione di tipo utilizzando il cosiddetto <em>type casting</em>: si fa precedere una variabile (o una qualsiasi espressione) da un tipo di dato racchiuso tra parentesi e php prova a convertirla.</p>
<ul>
<li><strong>(float), (double), (real)</strong> Converte in un numero a virgola mobile.</li>
<li><strong>(int), (integer)</strong> Converte in un intero.</li>
<li><strong>(string)</strong> Converte in una stringa di testo.</li>
<li><strong>(bool), (boolean)</strong> Converte in un valore booleano.</li>
<li><strong>(array)</strong> Converte in un array.</li>
<li><strong>(object)</strong> Converte in un oggetto.</li>
</ul>
<pre class="brush: php; title: ; notranslate">
&lt;?php
    $strQta = $_POST['qtaDesiderata'];
    $strQta = (int)$strQta;
?&gt;
</pre>
<h2>Conversioni di tipo specifiche</h2>
<h3>Conversione in interi</h3>
<p>E&#8217; possibile convertire esplicitamente i valori in interi utilizzando anche la funzione <span style="text-decoration: underline;">intval</span>. Quando si convertono i valori a virgola mobile in interi, php tronca la parte decimale. Quando si converte una stringa in un intero, php analizza la stringa un carattere alla volta finché trova un carattere che non è una cifra; il mancato parsing di un numero decimale valido restituisce il valore 0.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
    echo (int)&quot;123&quot;;  //visualizza 123
    echo (int)&quot;+456&quot;;  // 456
    echo (int)&quot;55e2&quot;;  // 55 - il parsing si ferma alla e
    echo (int)&quot;3 cani&quot;; // 3 - il parsing si ferma allo spazio
    echo (int)&quot;tre cani&quot;; // 0 - non interpretati num scritti in lettere
    echo (int)&quot;-4321&quot;; // -4321
?&gt;
</pre>
<p>Quando si convertirà da un booleano in un intero, FALSE restituirà 0 mentre TRUE restituirà 1. La conversione da array, oggetti o risorse in interi è indefinita e non dovrebbe essere eseguita. Il valore NULL è convertito sempre nel valore intero 0.</p>
<h3>Conversione in numeri in virgola mobile</h3>
<p>Le varibili e le espressioni possono essere convertite nel tipo a virgola mobile anche chiamando la funzione <span style="text-decoration: underline;">floatval</span>.</p>
<p>Un intero convertito in numero a virgola mobile potrebbe non essere identico al valore intero originale ( 10000 generi un valore a virgola mobile 9999.9999999 o anche 10000.000001). Non si dovrebbe mai fare affidamento su confronti con valori a virgola mobile. Quando si convertono le stringhe, qualsiasi stringa numerica contenente un decimale (.) o la lettera e può essere convertita in un valore a virgola mobile.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
    $f1 = (float)&quot;+123&quot;;  // 123.0
    $f2 = (float)&quot;-123&quot;;  // -123.0
    $f3 = (float)&quot;123.456&quot;;  // 123.456
    $f4 = (float)&quot;1.23456e2&quot;;  // 123.456
    $f5 = (float)&quot;1.234e-2&quot;;  // 0.01234
    $f6 = (float)&quot;1000000000000&quot;;  //1e12 (mille miliardi)
?&gt;
</pre>
<p>Per il resto avviene come nella conversione in interi, in più specificata la parte decimale.</p>
<h3>Conversione in stringhe</h3>
<p>E&#8217; possibie convertire le variabili in stringhe chiamando la funzione <span style="text-decoration: underline;">strval</span> o racchiudendole tra virgolette doppie.</p>
<p>Gli interi e i valori a virgola mobile sono convertiti in stringhe che rappresentano valori numerici. I valori booleani sono convertiti trasformando il valore TRUE nella stringa &#8220;1&#8243;, mentre FALSE nella stringa vuota (&#8220;&#8221;). Gli array sono sempre convertiti nel valore della stringa &#8220;Array&#8221; e gli oggetti nel valore &#8220;Object&#8221;. Le risorse sono convertite in una stringa come &#8220;Resource id #X&#8221; in cui X è un identificatore numerico univoco, utilizzato da php per identificare la risorsa. NULL viene convertito nella stringa vuota (&#8220;&#8221;).</p>
<h3>Conversione in array</h3>
<p>E&#8217; possibile convertire una variabile o un&#8217;espressione in un array tramite anche la funzione <span style="text-decoration: underline;">array</span>, la stessa utilizzata per creare un nuovo array.</p>
<p>Gli interi, i numeri a virgola mobile, le stringhe, i valori booleani e le risorse sono convertite creando un array con un unico elemento (con indice pari a 0), ossia il valore della variabile o dell&#8217;espressione. Gli oggetti vengono convertiti creando un array con le chiavi rappresentate dai nomi delle variabili membro dell&#8217;oggetto e con i valori costituiti dal valore delle variabili.</p>
<h2>Funzioni utili per la conversione di tipo</h2>
<h3>is_type</h3>
<p>Tutte queste funzioni restituiscono un valore booleano che indica se il valore specificato è o non è del tipo richiesto:</p>
<pre>is_integer, is_float, is_numeric (restituisce TRUE se l'argomento è un numero a virgola mobile, un intero o una stringa numerica), is_string, is_bool, is_array, is_object, is_null</pre>
<h3>gettype</h3>
<p>Segnala di quale tipo php considera attualmente una variabile o un&#8217;espressione; restituisce:</p>
<p>&#8220;boolean&#8221;, &#8220;integer&#8221;, &#8220;double&#8221;, &#8220;string&#8221;, &#8220;array&#8221;, &#8220;object&#8221;, &#8220;resource&#8221;, &#8220;NULL&#8221;, &#8220;unknown type&#8221;.</p>
<h3>settype</h3>
<p>Questa funzione richiede di specificare due argomenti: la variabile da convertire e il tipo nel quale deve essere convertita, espresso come una stringa. Restituisce un valore booleano che indica se la conversione è avvenuta con successo o meno.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
    $var = 234.234;
    settype($var, &quot;string&quot;);
    //ora $var hai il valore &quot;234.234&quot;, del tipo stringa
?&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.mainickweb.com/conversioni-tra-tipi-di-dati/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debug primitivo di applicazioni PHP</title>
		<link>http://www.mainickweb.com/debug-primitivo-di-applicazioni-php/</link>
		<comments>http://www.mainickweb.com/debug-primitivo-di-applicazioni-php/#comments</comments>
		<pubDate>Fri, 07 Nov 2008 12:30:15 +0000</pubDate>
		<dc:creator>MaiNick</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[debug php]]></category>
		<category><![CDATA[echo]]></category>
		<category><![CDATA[print_r]]></category>
		<category><![CDATA[stream output]]></category>
		<category><![CDATA[var_dump]]></category>
		<category><![CDATA[var_export]]></category>

		<guid isPermaLink="false">http://www.mainickweb.com/?p=204</guid>
		<description><![CDATA[Se vi trovate alla ricerca di errori in una pagina PHP, è possibile senza alcun IDE utilizzare queste semplici funzioni di PHP. echo Mostrare il testo all&#8217;utente; quindi anche variabili. N.B. echo non è una funzione PHP, ma è un costrutto, per questo non richede l&#8217;uso di parentesi tonde. var_dump La funzione var_dump mostra il [...]]]></description>
			<content:encoded><![CDATA[<p>Se vi trovate alla ricerca di <strong>errori in una pagina PHP</strong>, è possibile senza alcun IDE utilizzare queste semplici funzioni di PHP.</p>
<h2>echo</h2>
<p>Mostrare il testo all&#8217;utente; quindi anche variabili.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php echo &quot;HELLO WORLD&quot;; ?&gt;
</pre>
<p>N.B. echo non è una funzione PHP, ma è un costrutto, per questo non richede l&#8217;uso di parentesi tonde.</p>
<h2>var_dump</h2>
<p>La funzione <strong>var_dump</strong> mostra il tipo e il valore di una variabile nello stream dell&#8217;output (in realtà è possibile assegnarvi più di una variabile: la funzione elabora il risultato di qualsiasi espressione PHP valida). Nel caso delle stringhe, var_dump restituisce anche il numero di caratteri che compongono la stringa:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
    $randomNum = array(5, 3, 6, 4, 2, 1);
    var_dump($randomNum);
?&gt;
</pre>
<p>Il codice precedente genera in un browser web il seguente output:</p>
<pre class="brush: php; title: ; notranslate">
array(6) { [0]=&amp;gt; int(5) [1]=&amp;gt; int(3) [2]=&amp;gt; int(6)
               [3]=&amp;gt; int(4) [4]=&amp;gt; int(2) [5]=&amp;gt; int(1) }
</pre>
<h2>print_r</h2>
<p>La funzione <strong>print_r</strong> è simile a var_dump, ma cerca di rendere leggibile l&#8217;output agli utenti. print_r permette anche di specificare un valore facoltativo (chiamato parametro di una funzione) che indica alla funzione di restituire i risultati in una stringa e non di mostrarli nello stream di output.</p>
<p>L&#8217;output particolarmente leggibile generato da questa funzione è utile soprattutto per oggetti e array.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
    $drinks = array(&quot;Coffee&quot;, &quot;Caf&amp;eacute; au Lait&quot;, &quot;Mocha&quot;, &quot;Espresso&quot;, &quot;Americano&quot;, &quot;Latte&quot;);
    print_r($drinks);
?&gt;
</pre>
<p>Lo script precedente mostra il seguente output in un browser web:</p>
<pre class="brush: php; title: ; notranslate">
Array ([0] =&amp;gt; Coffee [1] =&amp;gt; Caf&amp;eacute; [2] =&amp;gt; Mocha
         [3] =&amp;gt; Espresso [4] =&amp;gt; Americano [5] =&amp;gt; Latte )
</pre>
<h2>var_export</h2>
<p>L&#8217;ultimo di questo gruppo di funzioni utili per la visualizzazione delle variabili e del loro contenuto è la funzione <strong>var_export</strong>, anch&#8217;essa molto simile a var_dump, tranne per il fatto che l&#8217;output è costituito da una rappresentazione valida di codice PHP dei valori contenuti nelle variabili fornite come parametro.</p>
<p>Per esempio, il seguente script:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
    $arr = array(1, 2, 3, 4);
    var_export($arr);
?&gt;
</pre>
<p>produce il seguente output (formattato per una lettura più semplice):</p>
<pre class="brush: php; title: ; notranslate">
array (
    0 =&amp;gt; 1,
    1 =&amp;gt; 2,
    2 =&amp;gt; 3,
    3 =&amp;gt; 4
)
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.mainickweb.com/debug-primitivo-di-applicazioni-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

