<?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"
	>

<channel>
	<title>Programmazione Web</title>
	<atom:link href="http://www.programmazione-web.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.programmazione-web.com</link>
	<description>il Blog open degli sviluppatori del web!</description>
	<pubDate>Tue, 02 Sep 2008 13:02:32 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.1</generator>
	<language>en</language>
			<item>
		<title>Google Chrome il browser di casa BigG</title>
		<link>http://www.programmazione-web.com/google-chrome-il-browser-opensource-di-google.php</link>
		<comments>http://www.programmazione-web.com/google-chrome-il-browser-opensource-di-google.php#comments</comments>
		<pubDate>Tue, 02 Sep 2008 13:02:32 +0000</pubDate>
		<dc:creator>neryo</dc:creator>
		
		<category><![CDATA[Browser]]></category>

		<category><![CDATA[News dal web]]></category>

		<category><![CDATA[Varie]]></category>

		<category><![CDATA[browser web]]></category>

		<category><![CDATA[google browser]]></category>

		<category><![CDATA[google chrome]]></category>

		<category><![CDATA[navigare il web]]></category>

		<guid isPermaLink="false">http://www.programmazione-web.com/?p=71</guid>
		<description><![CDATA[E' stato annunciato oggi sul blog ufficiale di google l'uscita imminente del nuovo browser opensource denominato Chrome che andrà a contrastare il monopolio indiscusso di microsoft IE]]></description>
			<content:encoded><![CDATA[<p>E&#8217; stato annunciato oggi sul blog ufficiale di google l&#8217;uscita imminente del nuovo browser opensource denominato Chrome che andrà a contrastare il monopolio indiscusso di microsoft IE, che regna sovrano al 74% lasciando poco spazio all&#8217;ottimo Firefox. Il nuovo browser che utilizza il motore di Webkit, come tutti i prodotti di google sarà lanciato in versione beta e da quello che si può vedere dagli <a title="Google chrome " href="http://www.google.com/googlebooks/chrome/" target="_blank">screenshot</a> sembrerebbe molto semplice ed intuitivo e dotato di un menu a tab. Dal punto di vista tecnico invece ha in grembo un sistema di gestione della memoria più efficiente e stabile, grazie alla generazione di un processo indipendente per ogni tab aperto, che evita il crash dell&#8217;applicazione se un tab rimane bloccato per colpa di un plugin. Inoltre a detta dei tecnici di google è molto più veloce perchè grazie al motore javascript denominato V8, riscritto da zero, sono riusciti a ottimizzare al meglio la gestione delle classi e del garbage collection, senza ovviamente tralasciare gli aspetti di sicurezza e gli standard web..</p>
<p><strong>Riferimenti:</strong><a title="Google chrome PI" href="http://punto-informatico.it/2390562/PI/News/google-chrome-browser-bigg.aspx " target="_blank"><br />
http://punto-informatico.it/2390562/PI/News/google-chrome-browser-bigg.aspx</a><a title="Google chrome " href="http://www.google.com/googlebooks/chrome/" target="_blank"><br />
http://www.google.com/googlebooks/chrome/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.programmazione-web.com/google-chrome-il-browser-opensource-di-google.php/feed</wfw:commentRss>
		</item>
		<item>
		<title>PhpCodeWizard e fast-deployment</title>
		<link>http://www.programmazione-web.com/phpcodewizard-e-fast-deployment.php</link>
		<comments>http://www.programmazione-web.com/phpcodewizard-e-fast-deployment.php#comments</comments>
		<pubDate>Sun, 10 Aug 2008 15:19:22 +0000</pubDate>
		<dc:creator>alamorgese</dc:creator>
		
		<category><![CDATA[Applicazioni]]></category>

		<category><![CDATA[Framework]]></category>

		<category><![CDATA[Open-source]]></category>

		<category><![CDATA[Programmare Php]]></category>

		<category><![CDATA[RAD]]></category>

		<category><![CDATA[Sviluppo applicazioni]]></category>

		<guid isPermaLink="false">http://www.programmazione-web.com/?p=70</guid>
		<description><![CDATA[E&#8217; da qualche anno ormai che abbondano in rete sigle come ORM ed MVC (Model - View - Controller), molti framework per lo sviluppo RAD come Codeigniter, RAILS ecc&#8230; ne fanno largo uso. Tali tecnologie agevolano notevolmente il lavoro dei programmatori semplificando lo sviluppo e la Creazione di applicazioni Web. Per utilizzare tali framework occorre un requisito fondamentale; la [...]]]></description>
			<content:encoded><![CDATA[<p>E&#8217; da qualche anno ormai che abbondano in rete sigle come ORM ed MVC (Model - View - Controller), molti framework per lo sviluppo RAD come Codeigniter, RAILS ecc&#8230; ne fanno largo uso. Tali tecnologie agevolano notevolmente il lavoro dei programmatori semplificando lo sviluppo e la Creazione di applicazioni Web. Per utilizzare tali framework occorre un requisito fondamentale; la conoscenza di un linguaggio di programmazione. PhpCodeWizard è l&#8217;unico framework esistente, che permette a programmatori e non, di impiantare un&#8217;applicazione web da zero in soli 5 passaggi, facendoci risparmiare così tempo e denaro. Con PhpCodeWizard ogni progetto creato può essere modificato e gestito direttamente via web senza dover ogni volta scaricare gli script aggiornati. In sostanza PhpCodeWizard gestisce i dati come i CMS gestiscono i contenuti, cioè via web e senza mettere mano al codice. Il risultato ottenuto è tutt&#8217;altro che banale, tenuto conto che l&#8217;applicazione generata e da considerare già finita.</p>
<p>Home Page: <a href="http://www.phpcodewizard.it">www.phpcodewizard.it</a></p>
<p> </p>
<p> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.programmazione-web.com/phpcodewizard-e-fast-deployment.php/feed</wfw:commentRss>
		</item>
		<item>
		<title>Progettiamo il software o programmiamo e basta?</title>
		<link>http://www.programmazione-web.com/progettare-software-o-programmare-progettando.php</link>
		<comments>http://www.programmazione-web.com/progettare-software-o-programmare-progettando.php#comments</comments>
		<pubDate>Tue, 05 Aug 2008 20:52:42 +0000</pubDate>
		<dc:creator>neryo</dc:creator>
		
		<category><![CDATA[Applicazioni]]></category>

		<category><![CDATA[Design pattern]]></category>

		<category><![CDATA[RAD]]></category>

		<category><![CDATA[Sviluppo applicazioni]]></category>

		<category><![CDATA[ciclo di vita del software]]></category>

		<category><![CDATA[linguaggi di modellazione]]></category>

		<category><![CDATA[progettare applicazioni]]></category>

		<category><![CDATA[progettare software]]></category>

		<category><![CDATA[programmazione e sviluppo]]></category>

		<category><![CDATA[sviluppo software]]></category>

		<guid isPermaLink="false">http://www.programmazione-web.com/?p=69</guid>
		<description><![CDATA[Spesso noi programmatori siamo costretti a lavorare in condizioni esasperate da tempistiche troppo stringenti, richieste e specifiche date all'ultimo minuto e margini di brainstorming ridicoli. Un software ben progettato e' piu' stabile e architetturalmente espandibile, mantenibile e il costo finale sara' inferiore.. quindi perche' non vogliamo attenerci a queste semplice regole?]]></description>
			<content:encoded><![CDATA[<p>Spesso noi programmatori siamo costretti a lavorare in condizioni esasperate da tempistiche troppo stringenti, richieste e specifiche date all&#8217;ultimo minuto e margini di brainstorming ridicoli.</p>
<p>Questo e&#8217; quello che succede in molte aziende dove spesso i project manager (cosi&#8217; amano definirsi), che in alcuni casi non hanno neanche mai seriamente progettato e sviluppato applicazioni, pretendono di vedere i risultati in tempi molto brevi.. magari preferiscono vedere la bozza del software semi funzionante, anche se concepita male, piuttosto che dare agli analisti/sviluppatori tempi adeguati di progettazione e analisi che migliorerebbero inevitabilmente la qualita&#8217; e la stabilita&#8217; finale dei software prodotti.</p>
<p>E&#8217; chiaro a tutti noi che se vengono fornite specifiche complete e precise, e c&#8217;e&#8217; il tempo di progettare l&#8217;intero <a title="Ciclo di vita del software" href="http://it.wikipedia.org/wiki/Ciclo_di_vita_del_software" target="_blank">ciclo di vita del software</a>, utilizzando pattern validi e magari linguaggi di modellazione, lo sviluppo e la manutenzione del codice sarebbe molto piu&#8217; semplice.  Anche uno sviluppatore meno esperto, con queste premesse, riuscirebbe a cimentarsi senza particolari problemi; ma purtroppo non e&#8217; sempre cosi&#8217; e si preferisce programmare e basta, progettare mentre si programma ed inevitabilmente nascono software che non stanno in piedi.</p>
<p>Sara&#8217; la senzazione di risparmio? Sara&#8217; che meglio un uovo oggi che una gallina domani? mah..</p>
<p>Progettare software e&#8217; un investimento, se si vuole fare le cose di fretta e senza riflettere si finisce per buttare via soldi e tempo, oltre a creare un prodotto di scarsa qualita&#8217;; poi noi ci troveremo a mettere continuamente mano a progetti pieni di toppe e ripieghi che per sistemare un bug impieghiamo giornate di lavoro!</p>
<p>Un software ben progettato e&#8217; piu&#8217; stabile e architetturalmente espandibile, mantenibile e il costo finale sara&#8217; inferiore.. quindi perche&#8217; non vogliamo attenerci a queste semplice regole?</p>
<p><!-- message --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.programmazione-web.com/progettare-software-o-programmare-progettando.php/feed</wfw:commentRss>
		</item>
		<item>
		<title>&#8220;Professional Codeigniter&#8221; il nuovo libro per sviluppare con PHP</title>
		<link>http://www.programmazione-web.com/libro-professional-codeigniter-framework-mvc.php</link>
		<comments>http://www.programmazione-web.com/libro-professional-codeigniter-framework-mvc.php#comments</comments>
		<pubDate>Tue, 29 Jul 2008 22:51:41 +0000</pubDate>
		<dc:creator>neryo</dc:creator>
		
		<category><![CDATA[Codeigniter]]></category>

		<category><![CDATA[Framework]]></category>

		<category><![CDATA[News dal web]]></category>

		<category><![CDATA[Programmare Php]]></category>

		<category><![CDATA[RAD]]></category>

		<category><![CDATA[Sviluppo applicazioni]]></category>

		<category><![CDATA[codeigniter book]]></category>

		<category><![CDATA[codeigniter libro]]></category>

		<category><![CDATA[codeigniter wrox]]></category>

		<category><![CDATA[MVC approach]]></category>

		<category><![CDATA[pattern MVC]]></category>

		<category><![CDATA[professional codeigniter]]></category>

		<guid isPermaLink="false">http://www.programmazione-web.com/?p=64</guid>
		<description><![CDATA[Libro Wrox dedicato allo sviluppo con il framework php MVC Codeigniter, framework MVC, framework PHP RAD. Professional Codeigniter book Wrox libro programmazione php per gli sviluppatori web.]]></description>
			<content:encoded><![CDATA[<p><strong>&#8220;Professional Codeigniter&#8221; il nuovo libro per sviluppare con PHP in MVC</strong></p>
<p>Dopo l&#8217;uscita dello scorso anno del libro &#8220;CodeIgniter for Rapid PHP Application Development” (pubblicato da <a title="Packt publishing" href="http://www.packtpub.com/" target="_blank">PAKT publishing</a>), nel giugno 2008 la nota casa editrice Wrox press pubblica una nuova guida di 336 pagine completamente dedicata al &#8220;nostro&#8221; framework php Codeigniter. Il libro e&#8217; stato scritto da Thomas Myer e si intitola <a href="http://www.ibs.it/book/9780470282458/myer-thomas/professional-codeigniter.html" target="_blank">Professional Codeigniter</a><strong> </strong>ed e&#8217; acquistabile e reperibile dall&#8217;italia in pochi giorni comodamente presso <a title="Internet books shop" href="http://www.ibs.it/" target="_blank">IBS</a>(Internet book shop).</p>
<p><a href="http://www.programmazione-web.com/wp-content/uploads/2008/07/codeigniter_book.jpg"><img class="alignnone size-medium wp-image-68" title="codeigniter_book" src="http://www.programmazione-web.com/wp-content/uploads/2008/07/codeigniter_book-239x300.jpg" alt="" width="239" height="300" /></a></p>
<p>Il nuovo libro in inglese &#8220;<a title="Professional Codeigniter by Wrox" href="http://www.wrox.com/WileyCDA/WroxTitle/productCd-0470282452.html" target="_blank">Professional Codeigniter</a>&#8221; conterra&#8217; tutte le informazioni e i tutorial necessari agli sviluppatori php per apprendere e implementare applicazioni Rails-like senza dover imparare nuovi linguaggi. Codeigniter infatti utilizza una metodologia di sviluppo che usa il pattern MVC (Model view controller) molto utilizzato ed apprezzato dagli programmatori professionisti. Nel libro verra&#8217; fatta una panoramica sul pattern MVC, sulle metodologie di sviluppo e verranno creati diversi esempi di applicazioni come CMS, blog e forum utilizzando Codeigniter e conterra&#8217; le informazioni necessarie a risolvere le problematiche che si incontreranno nello sviluppo di ogni giorno.</p>
<p><span class="tcorpotesto">Nel libro ci saranno i seguenti argomenti:</span></p>
<ul>
<li><span class="tcorpotesto">agile methodologies and approaches</span></li>
<li><span class="tcorpotesto">MVC approach</span></li>
<li><span class="tcorpotesto">helpers and libraries</span></li>
<li><span class="tcorpotesto">model and schema for products</span></li>
<li><span class="tcorpotesto">Ajax and Scriptaculous</span></li>
</ul>
<p>Se qualcuno di voi lo acquista e lo legge saremmo tutti felici di leggere i pareri nei commenti.. <img src='http://www.programmazione-web.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Io a breve molto probabilmente lo compro!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.programmazione-web.com/libro-professional-codeigniter-framework-mvc.php/feed</wfw:commentRss>
		</item>
		<item>
		<title>Installazione e configurazione di Apache, PHP e Oracle</title>
		<link>http://www.programmazione-web.com/apache-php-oracle-installazione-configurazione.php</link>
		<comments>http://www.programmazione-web.com/apache-php-oracle-installazione-configurazione.php#comments</comments>
		<pubDate>Mon, 07 Jul 2008 19:42:33 +0000</pubDate>
		<dc:creator>ssaravalli</dc:creator>
		
		<category><![CDATA[DBMS]]></category>

		<category><![CDATA[Linux]]></category>

		<category><![CDATA[Open-source]]></category>

		<category><![CDATA[Web Server]]></category>

		<category><![CDATA[dbms oracle]]></category>

		<category><![CDATA[debian oracle php apache2]]></category>

		<category><![CDATA[installazione apche php oracle]]></category>

		<category><![CDATA[installazione oracle su linux]]></category>

		<category><![CDATA[linux apache php oracle]]></category>

		<category><![CDATA[linux web server]]></category>

		<category><![CDATA[oracle linux web server]]></category>

		<category><![CDATA[web server oracle]]></category>

		<guid isPermaLink="false">http://www.programmazione-web.com/?p=63</guid>
		<description><![CDATA[Questa guida nasce allo scopo di realizzare un'alternativa alla classica architettura LAMP (Linux, Apache, MySQL, PHP) in cui il DBMS MySQL viene sostituito da Oracle Database Server 10g in versione XE (Express Edition), liberamente scaricabile ed utilizzabile da chiunque.]]></description>
			<content:encoded><![CDATA[<h3>Introduzione</h3>
<p>In genere si sente spesso parlare di LAMP (Linux, Apache, MySQL e PHP), con riferimento alla famosa e diffusa piattaforma open per lo sviluppo di applicazioni web based (per informazioni complete e dettagliate sull&#8217;impostazione di un sistema LAMP vi invito a leggere la guida <a title="Linux, Apache, MySQL e PHP" href="http://guide.debianizzati.org/index.php/LAMP:_Linux%2C_Apache%2C_MySQL_e_PHP">LAMP: Linux, Apache, MySQL e PHP</a>). In questa guida, invece, vorrei proporvi una variante di tale piattaforma in cui il DBMS MySQL viene sostituito da Oracle Server 10g Express Edition, una versione free del più blasonato DBMS commerciale, disponibile anche per il pinguino, seppur con alcune limitazioni di cui parlerò in seguito. In questa guida si focalizzerà l&#8217;attenzione sull&#8217;installazione e la configurazione di <a class="external text" title="http://httpd.apache.org/" rel="nofollow" href="http://httpd.apache.org/">Apache</a>, <a class="external text" title="http://www.php.net/" rel="nofollow" href="http://www.php.net/">PHP</a> ed <a class="external text" title="http://www.oracle.com/technology/software/products/database/xe/index.html" rel="nofollow" href="http://www.oracle.com/technology/software/products/database/xe/index.html">Oracle Database Server 10g XE</a> e sulle modalità di interazione tra questi software, in modo tale da disporre di una piattaforma completa per lo sviluppo di applicazione web-based. Tutti i passaggi indicati in questa guida sono stati eseguiti su un sistema Debian GNU/Linux 4.0 R3 Netinst. Buona lettura!</p>
<h3>Oracle Database Server 10g XE</h3>
<h3>Installazione</h3>
<p>Sul sito di Oracle Corp., previa procedura di registrazione, sono disponibili i pacchetti per Debian, Ubuntu, Suse Novell, Red Hat/Fedora e Mandriva di Oracle Database Server 10g XE con una serie di limitazioni rispetto alla versione a pagamento:</p>
<ul>
<li> se Oracle Database Server 10g XE viene installato su un computer con più di una CPU (incluse anche le CPU dual core), esso utilizzerà esclusivamente le risorse di una sola CPU</li>
<li> su un singolo computer può essere effettuata l’installazione di una sola copia di Oracle Database Server 10g XE; in aggiunta, gli utenti possono far girare una sola istanza del database Oracle su ciascun computer. Quest’ultima limitazione può comunque essere aggirata in quanto, anche sulla stessa installazione di Oracle Database Server 10g XE possono convivere più schemi, ciascuno dei quali contenente le proprie tabelle. Di fatto, è come se sulla stessa macchina fossero presenti più database simultaneamente</li>
<li> la quantità massima di dati contenuta in un database Oracle Database Server 10g XE non può superare i 4 gigabytes di spazio disco, tuttavia se i dati degli utenti dovessero superare tale quota, il sistema invierebbe l’errore ORA-12592</li>
<li> la quantità massima di memoria RAM che Oracle Database Server 10g XE utilizza non può eccedere un gigabyte, anche se ne è disponibile una quantità maggiore. La quantità di memoria totale utilizzata dal server Oracle viene ricavata come somma della System Global Area (SGA) e della Program Global Area (PGA) aggregata</li>
<li> il protocollo HTTPS (Secure HTTP) non è supportato nativamente dal listener HTTP presente in Oracle 10g XE, quindi è necessario far uso di un web server, come Apache, che supporti tale protocollo</li>
</ul>
<p>Limitazioni a parte, Oracle Database Server 10g XE resta, a mio avviso, un buon prodotto utilizzato, tra l&#8217;altro, anche dalla <a href="http://www.oracle.com/technologies/virtualization/index.html">recente soluzione di virtualizzazione</a> proposta dalla stessa Oracle.Una volta effettuato il download del pacchetto, l&#8217;installazione di Oracle Database Server 10g XE si riduce al seguente comando:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re3"># dpkg –i oracle-xe<span class="nu0">-10.2</span><span class="nu0">.0</span><span class="nu0">.1</span><span class="nu0">-1.0</span>.deb</span></div>
</li>
</ol>
</div>
<p>L&#8217;installazione di Oracle Database Server 10g XE richiede la presenza di alcuni pacchetti che vanno installati a parte, se non presenti, con il seguente comando:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re3"># apt-get <span class="kw2">install</span> <span class="kw2">bc</span> libaio1 libxml2 libxml2-dev libxml2-utils python-libxml2</span></div>
</li>
</ol>
</div>
<h3><span class="mw-headline">Configurazione</span></h3>
<p>Al termine dell&#8217;installazione, bisogna configurare opportunamente Oracle Database Server 10g XE lanciando lo script <strong>oracle-xe</strong> con l&#8217;opzione <em>“configure”</em>. Tale script si trova nella directory <em>/etc/init.d/</em> e va eseguito sempre con i privilegi di root. Lo script in questione richiede interattivamente all&#8217;utente di fornire una serie di informazioni per eseguire Oracle Database Server 10g XE tra cui:</p>
<ul>
<li> il numero di porta (per default la 8080) tramite cui è possibile raggiungere l’interfaccia web (una sorta di Enterprise Manager, ma depotenziato) per la configurazione di Oracle all’url <a class="external free" title="http://127.0.0.1:8080/apex" rel="nofollow" href="http://127.0.0.1:8080/apex">http://127.0.0.1:8080/apex</a></li>
<li> il numero di porta (per default la 1521) su cui si mette in attesa il listener di Oracle Server, ossia un demone preposto a ricevere e servire le richieste di connessione al server Oracle, appunto. Se si dispone di un firewall potrebbe essere necessario configurarlo in modo tale da lasciare passare il traffico sulla porta 1521 o, diversamente, è possibile indicare allo script di configurazione di Oracle Server 10g XE di mettere il listener in ascolto su una porta differente</li>
<li> quando far partire l’istanza di Oracle Database Server 10g XE; si può decidere se schedulare la partenza di Oracle al boot del sistema, oppure se eseguirla manualmente di volta in volta (io ho optato per la prima opzione, per comodità, ma è pur sempre possibile realizzare uno script bash per gestire l&#8217;avvio e l&#8217;arresto di Oracle in modo manuale).</li>
</ul>
<h3>Impostazione delle variabili d’ambiente di Oracle Server 10g XE</h3>
<p>Al termine dell&#8217;installazione di Oracle Server 10g XE è necessario settare le variabili d&#8217;ambiente indispensabili per il funzionamento di tool come, ad esempio, SQL*Plus, utilizzato per le classiche operazioni di gestione del database come inserimenti, modifiche, cancellazioni, consultazioni di dati e così via. Per procedere in questo senso, è sufficiente lanciare uno script di configurazione delle variabili d’ambiente di Oracle Database Server 10g XE, disponibile in due distinte versioni dipendentemente dalla shell in uso. I due script si trovano nella directory <em>/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/</em> e sono:</p>
<ul>
<li> oracle_env.sh (valido anche per le shell Bourne e Korn)</li>
<li> oracle_env.csh (valido anche per le shell C e tsh)</li>
</ul>
<p>Lo script <em>oracle_env.sh</em>, si occupa di impostare una serie di variabili d&#8217;ambiente tra cui:</p>
<ul>
<li> ORACLE_HOME: il path dell’installazione di Oracle 10g XE</li>
<li> ORACLE_SID: il nome del database (XE)</li>
<li> NLS_LANG: il character set, rilevato in base alle impostazioni in uso sul sistema operativo, che verrà utilizzato per la memorizzazione dei dati nel database</li>
<li> PATH: il percorso che porta alla directory contenente gli eseguibili di Oracle Server 10g XE</li>
<li> LD_LIBRARY_PATH: il percorso della directory contenente le librerie principali per Oracle Server 10g XE</li>
</ul>
<p><a name="Impostazione_delle_variabili_d.E2.80.99ambiente_di_Oracle_Server_10g_XE"></a></p>
<blockquote><p><strong>ATTENZIONE</strong>: Va ricordato che riavviando il computer, i settaggi impostati con lo script <em>oracle_env.sh</em> vengono persi, perciò è buona norma inserire la stringa:</p>
<p><em>/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/oracle_env.sh</em></p>
<p>all’interno del file <em>.bash_profile</em>; inoltre, per poter mantenere le stesse impostazioni all’apertura di ogni nuova shell durante la sessione corrente, è conveniente aggiungere l&#8217;istruzione precedente anche all’interno del file <em>.bashrc</em> (sia per il proprio utente, sia per l&#8217;utente root).</p></blockquote>
<p>Bene, l&#8217;installazione e la configurazione di Oracle Database Server 10g XE sono complete! Per assicurarsi che Oracle sia partito correttamente, è possibile lanciare il comando seguente di cui riporto anche un esempio di output:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re3"># /etc/init.d/oracle-xe status</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">LSNRCTL <span class="kw1">for</span> Linux: Version <span class="nu0">10.2</span><span class="nu0">.0</span><span class="nu0">.1</span><span class="nu0">.0</span> - Beta on <span class="nu0">14</span>-FEB<span class="nu0">-2007</span> <span class="nu0">10</span>:<span class="nu0">14</span>:<span class="nu0">01</span></div>
</li>
<li class="li1">
<div class="de1">Copyright <span class="br0">&#40;</span>c<span class="br0">&#41;</span> <span class="nu0">1991</span>, <span class="nu0">2005</span>, Oracle. All rights reserved.</div>
</li>
<li class="li2">
<div class="de2">Connecting to <span class="br0">&#40;</span><span class="re2">DESCRIPTION=</span><span class="br0">&#40;</span><span class="re2">ADDRESS=</span><span class="br0">&#40;</span><span class="re2">PROTOCOL=</span>TCP<span class="br0">&#41;</span><span class="br0">&#40;</span><span class="re2">HOST=</span>localhost<span class="br0">&#41;</span><span class="br0">&#40;</span><span class="re2">PORT=</span><span class="nu0">1521</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">STATUS of the LISTENER</div>
</li>
<li class="li1">
<div class="de1">————————</div>
</li>
<li class="li1">
<div class="de1">Alias LISTENER</div>
</li>
<li class="li1">
<div class="de1">Version TNSLSNR <span class="kw1">for</span> Linux: Version <span class="nu0">10.2</span><span class="nu0">.0</span><span class="nu0">.1</span><span class="nu0">.0</span> - Beta</div>
</li>
<li class="li2">
<div class="de2">Start Date <span class="nu0">14</span>-FEB<span class="nu0">-2007</span> <span class="nu0">10</span>:<span class="nu0">13</span>:<span class="nu0">44</span></div>
</li>
<li class="li1">
<div class="de1">Uptime <span class="nu0">0</span> days <span class="nu0">0</span> hr. <span class="nu0">0</span> min. <span class="nu0">17</span> sec</div>
</li>
<li class="li1">
<div class="de1">Trace Level off</div>
</li>
<li class="li1">
<div class="de1">Security ON: Local OS Authentication</div>
</li>
<li class="li1">
<div class="de1">SNMP OFF</div>
</li>
<li class="li2">
<div class="de2">Default Service XE</div>
</li>
<li class="li1">
<div class="de1">Listener Parameter File /usr/lib/oracle/xe/app/oracle/product/<span class="nu0">10.2</span><span class="nu0">.0</span>/server/network/admin/listener.ora</div>
</li>
<li class="li1">
<div class="de1">Listener Log File /usr/lib/oracle/xe/app/oracle/product/<span class="nu0">10.2</span><span class="nu0">.0</span>/server/network/log/listener.log</div>
</li>
<li class="li1">
<div class="de1">Listening Endpoints Summary…</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#40;</span><span class="re2">DESCRIPTION=</span><span class="br0">&#40;</span><span class="re2">ADDRESS=</span><span class="br0">&#40;</span><span class="re2">PROTOCOL=</span>tcp<span class="br0">&#41;</span><span class="br0">&#40;</span><span class="re2">HOST=</span>localhost<span class="br0">&#41;</span><span class="br0">&#40;</span><span class="re2">PORT=</span><span class="nu0">1521</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">Services Summary…</div>
</li>
<li class="li1">
<div class="de1">Service “PLSExtProc” has <span class="nu0">1</span> instance<span class="br0">&#40;</span>s<span class="br0">&#41;</span>.</div>
</li>
<li class="li1">
<div class="de1">Instance “PLSExtProc”, status UNKNOWN, has <span class="nu0">1</span> handler<span class="br0">&#40;</span>s<span class="br0">&#41;</span> <span class="kw1">for</span> this service…</div>
</li>
<li class="li1">
<div class="de1">The <span class="kw3">command</span> completed successfully</div>
</li>
</ol>
</div>
<p>Come si può notare dall&#8217;output dello script, il listener Oracle ha un&#8217;istanza attiva sulla porta 1521, come stabilito in fase di configurazione.</p>
<p><a name="Apache_e_PHP"></a></p>
<h3>Apache e PHP</h3>
<p>Il secondo passo consiste nell&#8217;installazione e configurazione di Apache e PHP con supporto al DBMS Oracle. È possibile installare il web server Apache e il linguaggio di scripting server side PHP tramite i pacchetti forniti dalla propria distribuzione, oppure ricompilare il tutto da sorgenti. La possibilità di compilare questi due software da sorgenti consente di scegliere autonomamente le opzioni di compilazione più adatte alle proprie necessità (ad esempio, nel caso di PHP, si può decidere di abilitare o meno il supporto per Oracle, oppure per MySQL, per LDAP, per la libreria di compressione zlib e così via).</p>
<h3>Installazione e configurazione di Apache</h3>
<p>I comandi seguenti consentono il download, la scompattazione e la compilazione del web server Apache sulla propria Linux box (ovviamente il numero di versione dei software indicati fa riferimento al periodo in cui questa guida è stata scritta):</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">$ <span class="kw2">wget</span> -c http://apache.fis.uniroma2.it/httpd/httpd<span class="nu0">-2.2</span><span class="nu0">.3</span>.<span class="kw2">tar</span>.gz</div>
</li>
<li class="li1">
<div class="de1"><span class="re3"># <span class="kw2">tar</span> xzf httpd<span class="nu0">-2.2</span><span class="nu0">.3</span>.<span class="kw2">tar</span>.gz /usr/<span class="kw3">local</span>/src/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re3"># <span class="kw3">cd</span> /usr/<span class="kw3">local</span>/src/httpd<span class="nu0">-2.2</span><span class="nu0">.3</span>/</span></div>
</li>
<li class="li2">
<div class="de2"><span class="re3"># ./configure &#8211;<span class="re2">prefix=</span>/usr/<span class="kw3">local</span>/apache2/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re3"># <span class="kw2">make</span> &amp;amp;&amp;amp; <span class="kw2">make</span> install</span></div>
</li>
</ol>
</div>
<p>il parametro <em>&#8211;prefix</em> passato al comando <em>configure</em> richiede il path in cui verrà installato il web server Apache. Dalla documentazione del web server si legge che il percorso di default da indicare è /<em>usr/local/apache2/</em>. Le impostazioni del server web Apache risiedono nel file <em>httpd.conf</em> (che si trova nella directory <em>/usr/local/apache2/conf/</em> nel caso sia stata effettuata l&#8217;installazione da sorgenti); tale file può essere modificato, disponendo dei privilegi di root, con un qualsiasi editor di testi. Le direttive da impostare nel file httpd.conf per ottenere un funzionamento minimale del web server Apache sono:</p>
<ul>
<li> Listen: consente ad Apache di porsi in ascolto su un determinato indirizzo IP e/o porta</li>
<li> ServerName: il nome del server, o l&#8217;indirizzo IP e il numero di porta che il server utilizza per identificare se stesso</li>
<li> DocumentRoot: la directory contenente le pagine web delle proprie applicazioni. È anche possibile indicare un alias, o un link simbolico per puntare ad altre locazioni del filesystem.</li>
</ul>
<p>Una volta salvate le modifiche apportate al file httpd.conf, si può far partire Apache con il comando:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re3"># /usr/<span class="kw3">local</span>/apache2/bin/apachectl start</span></div>
</li>
</ol>
</div>
<p>quindi, puntando il proprio browser web all&#8217;indirizzo specificato anche con la direttiva <strong>ServerName</strong> precedentemente citata, si dovrebbe poter visualizzare la pagina di benvenuto di Apache.</p>
<h3><span class="mw-headline">Installazione e configurazione di PHP</span></h3>
<p>PHP è un linguaggio di scripting server side che consente di integrare il codice HTML al fine di realizzare pagine web dinamiche, ossia il cui contenuto varia in base alle azioni intraprese dagli utenti. Poichè lo scopo di questa guida è quello di realizzare un server web in grado di interagire con una base di dati Oracle, è necessario che PHP disponga del supporto per tale DBMS. Ancora una volta, per poter abilitare esclusivamente le funzionalità richieste di PHP, si è optato per la compilazione dei sorgenti di questo software.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">$ <span class="kw2">wget</span> -c http://it2.php.net/get/php5<span class="nu0">.1</span><span class="nu0">.6</span>.<span class="kw2">tar</span>.gz/from/it.php.net/mirror</div>
</li>
<li class="li1">
<div class="de1"><span class="re3"># <span class="kw2">tar</span> xzf php<span class="nu0">-5.1</span><span class="nu0">.6</span>.<span class="kw2">tar</span>.gz /usr/<span class="kw3">local</span>/src/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re3"># <span class="kw3">cd</span> /usr/<span class="kw3">local</span>/src/php5<span class="nu0">.1</span><span class="nu0">.6</span>/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="re3"># ./configure &#8211;<span class="re2">prefix=</span>/usr/<span class="kw3">local</span>/php \</span></div>
</li>
<li class="li1">
<div class="de1">&#8211;with-<span class="re2">apxs2=</span>/usr/<span class="kw3">local</span>/apache2/bin/apxs \</div>
</li>
<li class="li1">
<div class="de1">&#8211;with-config-file-<span class="re2">path=</span>/usr/<span class="kw3">local</span>/apache2/conf \</div>
</li>
<li class="li1">
<div class="de1">&#8211;with-<span class="re2">oci8=</span>/usr/lib/oracle/xe/app/oracle/product/<span class="nu0">10.2</span><span class="nu0">.0</span>/server \</div>
</li>
<li class="li1">
<div class="de1">&#8211;enable-sigchild \</div>
</li>
<li class="li2">
<div class="de2">&#8211;without-mysql</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re3"># <span class="kw2">make</span> &amp;amp;&amp;amp; <span class="kw2">make</span> install</span></div>
</li>
</ol>
</div>
<p>Come si può notare dal codice precedente, il comando <em>configure</em> è seguito da una serie di opzioni da attivare nella successiva fase di compilazione:</p>
<ul>
<li> &#8211;prefix: permette di indicare in quale directory installare PHP</li>
<li> &#8211;with-apxs2: indica che si vuole compilare PHP come un moulo condiviso di Apache</li>
<li> &#8211;with-config-file-path: indica il percorso dei file di configurazione di Apache</li>
<li> <strong>&#8211;with-oci8</strong>: abilita il supporto per il DBMS Oracle di cui è necessario indicare il path dell&#8217;installazione.</li>
<li> &#8211;enable-sigchild: abilita il gestore dei segnali proprio di PHP</li>
<li> &#8211;without-mysql: disabilita il supporto al DBMS MySQL, non necessario, visto che si vuole utilizzare Oracle Database Server</li>
</ul>
<p>Il parametro<em> &#8211;with-oci8</em> richiede di specificare il percorso, sul filesystem locale, dell&#8217;installazione di Oracle Database Server, se tale installazione è stata effettuata sullo stesso server fisico di Apache e PHP. Se, invece, web server e db server risiedono su due macchine distinte, come spesso accade, allora sulla macchina che funge da server web deve essere installato l&#8217;<a class="external text" title="http://www.oracle.com/technology/tech/oci/instantclient/index.html" rel="nofollow" href="http://www.oracle.com/technology/tech/oci/instantclient/index.html">Oracle Instant Client</a>. I passi da seguire per installare tale software sono molto semplici:</p>
<ul>
<li> Scaricare, dal link sopra indicato, i package <strong>Basic</strong> e <strong>SDK</strong></li>
<li> Scompattare i file scaricati in una directory a piacere (ad es. /usr/local/src/)</li>
</ul>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re3"># <span class="kw2">mkdir</span> /usr/<span class="kw3">local</span>/src/instantclient</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re3"># <span class="kw3">cd</span> /usr/<span class="kw3">local</span>/src/instantclient</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re3"># <span class="kw2">unzip</span> instantclient-basic-linux32<span class="nu0">-10.2</span><span class="nu0">.0</span><span class="nu0">.1</span><span class="nu0">-20050713</span>.zip</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re3"># <span class="kw2">unzip</span> instantclient-sdk-linux32<span class="nu0">-10.2</span><span class="nu0">.0</span><span class="nu0">.1</span><span class="nu0">-20050713</span>.zip</span></div>
</li>
</ol>
</div>
<ul>
<li> Creare un link simbolico alle librerie <em>libclntsh.so.10.1</em> e <em>libocci.so.10.1</em></li>
</ul>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">ln</span> -s libclntsh.so<span class="nu0">.10</span><span class="nu0">.1</span> libclntsh.so</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">ln</span> -s libocci.so<span class="nu0">.10</span><span class="nu0">.1</span> libocci.so</div>
</li>
</ol>
</div>
<p>La scompattazione dei due file precedenti crea una directory, contenente i files dell&#8217;Oracle Instant Client. Nel mio caso, tale directory si chiama <em>instantclient_11/</em>, ma il nome potrebbe differire, quindi <strong>ATTENZIONE</strong>. Il comando configure precedentemente lanciato per PHP va quindi modificato indicando, con la direttiva <em>&#8211;with-oci8</em>, il percorso in cui è stato installato l&#8217;Oracle Instant Client:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re3"># ./configure &#8211;<span class="re2">prefix=</span>/usr/<span class="kw3">local</span>/php \</span></div>
</li>
<li class="li1">
<div class="de1">&#8211;with-<span class="re2">apxs2=</span>/usr/<span class="kw3">local</span>/apache2/bin/apxs \</div>
</li>
<li class="li1">
<div class="de1">&#8211;with-config-file-<span class="re2">path=</span>/usr/<span class="kw3">local</span>/apache2/conf \</div>
</li>
<li class="li1">
<div class="de1">&#8211;with-<span class="re2">oci8=</span>instantclient,/usr/<span class="kw3">local</span>/src/instantclient/instantclient_11/ \</div>
</li>
<li class="li2">
<div class="de2">&#8211;enable-sigchild \</div>
</li>
<li class="li1">
<div class="de1">&#8211;without-mysql</div>
</li>
</ol>
</div>
<p>Per concludere l’installazione di PHP è sufficiente inserire il percorso <em>/usr/local/php/lib/php</em> all’interno del file <em>php.ini</em>, il quale deve essere successivamente copiato dalla directory dei sorgenti di PHP nella directory <em>/usr/local/lib</em> e in <em>/usr/local/apache2/conf/</em> (se Apache è stato compilato da sorgenti). Se la compilazione di PHP è andata a buon fine, nel file httpd.conf sarà stata aggiunta in automatico la seguente stringa:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">LoadModule php5_module modules/libphp5.so</div>
</li>
</ol>
</div>
<p>Questa riga indica che Apache ha caricato il modulo per il funzionamento delle pagine web contenenti codice PHP (nella versione 5), tuttavia, per far sì che i browser web interpretino correttamente il codice PHP, è necessario modificare nuovamente il file httpd.conf di configurazione del web server Apache aggiungendo le due righe seguenti all&#8217;interno della sezione <em><br />
<ifmodule mime_module></ifmodule></em></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt;ifmodule mime_module&gt;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#91;</span>&#8230;<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">AddType application/x-httpd-php .php .phtml</div>
</li>
<li class="li1">
<div class="de1">AddType application/x-httpd-php-<span class="kw3">source</span> .phps</div>
</li>
<li class="li2">
<div class="de2">&lt;/ifmodule&gt;</div>
</li>
</ol>
</div>
<p>Di default, PHP offre il supporto per il DBMS MySQL, mentre nel caso di questa guida esso è stato sostituito con il supporto ad Oracle. Questo richiede di modificare alcune direttive presenti nel file <em>php.ini</em> per rendere PHP aderente alla sintassi utilizzata da Oracle. In particolare, MySQL ed Oracle considerano il carattere apice(’) come delimitatore di stringhe, o di date. Se si deve memorizzare una stringa all’interno di una tabella e questa stringa contiene una o più occorrenze del carattere apice, entrambi i DBMS ritorneranno un errore a meno di non eseguire un escape di tale carattere jolly. Questa operazione si rende, ovviamente, necessaria anche per i dati che gli utenti inseriscono, ad esempio, tramite i form di un sito e che poi andranno inseriti all’interno di un database, ma con una importante differenza: MySQL effettua l’escape del carattere apice tramite il carattere backslash (\), mentre Oracle utilizza un ulteriore apice. PHP consente l’escape del carattere apice, se presente nei dati passati tramite GET, POST o persino cookie, per mezzo delle seguenti direttive contenute nel php.ini:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">; Magic quotes <span class="kw1">for</span> incoming GET/POST/Cookie data.</div>
</li>
<li class="li1">
<div class="de1">magic_quotes_gpc = Off</div>
</li>
<li class="li1">
<div class="de1">; Magic quotes <span class="kw1">for</span> runtime-generated data, e.g. data from SQL, from <span class="kw3">exec</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, etc.</div>
</li>
<li class="li1">
<div class="de1">magic_quotes_runtime = Off</div>
</li>
<li class="li2">
<div class="de2">; Use Sybase-style magic quotes <span class="br0">&#40;</span>escape <span class="st0">&#8216; with &#8216;</span><span class="st0">&#8216; instead of &#8216;</span><span class="br0">&#41;</span>.</div>
</li>
<li class="li1">
<div class="de1">magic_quotes_sybase = On</div>
</li>
</ol>
</div>
<p>Impostando <em>magic_quotes_gpc</em> e <em>magic_quotes_sybase</em> a “<strong>On</strong>” si ottiene l’escape del carattere apice alla maniera di Oracle, mentre se <em>magic_quotes_sybase</em> viene impostato a “<strong>Off</strong>” si ottiene l’escape alla maniera di MySQL.</p>
<p><a name="PEAR"></a></p>
<h3>PEAR</h3>
<p>PHP mette a disposizione delle funzioni che consentono la comunicazione con una base di dati, ma esse dipendono strettamente dal tipo di DBMS con cui le pagine web scritte in PHP devono interagire. Per questo motivo è necessario servirsi del framework <a class="external text" title="http://pear.php.net/" rel="nofollow" href="http://pear.php.net/">PEAR</a> (PHP Extension and Application Repository), ossia un repository di package con cui è possibile estendere le funzionalità del linguaggio PHP. In particolare, il <a class="external text" title="http://pear.php.net/package/MDB2" rel="nofollow" href="http://pear.php.net/package/MDB2">package MDB2</a>, fornisce un’API che si frappone tra PHP e il DBMS sottostante, permettendo di slegare un&#8217;applicazione web dal DBMS in uso. Il vantaggio è che se dovesse rendersi necessaria una migrazione del database verso un DBMS diverso da quello attuale non vi sarà l&#8217;obbligo di modificare tutte le funzioni che PHP utilizza per interagire con la base di dati, ma solo il protocollo di comunicazione utilizzato (oci8 per Oracle, oppure mysql per MySQL, ecc).</p>
<blockquote><p><strong>ATTENZIONE</strong>:  Attualmente, il package MDB2 è da considerarsi come standard per la connessione, mediante il framework PEAR, di un&#8217;applicazione web-based scritta in PHP con un DBMS sottostante. Tale package è andato a sostituire l&#8217;ormai obsoleto <a class="external text" title="http://pear.php.net/package/DB" rel="nofollow" href="http://pear.php.net/package/DB">package DB</a> che si sconsiglia di utilizzare.</p></blockquote>
<h3><span class="mw-headline">Configurazione di PEAR</span></h3>
<p>Conclusa la configurazione di PHP, è necessario passare a quella del framework PEAR aggiungendo i pacchetti necessari per la comunicazione con una base di dati gestita tramite Oracle. Le API messe a disposizione da PEAR potranno poi essere sfruttate nelle proprie pagine PHP per slegarsi dal DBMS in uso. L&#8217;aggiunta di un pacchetto in PEAR si esegue con il comando:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">pear <span class="kw2">install</span> <span class="br0">&#91;</span>nome_pacchetto<span class="br0">&#93;</span></div>
</li>
</ol>
</div>
<p>tramite cui si può installare un package prelevandolo direttamente dai repository di PEAR. Di seguito vengono indicati i comandi necessari per installare sia il package DB, sia MDB2: Per il package DB (obsoleto):</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re3"># ./pear <span class="kw2">install</span> DB</span></div>
</li>
</ol>
</div>
<p>Per il nuovo package MDB2, invece:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re3"># ./pear <span class="kw2">install</span> MDB2</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re3"># ./pear <span class="kw2">install</span> pear/MDB2#oci8</span></div>
</li>
</ol>
</div>
<p><strong>Nota Bene:</strong> è necessario ricordarsi di includere il file <em>MDB2.php</em>, oppure <em>DB.php</em>, a seconda del pacchetto installato, all&#8217;interno delle proprie pagine PHP per poter utilizzare le funzioni messe a disposizione da questo package per l&#8217;interazione con una base di dati Oracle. L&#8217;istruzione da utilizzare all&#8217;inizio del codice PHP è la seguente:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">require_once</span> <span class="br0">&#40;</span><span class="st0">&#8216;MDB2.php&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p><a name="Conclusioni"></a></p>
<h3>Conclusioni</h3>
<p>Bene, a questo punto disponiamo di un web server con Apache e PHP configurati per comunicare con una base di dati Oracle sottostante e il tutto in salsa open source!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.programmazione-web.com/apache-php-oracle-installazione-configurazione.php/feed</wfw:commentRss>
		</item>
		<item>
		<title>Codeigniter Redux Authentication: libreria per l&#8217;autenticazione</title>
		<link>http://www.programmazione-web.com/codeigniter-redux-authentication-libreria-per-lautenticazione.php</link>
		<comments>http://www.programmazione-web.com/codeigniter-redux-authentication-libreria-per-lautenticazione.php#comments</comments>
		<pubDate>Sat, 05 Jul 2008 14:24:06 +0000</pubDate>
		<dc:creator>neryo</dc:creator>
		
		<category><![CDATA[Applicazioni]]></category>

		<category><![CDATA[Codeigniter]]></category>

		<category><![CDATA[Framework]]></category>

		<category><![CDATA[Programmare Php]]></category>

		<category><![CDATA[RAD]]></category>

		<category><![CDATA[Sviluppo applicazioni]]></category>

		<category><![CDATA[autenticazione utenti]]></category>

		<category><![CDATA[libreria autenticazione]]></category>

		<category><![CDATA[libreria autenticazione redux]]></category>

		<category><![CDATA[libreria codeigniter]]></category>

		<category><![CDATA[redux autenticazione utenti]]></category>

		<category><![CDATA[Redux Authentication library]]></category>

		<category><![CDATA[user managment]]></category>

		<guid isPermaLink="false">http://www.programmazione-web.com/?p=60</guid>
		<description><![CDATA[Redux Authtentication library, libreria per il framework codeigniter, che implementa l'autenticazione in modo veloce e in piena sicurezza]]></description>
			<content:encoded><![CDATA[<p><strong>Codeigniter Redux Authentication: libreria per l&#8217;autenticazione</strong><br />
In questo caldissimo mese di luglio vi voglio presentare Redux Authtentication library, un pacchetto per l&#8217;autenticazione da utilizzare con il &#8220;nostro&#8221; amato framework php Codeigniter. Questa libreria ci consente di creare in modo facile e super veloce l&#8217;accesso protetto al backend dei nostri progetti e di avere una base solida su cui costruire e personalizzare la sicurezza della nostra applicazione web.</p>
<h3>Le features di questa libreria sono:</h3>
<ul>
<li>Registrazione degli utenti</li>
<li>Login e logout</li>
<li>Gestione perdita password</li>
<li>Gestione gruppi utenti</li>
<li>Sistema di Ban degli utenti</li>
<li>Focalizzata sulla sicurezza</li>
</ul>
<p>Come accennato, l&#8217;installazione di questa libreria per Codeigniter è molto semplice e viene fatta seguendo questi pochi step:</p>
<ul>
<li>Creare il database della nostra applicazione codeigniter oppure utilizzare il database esistente (se il progetto è già iniziato), ed importare il file<strong> install.sql </strong>(contenuto nel pacchetto) nel nostro database, contenente le tabelle per Redux.</li>
<li>All&#8217;interno del pacchetto della libreria Redux Authentication troveremo la cartella application in cui sono contenute altre due cartelle config/ e libraries/ in cui all&#8217;interno ci sono rispettivamente il file per la configurazione della libreria e in libraries il file contenente la classe con i metodi Redux. Chiaramente questo contenuto dovrà essere copiato nella nostra cartella application della nostra applicazione nelle rispettive cartelle.</li>
<li>Un volta fatto questo andremo nel file <strong>config/config.php</strong> e abiliteremo le variabili di sessione:
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re0">$config</span><span class="br0">&#91;</span><span class="st0">&#8217;sess_encrypt_cookie&#8217;</span><span class="br0">&#93;</span> &nbsp;= <span class="kw2">TRUE</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$config</span><span class="br0">&#91;</span><span class="st0">&#8217;sess_use_database&#8217;</span><span class="br0">&#93;</span> &nbsp; &nbsp;= <span class="kw2">TRUE</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$config</span><span class="br0">&#91;</span><span class="st0">&#8217;sess_match_ip&#8217;</span><span class="br0">&#93;</span> &nbsp; &nbsp; &nbsp; &nbsp;= <span class="kw2">TRUE</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$config</span><span class="br0">&#91;</span><span class="st0">&#8217;sess_match_useragent&#8217;</span><span class="br0">&#93;</span> = <span class="kw2">TRUE</span>;</div>
</li>
</ol>
</div>
<p>Nel mio caso per la configurazione delle sessioni su DB Mysql ho seguito questa guida <a title="Codeigniter DB Session" href="http://codeigniter.com/wiki/DB_Session/" target="_blank">http://codeigniter.com/wiki/DB_Session/</a></li>
<li>Sistemate le sessioni possiamo configurare a dovere il file <strong>config/redux_auth.php</strong>, in cui non mi addentro perchè è abbastanza semplice e ben commentato, poi non mi pare abbia bisogno di particolari modifiche.</li>
<li>Per comodità, sarebbe opportuno configurare in <strong>config/autoload.php</strong> il caricamento automatico della libreria redux, perchè altrimenti bisogna ricordarsi di farlo ogni volta che la si utilizza nei metodi del controller. Ricordandoci che Redux carica in automatico le librerie per le email e le sessioni.
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re0">$autoload</span><span class="br0">&#91;</span><span class="st0">&#8216;libraries&#8217;</span><span class="br0">&#93;</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&quot;redux_auth&quot;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
</li>
</ul>
<p>Dopo questa breve configurazione sarà possibile sfruttare tutta la potenza della libreria Redux Authentication, all&#8217;interno del pacchetto nei files di esempio avremo il controller <strong>user.php</strong> che illustra molto bene come vengono implementate le funzioni di base per costruire una autenticazione completa e anche come si apprestano facilmente alla personalizzazione.</p>
<h3>Per farvi un esempio di semplice controller con il solo login:</h3>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">class</span> user <span class="kw2">extends</span> Controller</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">function</span> index <span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&#8216;This is the user Controller&#8217;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">function</span> login <span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$rules</span><span class="br0">&#91;</span><span class="st0">&#8216;email&#8217;</span><span class="br0">&#93;</span> &nbsp; &nbsp;= <span class="st0">&#8216;trim|required&#8217;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$rules</span><span class="br0">&#91;</span><span class="st0">&#8216;password&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&#8216;trim|required&#8217;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">validation</span>-&gt;<span class="me1">set_rules</span><span class="br0">&#40;</span><span class="re0">$rules</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$this</span>-&gt;<span class="me1">validation</span>-&gt;<span class="me1">run</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$login</span> = <span class="re0">$this</span>-&gt;<span class="me1">redux_auth</span>-&gt;<span class="me1">login</span><span class="br0">&#40;</span><span class="re0">$this</span>-&gt;<span class="me1">input</span>-&gt;<span class="me1">post</span><span class="br0">&#40;</span><span class="st0">&#8216;email&#8217;</span><span class="br0">&#41;</span>, <span class="re0">$this</span>-&gt;<span class="me1">input</span>-&gt;<span class="me1">post</span><span class="br0">&#40;</span><span class="st0">&#8216;password&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$i</span> = <span class="br0">&#40;</span><span class="re0">$login</span><span class="br0">&#41;</span> ? redirect<span class="br0">&#40;</span><span class="st0">&#8221;</span><span class="br0">&#41;</span> : <span class="st0">&#8216;false&#8217;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">load</span>-&gt;<span class="me1">view</span><span class="br0">&#40;</span><span class="st0">&#8216;login&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Chiaramente se utilizziamo il controller già fatto dovremmo creare poi tutte le viste che vengono richiamate da esso. Per chi è inesperto e vuole comunque facilitarsi la vita all&#8217;inizio gli consiglio di scaricarle dal secondo link nei riferimenti qui sotto.</p>
<h3>Un esempio di come effettuare il controllo nelle pagine protette lato backend:</h3>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">class</span> Admin <span class="kw2">extends</span> Controller <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">function</span> Admin<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; parent::<span class="me2">Controller</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">function</span> index<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$this</span>-&gt;<span class="me1">redux_auth</span>-&gt;<span class="me1">logged_in</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>&#8230;<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>&#8230;<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>E&#8217; tutto.. quindi buona autenticazione con Redux!</p>
<p><strong>Riferimenti</strong>:</p>
<p><a title="Redux Authentication library" href="http://code.google.com/p/reduxauth/" target="_blank">http://code.google.com/p/reduxauth/</a><br />
<a title="Redux Authentication Example “View” Files  " href="http://codeigniter.com/forums/viewthread/72525/" target="_blank">http://codeigniter.com/forums/viewthread/72525/</a><br />
<a title="Codeigniter DB Session" href="http://codeigniter.com/wiki/DB_Session/" target="_blank">http://codeigniter.com/wiki/DB_Session/</a><br />
<a title="Codeigniter Sessions" href="http://codeigniter.com/user_guide/libraries/sessions.html" target="_blank">http://codeigniter.com/user_guide/libraries/sessions.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.programmazione-web.com/codeigniter-redux-authentication-libreria-per-lautenticazione.php/feed</wfw:commentRss>
		</item>
		<item>
		<title>CodeIgniter 1.6.3 nuova fixed release per il framework php</title>
		<link>http://www.programmazione-web.com/codeigniter-163-nuova-fixed-release-per-il-framework-php.php</link>
		<comments>http://www.programmazione-web.com/codeigniter-163-nuova-fixed-release-per-il-framework-php.php#comments</comments>
		<pubDate>Sun, 29 Jun 2008 15:19:58 +0000</pubDate>
		<dc:creator>neryo</dc:creator>
		
		<category><![CDATA[Codeigniter]]></category>

		<category><![CDATA[Framework]]></category>

		<category><![CDATA[News dal web]]></category>

		<category><![CDATA[Open-source]]></category>

		<category><![CDATA[Programmare Php]]></category>

		<category><![CDATA[Sviluppo applicazioni]]></category>

		<category><![CDATA[codeigniter 1.6.3]]></category>

		<category><![CDATA[codeigniter nuova release]]></category>

		<category><![CDATA[codeigniter nuova versione]]></category>

		<category><![CDATA[nuova versione codeigniter]]></category>

		<guid isPermaLink="false">http://www.programmazione-web.com/?p=61</guid>
		<description><![CDATA[Codeigniter framework php nuova realase 1.6.3 rilasciato alla fine di giugno 2008, contiene notevoli bigfixes e altri miglioramenti alle features esistenti]]></description>
			<content:encoded><![CDATA[<p><strong>CodeIgniter 1.6.3 nuova fixed release per il framework php</strong></p>
<p>Lo staff di sviluppo del framework CodeIgniter è stato come al solito felice di annunciare il rilascio della nuova versione 1.6.3 annunciato sul <a title="Codeigniter official site" href="http://codeigniter.com/" target="_blank">sito ufficiale di codeigniter</a> il 26/06/2008. Questa versione, la 1.6.3 è pressochè identica a livello funzionale, si tratta infatti di una relase di mantenimento, include la risoluzione di vari bug diagnosticati e alcune rifiniture di features esistenti già nella precedente release. I dettagli potranno essere visionati come al solito nel <a title="Codeigniter Changelog" href="http://codeigniter.com/user_guide/changelog.html" target="_blank">Change Log</a>.</p>
<p>In aggiunta, grazie al contributo esterno di un membro della comunità di Codeigniter, Pascal Kriete (Inparo), è stato identificato ed eliminato una potenziale vulnerabilità che consentiva di bucare i siti con la tecnica del cross-site scripting.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.programmazione-web.com/codeigniter-163-nuova-fixed-release-per-il-framework-php.php/feed</wfw:commentRss>
		</item>
		<item>
		<title>Firefox 3.0: rilasciata la relase stable del browser web</title>
		<link>http://www.programmazione-web.com/firefox-30-rilasciata-la-relase-stable-del-browser-web-open-source.php</link>
		<comments>http://www.programmazione-web.com/firefox-30-rilasciata-la-relase-stable-del-browser-web-open-source.php#comments</comments>
		<pubDate>Wed, 18 Jun 2008 06:45:37 +0000</pubDate>
		<dc:creator>neryo</dc:creator>
		
		<category><![CDATA[Applicazioni]]></category>

		<category><![CDATA[Browser]]></category>

		<category><![CDATA[News dal web]]></category>

		<category><![CDATA[Open-source]]></category>

		<category><![CDATA[browser firefox]]></category>

		<category><![CDATA[browser open-source]]></category>

		<category><![CDATA[firefox 3]]></category>

		<category><![CDATA[mozilla firefox]]></category>

		<category><![CDATA[mozilla foundation]]></category>

		<guid isPermaLink="false">http://www.programmazione-web.com/?p=57</guid>
		<description><![CDATA[Mozilla Foundation, dopo uno sviluppo durato 34 mesi ha rilasciato la nuova versione del browser web Firefox giunta alla release 3.0. La nuova versione dell&#8217;ormai  popolare e ottimo browser Web open-source introduce molteplici e interessanti novità tutte da scoprire, la maggior parte delle migliorie si sono focalizzate sulle prestazioni, oltre che una maggiore usabilità [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.programmazione-web.com/wp-content/uploads/2008/06/mozilla_firefox.jpg"><img style="float:left; margin:5px;" title="mozilla_firefox" src="http://www.programmazione-web.com/wp-content/uploads/2008/06/mozilla_firefox.jpg" alt="" width="150" height="149" /></a>Mozilla Foundation, dopo uno sviluppo durato 34 mesi ha rilasciato la nuova versione del browser web Firefox giunta alla release 3.0. La nuova versione dell&#8217;ormai  popolare e ottimo browser Web open-source introduce molteplici e interessanti novità tutte da scoprire, la maggior parte delle migliorie si sono focalizzate sulle prestazioni, oltre che una maggiore usabilità generale del tabbed, senza tralasciare gli aspetti di sicurezza come la protezione come <strong> malware</strong> e il <strong>phishing</strong>. Mozilla per festeggiare l&#8217;evento ha deciso di organizzare un <a href="http://www.hwupgrade.it/news/software/mozilla-organizza-il-download-day-per-il-lancio-di-firefox-3_25483.html"> Download Day</a> mondiale, con il quale punta a far entrare Firefox 3.0 nel <strong> Guinnes dei Primati</strong> a titolo di software più scaricato nell&#8217;arco di 24 ore. Quindi iniziate subito a scaricare!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.programmazione-web.com/firefox-30-rilasciata-la-relase-stable-del-browser-web-open-source.php/feed</wfw:commentRss>
		</item>
		<item>
		<title>Tutorial Codeigniter per l&#8217;integrazione di ajax con jquery</title>
		<link>http://www.programmazione-web.com/tutorial-codeigniter-integrazione-ajax-jquery.php</link>
		<comments>http://www.programmazione-web.com/tutorial-codeigniter-integrazione-ajax-jquery.php#comments</comments>
		<pubDate>Sat, 07 Jun 2008 14:07:36 +0000</pubDate>
		<dc:creator>neryo</dc:creator>
		
		<category><![CDATA[Ajax]]></category>

		<category><![CDATA[Codeigniter]]></category>

		<category><![CDATA[Framework]]></category>

		<category><![CDATA[Javascript]]></category>

		<category><![CDATA[Jquery]]></category>

		<category><![CDATA[Open-source]]></category>

		<category><![CDATA[Programmare Php]]></category>

		<category><![CDATA[Sviluppo applicazioni]]></category>

		<category><![CDATA[ajax codeigniter]]></category>

		<category><![CDATA[codeigniter ajax jquery]]></category>

		<category><![CDATA[codeigniter jquery]]></category>

		<category><![CDATA[codeigniter tutorial jquery]]></category>

		<category><![CDATA[framework codeigniter.]]></category>

		<category><![CDATA[framework php con jquery]]></category>

		<category><![CDATA[inserire jquery codeigniter]]></category>

		<category><![CDATA[jquery codeigniter ajax]]></category>

		<guid isPermaLink="false">http://www.programmazione-web.com/?p=56</guid>
		<description><![CDATA[In questo tutorial per il framework Codeigniter, tradotto parzialmente dall'articolo di Michael Wales, verrà mostrato come implementare in Codeigniter un caricamento dinamico di record da un database, utilizzando chiamate AJAX con l'usilio di Jquery.]]></description>
			<content:encoded><![CDATA[<p><strong>Tutorial Codeigniter per l&#8217;integrazione di ajax con jquery<br />
</strong></p>
<p>Negli ultimi due anni passati, AJAX è diventato velocemente uno strumento ormai necessario per ogni web developer. In effetti grazie all&#8217;utilizzo di AJAX è possibile velocizzare le applicazioni, diminuendo il consumo di banda e i tempi di caricamento delle pagine, donando inoltre una maggiore usabilità.</p>
<p>In questo tutorial per il framework Codeigniter, tradotto parzialmente dall&#8217;articolo di <a title="Michael Wales Wen site" href="http://michaelwales.com" target="_blank">Michael Wales</a>, verrà mostrato come implementare in Codeigniter un caricamento dinamico di record da un database, utilizzando chiamate AJAX con l&#8217;usilio di Jquery.</p>
<p>La nostra applicazione sarà composta da una lista di post di un blog, che sono suddivisi in due tipologie: la lista dei pubblicati o la lista delle bozze. Inizialmente la nostra applicazione funzionerà senza l&#8217;utilizzo di chiamate AJAX; poi successivamente inseriremo questa funzionalità utilizzando un semplice script jQuery, garantendo comunque la fruibilità del sito anche se l&#8217;utente non ha abilitato il supporto javascript (perdendo solamente le chiamate asincrone AJAX ma non i contenuti da visualizzare).</p>
<p><strong>Creazione dell&#8217;applicazione</strong></p>
<p>Nella nostra installazione del framework Codeigniter, creiamo una nuova classe controller che in questo tutorial chiameremo Post.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="co1">// File: ./controllers/post.php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> Post <span class="kw2">extends</span> Controller <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> Post<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; parent::<span class="me2">Controller</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> index<span class="br0">&#40;</span><span class="re0">$status</span> = <span class="kw2">NULL</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;<span class="re0">$this</span>-&gt;<span class="me1">load</span>-&gt;<span class="me1">model</span><span class="br0">&#40;</span><span class="st0">&#8216;posts&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$status</span> === <span class="kw2">NULL</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$template</span><span class="br0">&#91;</span><span class="st0">&#8216;posts&#8217;</span><span class="br0">&#93;</span> = <span class="re0">$this</span>-&gt;<span class="me1">posts</span>-&gt;<span class="me1">get_where</span><span class="br0">&#40;</span><a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&#8216;id &gt;&#8217;</span>=&gt;<span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp;<span class="re0">$template</span><span class="br0">&#91;</span><span class="st0">&#8216;posts&#8217;</span><span class="br0">&#93;</span> = <span class="re0">$this</span>-&gt;<span class="me1">posts</span>-&gt;<span class="me1">get_where</span><span class="br0">&#40;</span><a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&#8217;status&#8217;</span>=&gt;<span class="re0">$status</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$template</span><span class="br0">&#91;</span><span class="st0">&#8216;partial&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&#8216;post/list&#8217;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$this</span>-&gt;<span class="me1">load</span>-&gt;<span class="me1">view</span><span class="br0">&#40;</span><span class="st0">&#8216;view&#8217;</span>, <span class="re0">$template</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<div id="result_box" dir="ltr">Qui viene delineata la struttura di base della nostra applicazione. Il nostro metodo index() accetta un parametro facoltativo (status), che se non è definito tornera&#8217; tutti i posti all&#8217;interno del nostro blog.</div>
<div dir="ltr">Il controller attraverso il modello, effettua una query ritornando la lista dei post del blog sulla base di determinati parametri, settando una variabile chiamata partial, che verra&#8217; utilizzata anche in seguito per la visualizzazione dei risultati parziali.<br />
Ma passiamo subito al modello per comprendere completamente il funzionamento del controller visto precendentemente.</div>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="co1">// File: ./models/posts.php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> Posts <span class="kw2">extends</span> Model <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> <span class="re0">$_table</span> = <span class="st0">&#8216;posts&#8217;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> Posts<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; parent::<span class="me2">Model</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw2">function</span> get_where<span class="br0">&#40;</span><span class="re0">$params</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/count"><span class="kw3">count</span></a><span class="br0">&#40;</span><span class="re0">$params</span><span class="br0">&#41;</span> &gt; <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$query</span> = <span class="re0">$this</span>-&gt;<span class="me1">db</span>-&gt;<span class="me1">get_where</span><span class="br0">&#40;</span><span class="re0">$this</span>-&gt;_table, <span class="re0">$params</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$query</span>-&gt;<span class="me1">num_rows</span><span class="br0">&#40;</span><span class="br0">&#41;</span> &gt; <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$query</span>-&gt;<span class="me1">result_array</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;<span class="kw1">return</span> <span class="kw2">FALSE</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<div dir="ltr">Nel metodo get_where () si nota come l&#8217;autore voleva assicurarsi che la funzione ricevesse un parametro, altrimenti restituisce inesorabilemnte un FALSE al controller al posto dell&#8217;array contenente i dati.</p>
<p>Giunti a questo punto si puo&#8217; dire che la nostra applicazione e&#8217; praticamente fatta e ora possiamo iniziare a giocare con AJAX! Inanzittutto vediamo di creare il file della vista principale, che verrà caricata insieme all header e al footer dal nostro controller.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="co1">// File: ./views/view.php</span></div>
</li>
<li class="li1">
<div class="de1">&lt; ?php <span class="re0">$this</span>-&gt;<span class="me1">load</span>-&gt;<span class="me1">view</span><span class="br0">&#40;</span><span class="st0">&#8216;_global/header&#8217;</span><span class="br0">&#41;</span>; <span class="kw2">?&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&lt; ?php <span class="re0">$this</span>-&gt;<span class="me1">load</span>-&gt;<span class="me1">view</span><span class="br0">&#40;</span><span class="re0">$partial</span><span class="br0">&#41;</span>; <span class="kw2">?&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&lt; ?php <span class="re0">$this</span>-&gt;<span class="me1">load</span>-&gt;<span class="me1">view</span><span class="br0">&#40;</span><span class="st0">&#8216;_global/footer&#8217;</span><span class="br0">&#41;</span>; <span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p>Questa vista come vediamo include i file header e footer che sono all&#8217;interno della directory _global, creata dall&#8217;autore con l&#8217;underscore davanti al nome per forzarla a rimanere per comodita&#8217; sempre in alto della lista dei file e direcory.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="co1">// File: ./views/_global/header.php</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&lt;script src=<span class="st0">&quot;&lt;?php echo base_url(); ?&gt;&lt;!&#8211;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">assets/js/jquery-1.2.6.min.js&quot;</span> type=<span class="st0">&quot;text/javascript&quot;</span>&gt;&lt;!&#8211;mce:<span class="nu0">0</span>&#8211;&gt;&lt;/script&gt;</div>
</li>
<li class="li2">
<div class="de2">&lt;script src=<span class="st0">&quot;&lt;?php echo base_url(); ?&gt;&lt;!&#8211;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">assets/js/ajax_tut.js&quot;</span> type=<span class="st0">&quot;text/javascript&quot;</span>&gt;&lt;!&#8211;mce:<span class="nu0">1</span>&#8211;&gt;&lt;/script&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;div id=<span class="st0">&quot;wrapper&quot;</span>&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;div id=<span class="st0">&quot;header&quot;</span>&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;h1&gt;CodeIgniter Ajax Tutorial&lt;/h1&gt;</div>
</li>
<li class="li2">
<div class="de2">&lt;div id=<span class="st0">&quot;nav&quot;</span>&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;ul&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;li&gt;&lt; ?php <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> anchor<span class="br0">&#40;</span><span class="st0">&#8221;</span>, <span class="st0">&#8216;All Posts&#8217;</span><span class="br0">&#41;</span>; ?&gt;&lt;/li&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;li&gt;&lt; ?php <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> anchor<span class="br0">&#40;</span><span class="st0">&#8216;published&#8217;</span>, <span class="st0">&#8216;Published&#8217;</span><span class="br0">&#41;</span>; ?&gt;&lt;/li&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;li&gt;&lt; ?php <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> anchor<span class="br0">&#40;</span><span class="st0">&#8216;draft&#8217;</span>, <span class="st0">&#8216;Drafts&#8217;</span><span class="br0">&#41;</span>; ?&gt;&lt;/li&gt;</div>
</li>
<li class="li2">
<div class="de2">&lt;/ul&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;/div&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;/div&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;/div&gt;</div>
</li>
</ol>
</div>
<p>In questo file header avrete notato  l&#8217;utilizzo della funzione base_url () al fine di garantire ai file statici inclusi di avere un riferiemento assoluto che funziona sempre. Non fate caso agli utlimi 3 tags di chiusura sbagliati nel header. perche&#8217; non sono riuscito a toglierli qui nel blog, perche&#8217; il mio syntax highlighter me li continua ad aggiungere <img src='http://www.programmazione-web.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> infatti andrebbero nel footer ovvero i tag di chiusura del div wapper del body e del tag html.</p>
<p>Ecco la vista che implementa le viste dei post del blog, parziali e non:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="co1">// File: ./views/post/list.php</span></div>
</li>
<li class="li1">
<div class="de1">&lt;div id=<span class="st0">&quot;loading&quot;</span>&gt;Loading&#8230;&lt;/div&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;div id=<span class="st0">&quot;list&quot;</span>&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt; ?php</div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re0">$posts</span> <span class="kw1">as</span> <span class="re0">$post</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&#8216;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&lt;h3&gt;&#8217;</span> . <span class="re0">$post</span><span class="br0">&#91;</span><span class="st0">&#8216;title&#8217;</span><span class="br0">&#93;</span> . <span class="st0">&#8216;&lt;span class=&quot;created_on&quot;&gt;Posted on: &#8216;</span> . <span class="re0">$post</span><span class="br0">&#91;</span><span class="st0">&#8216;created_on&#8217;</span><span class="br0">&#93;</span> . <span class="st0">&#8216;&lt;/span&gt;&#8217;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">?&gt;&lt;/h3&gt;</div>
</li>
<li class="li2">
<div class="de2">&lt;/div&gt;</div>
</li>
</ol>
</div>
<p>Nella vista  (post/list.php) non credo ci sia niente da chiarire, tutto quello che fa è effettuare un ciclo sull&#8217;array posts ritornato dal modello tramite il controller e stampare il titolo e la data di creazione di ogni post.</p>
<p>La nostra applicazione è praticamente completa! Ora è giunto il momente di fare gli ultimi passi e accertarsi che funzioni. Per prima cosa andremo a creare il database con la tabella e i dati per il test utilizzando il file sql di dump:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">CREATE</span> <span class="kw1">TABLE</span> <span class="kw1">IF</span> <span class="kw1">NOT</span> <span class="kw1">EXISTS</span> <span class="st0">`posts`</span> <span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">`id`</span> int<span class="br0">&#40;</span><span class="nu0">10</span><span class="br0">&#41;</span> <span class="kw1">UNSIGNED</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span> <span class="kw1">AUTO_INCREMENT</span>,</div>
</li>
<li class="li1">
<div class="de1"><span class="st0">`title`</span> varchar<span class="br0">&#40;</span><span class="nu0">255</span><span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span>,</div>
</li>
<li class="li1">
<div class="de1"><span class="st0">`status`</span> varchar<span class="br0">&#40;</span><span class="nu0">10</span><span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span>,</div>
</li>
<li class="li2">
<div class="de2"><span class="st0">`created_on`</span> date <span class="kw1">NOT</span> <span class="kw1">NULL</span>,</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">PRIMARY</span> <span class="kw1">KEY</span> &nbsp;<span class="br0">&#40;</span><span class="st0">`id`</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#41;</span> ENGINE=MyISAM &nbsp;<span class="kw1">DEFAULT</span> CHARSET=utf8 <span class="kw1">AUTO_INCREMENT</span>=<span class="nu0">4</span> ;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">INSERT</span> <span class="kw1">INTO</span> <span class="st0">`posts`</span> <span class="br0">&#40;</span><span class="st0">`id`</span>, <span class="st0">`title`</span>, <span class="st0">`status`</span>, <span class="st0">`created_on`</span><span class="br0">&#41;</span> <span class="kw1">VALUES</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#40;</span><span class="nu0">1</span>, <span class="st0">&#8216;First post.&#8217;</span>, <span class="st0">&#8216;published&#8217;</span>, <span class="st0">&#8216;2008-05-27&#8242;</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#40;</span><span class="nu0">2</span>, <span class="st0">&#8216;This is the second post.&#8217;</span>, <span class="st0">&#8216;published&#8217;</span>, <span class="st0">&#8216;2008-05-27&#8242;</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#40;</span><span class="nu0">3</span>, <span class="st0">&#8216;This is a draft.&#8217;</span>, <span class="st0">&#8216;draft&#8217;</span>, <span class="st0">&#8216;2008-05-28&#8242;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>Ora dobbiamo effettuare alcuni cambiamenti alle configurazioni, ricordando che i settaggi potrebbero essere leggermente diversi dalla vostra situazione, ma sicuramente e&#8217; un buon punto di partenza.</p>
<p>Per prima cosa accertevi che sia configurato in modo appropiato il base url</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="co1">// File: ./config/config.php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$config</span><span class="br0">&#91;</span><span class="st0">&#8216;base_url&#8217;</span><span class="br0">&#93;</span> &nbsp; &nbsp;= <span class="st0">&quot;http://localhost/ajax_tut/&quot;</span>;</div>
</li>
</ol>
</div>
<p>Ora, assicuratevi che potete connettervi al vostro database</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="co1">// File: ./config/database.php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$db</span><span class="br0">&#91;</span><span class="st0">&#8216;default&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;hostname&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&quot;localhost&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$db</span><span class="br0">&#91;</span><span class="st0">&#8216;default&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;username&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&quot;root&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$db</span><span class="br0">&#91;</span><span class="st0">&#8216;default&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;password&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&quot;&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="re0">$db</span><span class="br0">&#91;</span><span class="st0">&#8216;default&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;database&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&quot;ajax_tut&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$db</span><span class="br0">&#91;</span><span class="st0">&#8216;default&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;dbdriver&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&quot;mysql&quot;</span>;</div>
</li>
</ol>
</div>
<p>Dobbiamo caricare automaticamente le librerie e gli helper necessari per renderci lo sviluppo piu semplice e veloce.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="co1">// File: ./config/autoload.php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$autoload</span><span class="br0">&#91;</span><span class="st0">&#8216;libraries&#8217;</span><span class="br0">&#93;</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&#8216;database&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>Infine, dobbiamo riderezionare la route di codeigniter sul nostro controller di post che chiamera&#8217; in automatico il metodo index() contenuto in esso.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="co1">// File: ./config/routes.php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$route</span><span class="br0">&#91;</span><span class="st0">&#8216;([a-zA-Z]+)&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&#8216;post/index/$1&#8242;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$route</span><span class="br0">&#91;</span><span class="st0">&#8216;default_controller&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&#8216;post&#8217;</span>;</div>
</li>
</ol>
</div>
<p>Qui sotto possiamo vedere il css agganciato alla nostra applicazione:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">// File: ./assets/css/style<span class="re1">.css</span></div>
</li>
<li class="li1">
<div class="de1">body <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">font<span class="re2">:<span class="nu0">0</span></span><span class="re1"><span class="re3">.8em</span></span> Verdana;</div>
</li>
<li class="li1">
<div class="de1">text-align<span class="re2">:center</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">a<span class="re2">:link</span>, a<span class="re2">:active</span>, a<span class="re2">:hover</span>, a<span class="re2">:visited</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">color<span class="re2">:blue</span>;</div>
</li>
<li class="li1">
<div class="de1">text-decoration<span class="re2">:none</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">#wrapper</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">margin<span class="re2">:<span class="nu0">0</span></span> <span class="kw2">auto</span>;</div>
</li>
<li class="li1">
<div class="de1">text-align<span class="re2">:left</span>;</div>
</li>
<li class="li2">
<div class="de2">width<span class="re2">:<span class="re3">600px</span></span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">#nav</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">background</span>:<span class="re0">#DDD</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">#nav</span> a <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">padding<span class="re2">:<span class="re3">10px</span></span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">#nav</span> a<span class="re2">:hover</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">background</span>:<span class="re0">#FFF</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="re0">#nav</span> ul <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">padding<span class="re2">:<span class="re3">5px</span></span>;</div>
</li>
<li class="li1">
<div class="de1">list-style<span class="re2">:none</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="re0">#nav</span> li <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">display<span class="re2">:inline</span>;</div>
</li>
<li class="li1">
<div class="de1">margin-right<span class="re2">:<span class="nu0">1</span></span><span class="re1"><span class="re3">.5em</span></span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="re0">#loading</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">display<span class="re2">:none</span>;</div>
</li>
<li class="li1">
<div class="de1">font-weight<span class="re2">:bold</span>;</div>
</li>
<li class="li1">
<div class="de1">text-align<span class="re2">:center</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">#list</span> h3 <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">display<span class="re2">:inline</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="re1">.created_on</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">color</span>:<span class="re0">#AAA</span>;</div>
</li>
<li class="li1">
<div class="de1">font-size<span class="re2">:<span class="nu0">0</span></span><span class="re1"><span class="re3">.7em</span></span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<div id="result_box" dir="ltr"><strong>Ma e&#8217; AJAX?</strong><br />
Ci sono diversi modi per implementare AJAX in un sito web, soprattutto in un sito realizzato con Codeigniter. Noi potremmo tornare XML o JSON e fare poi il parsing all&#8217;interno del nostro controller, o semplicemente inviare tutto direttamente alle nostre viste e gestire solo la formattazione (se non è richiesto il parsing). Probabilmente il modo più semplice, all&#8217;interno di CodeIgniter, è semplicemente caricare un file di vista proprio come con un normale richiesta! Sappiamo tutti pero&#8217; che per caricare una vista abbiamo bisogno sempre di un metodo controller che ne implementa la logica, gestendo le eventuali chiamate verso il modello, e inviando i dati per la visualizzazione. Alcuni preferiscono creare una nuova classe, in particolare per le richieste AJAX, altri creano nuovi metodi all&#8217;interno della stessa classe che verranno utilizzate solo da AJAX.</p>
<p>L&#8217;autore, invece preferisce tenere la classe asciutta e utilizzare lo stesso controller effettuando solamente  alcune modifiche richiamando librerie esterne, dal momento che il nostro metodo attuale richiede solamente una vista (che comprende header footer e partial).</p>
<p>Per fare questo crea quindi prima una classe libreria, contenente un metodo che ci consenta di sapere se si tratta di una richiesta AJAX o meno e poi utilizzare questa libreria come una condizione per determinare che cosa fare in base al tipo di richiesta.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="co1">// File: ./libraries/request.php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> Request <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">function</span> is_ajax<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> <span class="br0">&#40;</span><a href="http://www.php.net/isset"><span class="kw3">isset</span></a><span class="br0">&#40;</span><span class="re0">$_SERVER</span><span class="br0">&#91;</span><span class="st0">&#8216;HTTP_X_REQUESTED_WITH&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span> &amp;amp;&amp;amp; <span class="br0">&#40;</span><span class="re0">$_SERVER</span><span class="br0">&#91;</span><span class="st0">&#8216;HTTP_X_REQUESTED_WITH&#8217;</span><span class="br0">&#93;</span> == <span class="st0">&#8216;XMLHttpRequest&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>In questa classe tramite il metodo is_ajax(), semplicemente viene effettuato un controllo sulla variabile HTTP_X_REQUESTED_WITH che è un header jQuery settato quando noi effettuamo una richiesta di tipo AJAX.</p>
<p>Ora nel controller dobbiamo richiamare questa libreria per effettuare il controllo e inviare solamente i dati parziali alla vista.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="co1">// File: ./controllers/post.php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> index<span class="br0">&#40;</span><span class="re0">$status</span> = <span class="kw2">NULL</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re0">$this</span>-&gt;<span class="me1">load</span>-&gt;<span class="me1">model</span><span class="br0">&#40;</span><span class="st0">&#8216;posts&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re0">$this</span>-&gt;<span class="me1">load</span>-&gt;<span class="me1">library</span><span class="br0">&#40;</span><span class="st0">&#8216;request&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$status</span> === <span class="kw2">NULL</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$template</span><span class="br0">&#91;</span><span class="st0">&#8216;posts&#8217;</span><span class="br0">&#93;</span> = <span class="re0">$this</span>-&gt;<span class="me1">posts</span>-&gt;<span class="me1">get_where</span><span class="br0">&#40;</span><a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&#8216;id &gt;&#8217;</span>=&gt;<span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="re0">$template</span><span class="br0">&#91;</span><span class="st0">&#8216;posts&#8217;</span><span class="br0">&#93;</span> = <span class="re0">$this</span>-&gt;<span class="me1">posts</span>-&gt;<span class="me1">get_where</span><span class="br0">&#40;</span><a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&#8217;status&#8217;</span>=&gt;<span class="re0">$status</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re0">$template</span><span class="br0">&#91;</span><span class="st0">&#8216;partial&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&#8216;post/list&#8217;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$this</span>-&gt;<span class="me1">request</span>-&gt;<span class="me1">is_ajax</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$this</span>-&gt;<span class="me1">load</span>-&gt;<span class="me1">view</span><span class="br0">&#40;</span><span class="re0">$template</span><span class="br0">&#91;</span><span class="st0">&#8216;partial&#8217;</span><span class="br0">&#93;</span>, <span class="re0">$template</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;<span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$this</span>-&gt;<span class="me1">load</span>-&gt;<span class="me1">view</span><span class="br0">&#40;</span><span class="st0">&#8216;view&#8217;</span>, <span class="re0">$template</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Ora vediamo come vengono implementate in semplice stile jQuery le chiamate ajax, assicuriamoci pero&#8217; di aver scaricato la <a title="jquery library" href="http://jquery.com" target="_blank">liberia jQuery</a>, che sia nella cartella dell&#8217;applicazione in /assets/js/ e venga agganciata correttamente all&#8217;header.php in _global.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="co1">//File: ./assets/js/ajax_tut.js</span></div>
</li>
<li class="li1">
<div class="de1">$<span class="br0">&#40;</span>document<span class="br0">&#41;</span>.<span class="me1">ready</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;$<span class="br0">&#40;</span><span class="st0">&#8216;#nav a&#8217;</span><span class="br0">&#41;</span>.<span class="me1">click</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>event<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; event.<span class="me1">preventDefault</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; $<span class="br0">&#40;</span><span class="st0">&#8216;#list&#8217;</span><span class="br0">&#41;</span>.<span class="me1">load</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">href</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">$<span class="br0">&#40;</span><span class="st0">&#8216;#loading&#8217;</span><span class="br0">&#41;</span>.<span class="me1">ajaxStart</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;$<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">show</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span><span class="br0">&#41;</span>.<span class="me1">ajaxStop</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;$<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">hide</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">$<span class="br0">&#40;</span><span class="st0">&#8216;#list&#8217;</span><span class="br0">&#41;</span>.<span class="me1">ajaxStart</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;$<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">hide</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>.<span class="me1">ajaxStop</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;$<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">show</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>Javascript e jQuery sono al di fuori dello scopo di questo tutorial, quindi se avete problemi a capire quanto sopra riportato vi consiglio di fare riferimento alla documentazione ufficiale sul sito di jQuery. Spero che questo tutorial vi abbia chiarito le idee su come includere AJAX, in particolare jQuery nelle vostre applicazioni con Codeigniter, ringrazio Michael Wales per il suo tutorial che mi ha permesso di realizzare questa traduzione sul mio blog.</p>
<p>Se avete commenti, postate pure.. Vi ricordo che il codice del solo applicativo senza il framework codeigniter e&#8217; scaricabile qui sotto.</p>
</div>
<p><strong>Riferimenti</strong></p>
<p><a title="Michael Wales Codeigniter ajax with jquery" href="http://michaelwales.com/tutorials/codeigniter-ajax-with-jquery/" target="_blank">http://michaelwales.com/tutorials/codeigniter-ajax-with-jquery/</a><br />
<a title="Michael Wales Codeigniter ajax with jquery Download" href="http://www.michaelwales.com/wp-content/tutorials/codeigniter-ajax-with-jquery/codeigniter-ajax-with-jquery.zip" target="_blank">http://www.michaelwales.com/wp-content/tutorials/codeigniter-ajax-with-jquery/codeigniter-ajax-with-jquery.zip</a><br />
<a title="Codeigniter framework" href="http://www.codeigniter.com" target="_blank">http://www.codeigniter.com</a><br />
<a title="jquery library" href="http://jquery.com" target="_blank">http://jquery.com</a></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.programmazione-web.com/tutorial-codeigniter-integrazione-ajax-jquery.php/feed</wfw:commentRss>
		</item>
		<item>
		<title>Jquery Ajax content loading, caricare contenuti html in un div</title>
		<link>http://www.programmazione-web.com/jquery-ajax-content-loading-caricare-contenuti-div.php</link>
		<comments>http://www.programmazione-web.com/jquery-ajax-content-loading-caricare-contenuti-div.php#comments</comments>
		<pubDate>Mon, 19 May 2008 17:40:17 +0000</pubDate>
		<dc:creator>neryo</dc:creator>
		
		<category><![CDATA[Ajax]]></category>

		<category><![CDATA[Javascript]]></category>

		<category><![CDATA[Tips &amp; Tricks]]></category>

		<category><![CDATA[Web 2.0]]></category>

		<category><![CDATA[ajax content loading]]></category>

		<category><![CDATA[ajax loading content]]></category>

		<category><![CDATA[Ajax XMLHttpRequest]]></category>

		<category><![CDATA[Jquery]]></category>

		<category><![CDATA[jquery content loading]]></category>

		<category><![CDATA[jquery loading div.]]></category>

		<guid isPermaLink="false">http://www.programmazione-web.com/jquery-ajax-content-loading-caricare-contenuti-div.php</guid>
		<description><![CDATA[Jquery Ajax content loading (XMLHttpRequest), caricare contenuti html in un div. 
Capita sempre piu&#8217; spesso di voler caricare porzioni di contenuti presenti in un sito, senza dover per forza ricaricare interamente tutto il contenuto della pagina.. questo tipo di interazioni sono la novita&#8217; che contraddistinguono i siti e le applicazioni web di ultima generazione, che [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Jquery Ajax content loading (<a href="http://it.wikipedia.org/wiki/XMLHttpRequest" title="wikipedia XMLHttpRequest " target="_blank">XMLHttpRequest</a>), caricare contenuti html in un div. </strong></p>
<p>Capita sempre piu&#8217; spesso di voler caricare porzioni di contenuti presenti in un sito, senza dover per forza ricaricare interamente tutto il contenuto della pagina.. questo tipo di interazioni sono la novita&#8217; che contraddistinguono i siti e le applicazioni web di ultima generazione, che consentono di avere una rapporto di usabilita&#8217; molto piu&#8217; alto grazie a chiamate asincrone (Ajax), che ci permettono di interagire con le applicazioni in modo piu&#8217; fruibile, avvicinando il web a vere e proprie applicazioni desktop.</p>
<p>Per realizzare questo tipo di chiamate dinamiche e interattive si utilizza solitamente l&#8217;oggetto XMLHttpRequest che e&#8217; un elemento fondamentale della tecnica di sviluppo web conosciuta con l&#8217;acronimo Ajax.</p>
<p>Un esempio di script che realizza questo tipo di interazioni lo possiamo vedere in <a href="http://www.dynamicdrive.com/dynamicindex17/ajaxcontent.htm" title="ajax content xmlhttprequest" target="_blank">questa pagina</a>.</p>
<p>Ma in questo post voglio pero&#8217; illustrarvi come realizzare lo stesso meccanismo utilizzando il <a href="http://jquery.com" title="Framework javascript jQuery" target="_blank">framework jQuery</a>, che lo implementa in modo molto semplice, senza dover direttamenti occuparci dei dettagli sottostanti. Ricordando che jQuery a mio parere e&#8217; il framework javascript che ha il rapporto tra semplicita&#8217;/potenza piu&#8217; alto e anche le operazioni piu&#8217; complesse vengono realizzate con pochissime righe di codice.</p>
<p>Detto questo vi illustro come caricare contenuti dinamici usando jquery in un div a cui gli e&#8217; stato assegnato un id css univoco:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt;script src=&quot;jquery-latest.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;script type=&quot;text/javascript&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">$(document).ready(function(){
</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; $(&quot;#contentArea&quot;).load(&quot;pagina.php&quot;);
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">});
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&lt;/script&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&lt;div id=&quot;contentArea&quot;&gt; &lt;/div&gt;</div>
</li>
</ol>
</div>
<p>se invece vogliamo variare il contenuto del div a secondo del link che primiamo possiamo creare una funzione:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt;script src=&quot;jquery-latest.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;script src=&quot;jquery-latest.js&quot; type=&quot;text/javascript&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;function loadContent(id) {
</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; $(&quot;#contentArea&quot;).load(&quot;rpc.php?o=&quot;+id+&quot;&quot;);
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; }
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&lt;/script&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&lt;body onLoad=&quot;loadContent(1);&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;a href=&quot;javascript:loadContent(1);&quot;&gt;Tab 1&lt;/a&gt; |
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;a href=&quot;javascript:loadContent(2);&quot;&gt;Tab 2&lt;/a&gt; |
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;a href=&quot;javascript:loadContent(3);&quot;&gt;Tab 3&lt;/a&gt; |
</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &lt;a href=&quot;javascript:loadContent(999);&quot;&gt;This content doesn&#8217;t exist&lt;/a&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;div id=&quot;contentArea&quot; style=&quot;margin: 20px 0px 10px 10px; border: 1px solid #CCC;&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;/div&gt;
</div>
</li>
<li class="li2">
<div class="de2">&lt;/body&gt;</div>
</li>
</ol>
</div>
<p>Chiaramente nel file rpc.php richiamato dalla funzione load di jQuery, dovra&#8217; essere implementata una struttura che ci permetta in base alla scelta numerica passata alla funzione loadContent() di selezionare il contenuto da restituire, questo puo &#8216; essere realizzato usando uno switch case. Se non e&#8217; sufficientemente chiaro il funzionamento potete scaricare il pacchetto da modificare sul sito di nodstrum.com presente nei riferimenti.</p>
<p><strong><br />
Riferimenti:</strong><br />
<a href="http://nodstrum.com/2007/03/20/jquery-content-loading/" title="jquery content loading" target="_blank">http://nodstrum.com/2007/03/20/jquery-content-loading/</a><br />
<a href="http://docs.jquery.com/Ajax/load" title="jquery ajax load function" target="_blank">http://docs.jquery.com/Ajax/load</a><br />
<a href="http://it.wikipedia.org/wiki/XMLHttpRequest" title="wikipedia XMLHttpRequest " target="_blank">http://it.wikipedia.org/wiki/XMLHttpRequest </a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.programmazione-web.com/jquery-ajax-content-loading-caricare-contenuti-div.php/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
