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

<channel>
	<title>Progettista Multimediale Davide Spallacci</title>
	<atom:link href="http://progettistamultimediale.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://progettistamultimediale.wordpress.com</link>
	<description>Il mio portfolio online, il blog del progettista multimediale, fotografia digitale, corso di grafica, web design e tanto altro...</description>
	<lastBuildDate>Thu, 17 Jul 2008 16:13:04 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>it</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='progettistamultimediale.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/83344f3d3b3edcd71c85e63f83c5b569?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Progettista Multimediale Davide Spallacci</title>
		<link>http://progettistamultimediale.wordpress.com</link>
	</image>
			<item>
		<title>Multimedialità</title>
		<link>http://progettistamultimediale.wordpress.com/2008/07/10/multimedialita/</link>
		<comments>http://progettistamultimediale.wordpress.com/2008/07/10/multimedialita/#comments</comments>
		<pubDate>Thu, 10 Jul 2008 10:25:02 +0000</pubDate>
		<dc:creator>progettistamultimediale</dc:creator>
				<category><![CDATA[Progettazione Multimediale]]></category>
		<category><![CDATA[multimediale multimedialità ipertesto]]></category>
		<category><![CDATA[progettazione]]></category>

		<guid isPermaLink="false">http://progettistamultimediale.wordpress.com/?p=45</guid>
		<description><![CDATA[La multimedialità è la compresenza e interazione di più mezzi di comunicazione in uno stesso supporto o contesto informativo. Si parla di contenuti multimediali, specie in ambito informatico, quando per comunicare un&#8217;informazione riguardo a qualcosa ci si avvale di molti media, cioè mezzi di comunicazione di massa, diversi: immagini in movimento (video), immagini statiche (fotografie), [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=progettistamultimediale.wordpress.com&blog=4169703&post=45&subd=progettistamultimediale&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>La <strong>multimedialità</strong> è la compresenza e interazione di più <span class="mw-redirect">mezzi di comunicazione</span> in uno stesso supporto o contesto informativo. Si parla di <em>contenuti multimediali</em>, specie in ambito informatico, quando per comunicare un&#8217;informazione riguardo a qualcosa ci si avvale di molti <em>media</em>, cioè <span class="mw-redirect">mezzi di comunicazione di massa</span>, diversi: immagini in movimento (video), immagini statiche (fotografie), musica e testo.</p>
<p>Ad esempio, un&#8217;<em>enciclopedia multimediale</em> (come la presente Wikipedia), a differenza di una normale enciclopedia cartacea, permette di associare ad ogni voce non solo la sua spiegazione testuale, ma anche fotografie, disegni esplicativi, filmati, suoni, commenti audio ecc.</p>
<p>Il termine <em>multimedialità</em> o <em>multimediale</em>, diffuso tra la fine degli anni ottanta e l&#8217;inizio degli anni novanta, deriva al latino <em>medium</em> (= &#8220;mezzo&#8221;, qui inteso come <em>mezzo di comunicazione</em>) e si può grossolanamente tradurre in &#8220;con molti mezzi&#8221;.</p>
<h2><span class="mw-headline">Multimedialità e interattività</span></h2>
<p>Talvolta la <em>multimedialità</em> viene confusa con l&#8217;<em>interattività</em>, con la quale invece non ha niente a che fare, almeno non direttamente. La confusione nasce dal fatto che spesso la <em>multimedialità</em> è affiancata dall&#8217; <em>interattività</em>: ad esempio, la citata enciclopedia multimediale sarà molto probabilmente anche <em>interattiva</em>, ovvero permetterà all&#8217;utente di <em>interagire</em> con essa (ovvero comunicare delle indicazioni al programma che gestisce l&#8217;enciclopedia, tramite il mouse o la tastiera, e ricevere da esso delle risposte sul monitor); in questo modo, l&#8217;utente potrà &#8220;dire&#8221; all&#8217;enciclopedia se di un certo lemma vuole la definizione testuale, oppure vuole vedere i filmati associati, o le foto, o ascoltare l&#8217;audio, ecc.</p>
<p><a id="Multimedialit.C3.A0_e_ipertestualit.C3.A0" name="Multimedialit.C3.A0_e_ipertestualit.C3.A0"></a></p>
<h2><span class="mw-headline">Multimedialità e ipertestualità</span></h2>
<p>Altro termine che spesso crea confusione parlando di multimedialità è l&#8217; <em>ipertestualità</em>: l&#8217;ipertestualità è la caratteristica di un documento di utilizzare la struttura dell&#8217;ipertesto; il prefisso <em>iper</em> sta ad indicare la maggiore valenza di un documento ipertestuale rispetto a un documento &#8220;tradizionale&#8221; (cartaceo), dovuta al fatto che un documento ipertestuale non deve essere obbligatoriamente letto in modo sequenziale, ma si può saltare da una parte all&#8217;altra senza seguire nessun ordine prestabilito. Per intenderci, la differenza tra un testo classico e un <em>ipertesto</em> è la stessa che passa tra un&#8217;<span class="mw-redirect">audiocassetta</span> e un compact disc: nel primo caso, per ascoltare un qualunque brano dovremo prima posizionarci opportunamente sul punto desiderato del nastro, mentre nel secondo potremo in qualunque momento ascoltare il primo, l&#8217;ultimo o un qualunque altro brano.</p>
<p>A questo proposito, si utilizza a volte il neologismo &#8220;ipermediale&#8221; o &#8220;ipermedialità&#8221; per indicare più precisamente la fusione dei contenuti multimediali in una struttura ipertestuale.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/progettistamultimediale.wordpress.com/45/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/progettistamultimediale.wordpress.com/45/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/progettistamultimediale.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/progettistamultimediale.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/progettistamultimediale.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/progettistamultimediale.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/progettistamultimediale.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/progettistamultimediale.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/progettistamultimediale.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/progettistamultimediale.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/progettistamultimediale.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/progettistamultimediale.wordpress.com/45/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=progettistamultimediale.wordpress.com&blog=4169703&post=45&subd=progettistamultimediale&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://progettistamultimediale.wordpress.com/2008/07/10/multimedialita/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/32899e130d85c12989fd68f0a31735bc?s=96&#38;d=identicon" medium="image">
			<media:title type="html">progettistamultimediale</media:title>
		</media:content>
	</item>
		<item>
		<title>CCD vs CMOS</title>
		<link>http://progettistamultimediale.wordpress.com/2008/07/10/ccd-vs-cmos/</link>
		<comments>http://progettistamultimediale.wordpress.com/2008/07/10/ccd-vs-cmos/#comments</comments>
		<pubDate>Thu, 10 Jul 2008 10:19:31 +0000</pubDate>
		<dc:creator>progettistamultimediale</dc:creator>
				<category><![CDATA[Fotografia Digitale]]></category>
		<category><![CDATA[ccd vs cmos]]></category>

		<guid isPermaLink="false">http://progettistamultimediale.wordpress.com/?p=44</guid>
		<description><![CDATA[






More CCD &#38; CMOS info



 DALSA CCD and CMOS sensors



 DALSA CCD and CMOS cameras


 
2005 Update:
CMOS vs. CCD: Maturing Technologies, Maturing Markets by Dave  				Litwiller, in Photonics Spectra August 2005 (421k PDF)



CCD vs. CMOS: Facts and Fiction by Dave Litwiller,  			in Photonics Spectra, January 2001 (385k PDF)


  CCD vs. CMOS: The [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=progettistamultimediale.wordpress.com&blog=4169703&post=44&subd=progettistamultimediale&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><table border="0" cellspacing="0" cellpadding="4" align="right" bgcolor="#e0e4e8">
<tbody>
<tr>
<td>
<table border="0" cellspacing="0" cellpadding="5" width="160" bgcolor="#ffffff">
<tbody>
<tr>
<td class="small" colspan="2" bgcolor="#e0e4e8"><strong><span style="color:#ae0820;">More CCD &amp; CMOS info</span></strong></td>
</tr>
<tr>
<td class="small" align="center" valign="top"><a href="http://www.dalsa.com/mv/products/sensors.asp"><img src="http://www.dalsa.com/shared/content/images/iaga_4meg_100w.jpg" border="0" alt="" /><br />
<img src="http://www.dalsa.com/shared/content/images/tri8.gif" border="0" alt="" /> DALSA CCD and CMOS sensors</a></td>
</tr>
<tr>
<td class="small" align="center" valign="top"><a href="http://www.dalsa.com/mv/products/cameras.asp"><img src="http://www.dalsa.com/shared/content/mediakit/assets/piranha3_12k_100h.jpg" border="0" alt="" /><br />
<img src="http://www.dalsa.com/shared/content/images/tri8.gif" border="0" alt="" /> DALSA CCD and CMOS cameras</a></td>
</tr>
<tr>
<td class="small" align="center" valign="top"><a href="http://www.dalsa.com/shared/content/pdfs/CCD_vs_CMOS_Litwiller_2005.pdf"> <img src="http://www.dalsa.com/shared/content/images/thumbnail_cmosvsccd_2005_update.jpg" border="0" alt="Maturing Technologies, Maturing Markets" /></a><br />
<strong>2005 Update:</strong><br />
<a href="http://www.dalsa.com/shared/content/CCD_vs_CMOS_Litwiller_2005.pdf">CMOS vs. CCD: Maturing Technologies, Maturing Markets</a> by Dave  				Litwiller, in Photonics Spectra August 2005 (421k PDF)</td>
</tr>
<tr>
<td class="small" align="center" valign="top"><a href="http://www.dalsa.com/shared/content/Photonics_Spectra_CCDvsCMOS_Litwiller.pdf"><img src="http://www.dalsa.com/shared/content/images/thumbnail_ccdvscmos.jpg" border="0" alt="Facts and Fiction" width="119" height="155" /></a><br />
<a href="http://www.dalsa.com/shared/content/Photonics_Spectra_CCDvsCMOS_Litwiller.pdf">CCD vs. CMOS: Facts and Fiction</a> by Dave Litwiller,  			in Photonics Spectra, January 2001 (385k PDF)</td>
</tr>
<tr>
<td class="small" align="center" valign="top"><a href="http://www.photonics.com/spectra/features/read.asp?artabid=484"> <img src="http://www.dalsa.com/shared/content/images/PDF_icon_small.gif" border="0" alt="" /> CCD vs. CMOS: The Battle Cools Off</a> by Dave Litwiller, in Photonics Spectra, January 2002</td>
</tr>
<tr>
<td class="small" align="center" valign="top"><a href="http://www.dalsa.com/shared/content/PDFs/Photonik_CMOS_Shuttering_English.pdf"><img src="http://www.dalsa.com/shared/content/images/PDF_icon_small.gif" border="0" alt="" /> Electronic Shuttering for High Speed CMOS Machine Vision</a> in Photonik, October 2005 (460k PDF)</td>
</tr>
<tr>
<td class="small" align="center" valign="top"><a href="http://www.dalsa.com/shared/content/OE_Magazine_Better_Mousetrap_Theuwissen.pdf"> </a><a href="http://www.dalsa.com/shared/content/OE_Magazine_Better_Mousetrap_Theuwissen.pdf"> <img src="http://www.dalsa.com/shared/content/images/PDF_icon_small.gif" border="0" alt="" /> Building a Better Moustrap</a> by Albert Theuwissen,  			in <a href="http://www.oemagazine.com/">OE Magazine</a>, January 2001 (54k PDF)</td>
</tr>
<tr>
<td class="small" align="center" valign="top"><a href="http://www.dalsa.com/shared/content/OE_Magazine_Dueling_Detectors_Janesick.pdf"> <img src="http://www.dalsa.com/shared/content/images/PDF_icon_small.gif" border="0" alt="" /> Dueling Detectors: CCD or CMOS?</a> by James Janesick,  			<a href="http://www.oemagazine.com/">OE Magazine</a>, February 2002 (195k PDF)</td>
</tr>
<tr>
<td class="small" align="center" valign="top"><a href="http://www.dalsa.com/dc/documents/Image_Sensor_Architecture_Whitepaper_Digital_Cinema_00218-00_03-70.pdf"> <img src="http://www.dalsa.com/shared/content/images/PDF_icon_small.gif" border="0" alt="" /> Image Sensor Architectures for Digital Cinema</a>,  			2004 (576k PDF)</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<p>CCD (charge coupled device) and CMOS (complementary metal oxide semiconductor) image sensors are two different technologies for capturing images digitally. Each has unique strengths and weaknesses giving advantages in different applications. Neither is categorically superior to the other, although vendors selling only one technology have usually claimed otherwise. In the last five years much has changed with both technologies, and many projections regarding the demise or ascendence of either have been proved false. The current situation and outlook for both technologies is vibrant, but a new framework exists for considering the relative strengths and opportunities of CCD and CMOS imagers.</p>
<p>Both types of imagers convert light into electric charge and process it into electronic signals.  In a <strong>CCD</strong> sensor, every pixel&#8217;s charge is transferred through a very limited number  of output nodes (often just one) to be converted to voltage, buffered, and sent off-chip as an analog signal. All of the pixel can be devoted to light capture, and the output&#8217;s uniformity (a key factor in image quality) is high.   In a <strong>CMOS</strong> sensor, each pixel has its own charge-to-voltage conversion, and the sensor often also includes amplifiers, noise-correction, and digitization circuits, so that the chip outputs digital bits. These other functions increase the design complexity and reduce the area available for light capture. With each pixel doing its own conversion, uniformity is lower. But the chip can be built to require less off-chip circuitry for basic operation. For more details on device architecture and operation, see our original &#8220;<a href="http://www.dalsa.com/shared/content/Photonics_Spectra_CCDvsCMOS_Litwiller.pdf">CCD vs. CMOS: Facts and Fiction</a>&#8221; article and its 2005 update,  &#8220;<a href="http://www.dalsa.com/shared/content/pdfs/CCD_vs_CMOS_Litwiller_2005.pdf">CMOS vs. CCD: Maturing Technologies, Maturing Markets</a>.&#8221;</p>
<p>CCDs and CMOS imagers were both invented in the late 1960s and 1970s (DALSA founder Dr. Savvas Chamberlain was a pioneer in developing both technologies). CCD became dominant, primarily because they gave far superior images with the fabrication technology available. CMOS image sensors required more uniformity and smaller features than silicon wafer foundries could deliver at the time. Not until the 1990s did lithography develop to the point that designers could begin making a case for CMOS imagers again. Renewed interest in CMOS was based on expectations of lowered power consumption, camera-on-a-chip integration, and lowered fabrication costs from the reuse of mainstream logic and memory device fabrication. While all of these benefits are possible in theory, achieving them in practice while simultaneously delivering high image quality has taken far more time, money, and process adaptation than original projections suggested (see &#8220;<a href="http://www.dalsa.com/markets/ccd_vs_cmos.asp#CMOSdev">CMOS Development&#8217;s Winding Path</a>&#8221; below).</p>
<p>Both CCDs and CMOS imagers can offer excellent imaging performance when designed properly. CCDs have traditionally provided the performance benchmarks in the photographic, scientific, and industrial applications that demand the highest image quality (as measured in quantum efficiency and noise) at the expense of system size. CMOS imagers offer more integration (more functions on the chip), lower power dissipation (at the chip level), and the possibility of smaller system size, but they have often required tradeoffs between image quality and device cost. Today there is no clear line dividing the types of applications each can serve. CMOS designers have devoted intense effort to achieving high image quality, while CCD designers have lowered their power requirements and pixel sizes. As a result, you can find CCDs in low-cost low-power cellphone cameras and CMOS sensors in high-performance professional and industrial cameras, directly contradicting the early stereotypes. It is worth noting that the producers succeeding with &#8220;crossovers&#8221; have almost always been established players with years of deep experience in both technologies.</p>
<p>Costs are similar at the chip level. Early CMOS proponents claimed CMOS imagers would be much cheaper because they could be produced on the same high-volume wafer processing lines as mainstream logic or memory chips. This has not been the case. The accommodations required for good imaging perfomance have required CMOS designers to iteratively develop specialized, optimized, lower-volume mixed-signal fabrication processes&#8211;very much like those used for CCDs. Proving out these processes at successively smaller lithography nodes (0.35um, 0.25um, 0.18um&#8230;) has been slow and expensive; those with a captive foundry have an advantage because they can better maintain the attention of the process engineers.</p>
<p>CMOS cameras may require fewer components and less power, but they still generally require companion chips to optimize image quality, increasing cost and reducing the advantage they gain from lower power consumption. CCD devices are less complex than CMOS, so they cost less to design. CCD fabrication processes also tend to be more mature and optimized; in general, it will cost less (in both design and fabrication) to yield a CCD than a CMOS imager for a specific high-performance application. However, wafer size can be a dominating influence on device cost; the larger the wafer, the more devices it can yield, and the lower the cost per device. 200mm is fairly common for third-party CMOS foundries while third-party CCD foundries tend to offer 150mm. Captive foundries use 150mm, 200mm, and 300mm production for both CCD and CMOS.</p>
<p>The larger issue around pricing is sustainability. Since many CMOS start-ups pursued high-volume, commodity applications from a small base of business, they  priced below costs to win business. For some, the risk paid off  and their volumes  provided enough margin for viability. But others had to raise their prices, while still others went out of business entirely.  High-risk startups can be interesting to venture capitalists, but imager customers require long-term stability and support.</p>
<p>While cost advantages have been difficult to realize and on-chip integration has been slow to arrive, speed is one area where CMOS imagers can demonstrate considerable strength because of the relative ease of parallel output structures. This gives them great potential in industrial applications.</p>
<p>CCDs and CMOS will remain complementary. The choice continues to depend on the application and the vendor more than the technology. DALSA&#8217;s approach is &#8220;technology-neutral&#8221;: we are one of the few vendors able to offer real solutions with both CCDs and CMOS.</p>
<h3>Feature and Performance Comparison</h3>
<table border="0" cellspacing="2" cellpadding="4">
<tbody>
<tr>
<td class="cellnohilite" valign="top"><span style="color:#ffffff;">Feature</span></td>
<td class="cellnohilite" valign="top"><span style="color:#ffffff;">CCD</span></td>
<td class="cellnohilite" valign="top"><span style="color:#ffffff;">CMOS</span></td>
</tr>
<tr bgcolor="#e0e4e8">
<td class="small" valign="top">Signal out of pixel</td>
<td class="small" valign="top">Electron packet</td>
<td class="small" valign="top">Voltage</td>
</tr>
<tr>
<td class="small" valign="top">Signal out of chip</td>
<td class="small" valign="top">Voltage (analog)</td>
<td class="small" valign="top">Bits (digital)</td>
</tr>
<tr bgcolor="#e0e4e8">
<td class="small" valign="top">Signal out of camera</td>
<td class="small" valign="top">Bits (digital)</td>
<td class="small" valign="top">Bits (digital)</td>
</tr>
<tr>
<td class="small" valign="top">Fill factor</td>
<td class="small" valign="top">High</td>
<td class="small" valign="top">Moderate</td>
</tr>
<tr bgcolor="#e0e4e8">
<td class="small" valign="top">Amplifier mismatch</td>
<td class="small" valign="top">N/A</td>
<td class="small" valign="top">Moderate</td>
</tr>
<tr>
<td class="small" valign="top">System Noise</td>
<td class="small" valign="top">Low</td>
<td class="small" valign="top">Moderate</td>
</tr>
<tr bgcolor="#e0e4e8">
<td class="small" valign="top">System Complexity</td>
<td class="small" valign="top">High</td>
<td class="small" valign="top">Low</td>
</tr>
<tr>
<td class="small" valign="top">Sensor Complexity</td>
<td class="small" valign="top">Low</td>
<td class="small" valign="top">High</td>
</tr>
<tr bgcolor="#e0e4e8">
<td class="small" valign="top">Camera components</td>
<td class="small" valign="top">Sensor + multiple support chips + lens</td>
<td class="small" valign="top">Sensor +  lens possible, but additional support chips common</td>
</tr>
<tr>
<td class="small" valign="top">Relative R&amp;D cost</td>
<td class="small" valign="top">Lower</td>
<td class="small" valign="top">Higher</td>
</tr>
<tr bgcolor="#e0e4e8">
<td class="small" valign="top">Relative system cost</td>
<td class="small" valign="top">Depends on Application</td>
<td class="small" valign="top">Depends on Application</td>
</tr>
<tr>
<td class="cellnohilite" valign="top"><span style="color:#ffffff;">Performance</span></td>
<td class="cellnohilite" valign="top"><span style="color:#ffffff;">CCD</span></td>
<td class="cellnohilite" valign="top"><span style="color:#ffffff;">CMOS</span></td>
</tr>
<tr>
<td class="small" valign="top">Responsivity</td>
<td class="small" valign="top">Moderate</td>
<td class="small" valign="top">Slightly better</td>
</tr>
<tr bgcolor="#e0e4e8">
<td class="small" valign="top">Dynamic Range</td>
<td class="small" valign="top">High</td>
<td class="small" valign="top">Moderate</td>
</tr>
<tr>
<td class="small" valign="top">Uniformity</td>
<td class="small" valign="top">High</td>
<td class="small" valign="top">Low to Moderate</td>
</tr>
<tr bgcolor="#e0e4e8">
<td class="small" valign="top">Uniform Shuttering</td>
<td class="small" valign="top">Fast, common</td>
<td class="small" valign="top">Poor</td>
</tr>
<tr>
<td class="small" valign="top">Uniformity</td>
<td class="small" valign="top">High</td>
<td class="small" valign="top">Low to Moderate</td>
</tr>
<tr bgcolor="#e0e4e8">
<td class="small" valign="top">Speed</td>
<td class="small" valign="top">Moderate to High</td>
<td class="small" valign="top">Higher</td>
</tr>
<tr>
<td class="small" valign="top">Windowing</td>
<td class="small" valign="top">Limited</td>
<td class="small" valign="top">Extensive</td>
</tr>
<tr bgcolor="#e0e4e8">
<td class="small" valign="top">Antiblooming</td>
<td class="small" valign="top">High to none</td>
<td class="small" valign="top">High</td>
</tr>
<tr>
<td class="small" valign="top">Biasing and Clocking</td>
<td class="small" valign="top">Multiple, higher voltage</td>
<td class="small" valign="top">Single, low-voltage</td>
</tr>
<tr bgcolor="#e0e4e8">
<td class="small" valign="top"></td>
<td class="small" valign="top"></td>
<td class="small" valign="top"></td>
</tr>
</tbody>
</table>
<h3><a name="CMOSdev"></a>CMOS Development&#8217;s Winding Path</h3>
<table border="0" cellspacing="2" cellpadding="4">
<tbody>
<tr>
<td class="cellnohilite" valign="top"><span style="color:#ffffff;">Initial Prediction for CMOS</span></td>
<td class="cellnohilite" valign="top"><span style="color:#ffffff;">Twist</span></td>
<td class="cellnohilite" valign="top"><span style="color:#ffffff;">Outcome</span></td>
</tr>
<tr bgcolor="#e0e4e8">
<td class="small" valign="top">Equivalence to CCD in imaging performance</td>
<td class="small" valign="top">Required much greater process adaptation and deeper submicron lithography than initially thought</td>
<td class="small" valign="top">High performance available in CMOS, but with higher development cost than CCD</td>
</tr>
<tr>
<td class="small" valign="top">On-chip circuit integration</td>
<td class="small" valign="top">Longer development cycles, increased cost, tradeoffs with noise, flexibility during operation</td>
<td class="small" valign="top">Greater integration in CMOS, but companion chips still required for both CMOS and CCD</td>
</tr>
<tr bgcolor="#e0e4e8">
<td class="small" valign="top">Reduced power consumption</td>
<td class="small" valign="top">Steady improvement in CCDs</td>
<td class="small" valign="top">Advantage for CMOS, but margin diminished</td>
</tr>
<tr>
<td class="small" valign="top">Reduced imaging subsystem size</td>
<td class="small" valign="top">Optics, companion chips and packaging are often the dominant factors in imaging subsystem size</td>
<td class="small" valign="top">CCDs and CMOS comparable</td>
</tr>
<tr bgcolor="#e0e4e8">
<td class="small" valign="top">Economies of scale from using mainstream logic and memory foundries</td>
<td class="small" valign="top">Extensive process development and optimization required</td>
<td class="small" valign="top">CMOS imagers use legacy production lines  with highly adapted processes akin to CCD fabrication</td>
</tr>
</tbody>
</table>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/progettistamultimediale.wordpress.com/44/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/progettistamultimediale.wordpress.com/44/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/progettistamultimediale.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/progettistamultimediale.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/progettistamultimediale.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/progettistamultimediale.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/progettistamultimediale.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/progettistamultimediale.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/progettistamultimediale.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/progettistamultimediale.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/progettistamultimediale.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/progettistamultimediale.wordpress.com/44/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=progettistamultimediale.wordpress.com&blog=4169703&post=44&subd=progettistamultimediale&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://progettistamultimediale.wordpress.com/2008/07/10/ccd-vs-cmos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/32899e130d85c12989fd68f0a31735bc?s=96&#38;d=identicon" medium="image">
			<media:title type="html">progettistamultimediale</media:title>
		</media:content>

		<media:content url="http://www.dalsa.com/shared/content/images/iaga_4meg_100w.jpg" medium="image" />

		<media:content url="http://www.dalsa.com/shared/content/images/tri8.gif" medium="image" />

		<media:content url="http://www.dalsa.com/shared/content/mediakit/assets/piranha3_12k_100h.jpg" medium="image" />

		<media:content url="http://www.dalsa.com/shared/content/images/tri8.gif" medium="image" />

		<media:content url="http://www.dalsa.com/shared/content/images/thumbnail_cmosvsccd_2005_update.jpg" medium="image">
			<media:title type="html">Maturing Technologies, Maturing Markets</media:title>
		</media:content>

		<media:content url="http://www.dalsa.com/shared/content/images/thumbnail_ccdvscmos.jpg" medium="image">
			<media:title type="html">Facts and Fiction</media:title>
		</media:content>

		<media:content url="http://www.dalsa.com/shared/content/images/PDF_icon_small.gif" medium="image" />

		<media:content url="http://www.dalsa.com/shared/content/images/PDF_icon_small.gif" medium="image" />

		<media:content url="http://www.dalsa.com/shared/content/images/PDF_icon_small.gif" medium="image" />

		<media:content url="http://www.dalsa.com/shared/content/images/PDF_icon_small.gif" medium="image" />

		<media:content url="http://www.dalsa.com/shared/content/images/PDF_icon_small.gif" medium="image" />
	</item>
		<item>
		<title>Nuova serie S COOLPIX Nikon</title>
		<link>http://progettistamultimediale.wordpress.com/2008/07/09/nuova-serie-s-coolpix-nikon/</link>
		<comments>http://progettistamultimediale.wordpress.com/2008/07/09/nuova-serie-s-coolpix-nikon/#comments</comments>
		<pubDate>Wed, 09 Jul 2008 09:47:15 +0000</pubDate>
		<dc:creator>progettistamultimediale</dc:creator>
				<category><![CDATA[Fotografia Digitale]]></category>
		<category><![CDATA[Nuova serie S COOLPIX Nikon]]></category>

		<guid isPermaLink="false">http://progettistamultimediale.wordpress.com/?p=43</guid>
		<description><![CDATA[Torino, 29-01-2008
Le nuove fotocamere S600, S550, S520 e S210 sono belle,                    eleganti, e divertenti
Nikon ha il piacere di annunciare oggi quattro nuove eleganti fotocamere digitali compatte della serie COOLPIX Style. Le nuove S600, S550, S520 e [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=progettistamultimediale.wordpress.com&blog=4169703&post=43&subd=progettistamultimediale&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><span class="date">Torino, 29-01-2008</span></p>
<p class="date">Le nuove fotocamere S600, S550, S520 e S210 sono belle,                    eleganti, e divertenti</p>
<p>Nikon ha il piacere di annunciare oggi <strong>quattro</strong> nuove eleganti fotocamere digitali compatte della serie <strong>COOLPIX Style</strong>. Le nuove <span class="arancio">S600</span>, <span class="arancio">S550</span>, <span class="arancio">S520 </span>e <span class="arancio">S210</span> sono funzionali ed eleganti e dispongono della <strong>stabilizzazione VR</strong> di Nikon che consente agli utenti di ottenere risultati fantastici.<br />
Tra le più compatte della loro categoria, le nuove fotocamere della serie S vantano un <strong>avvio rapido</strong> e funzionalità fotografiche eccezionali. La funzione <strong>Sorriso</strong>, ad esempio, consente di scattare le fotografie automaticamente mediante l&#8217;analisi dell&#8217;espressione del soggetto scelto e pertanto assicura un sorriso perfetto durante la ripresa di un momento speciale. Un&#8217;altra funzione importante è il modo <strong>Bambini attivi</strong>, per fotografare i bambini in rapido movimento. &#8220;Le fotocamere della serie S sono fantastiche come le fotografie che scattano&#8221;, ha affermato Martina Beckmann, Marketing&amp;Communication Manager di Nikon Europe. &#8220;Grazie al <strong>design elegante e pratico</strong>, alla sorprendente <strong>ottica NIKKOR</strong> ed alla <strong>stabilizzazione dell&#8217;immagine</strong>, le nuove <span class="arancio">COOLPIX serie S</span> possono essere portate ovunque per realizzare in ogni contesto immagini meravigliose&#8221;.</p>
<p align="center"><span class="titoli"><span class="dida"><img src="http://www.nital.it/press/images/puntini.gif" alt="" width="483" height="10" /></span></span></p>
<p><span class="titoli">COOLPIX S600</span><br />
La <span class="arancio">COOLPIX S600</span> offre una <strong>risoluzione da 10 megapixel</strong> nel corpo più piccolo in assoluto della sua categoria(*) e presenta una parte esterna in elegante metallo che suggerisce le novità più avanzate della tecnologia. La <span class="arancio">S600</span> è dotata di un <strong>obiettivo grandangolare 4x</strong> (equivalente a 28 – 112 mm) e dispone della tecnologia incorporata di decentramento di <strong>stabilizzazione VR</strong> per ridurre gli effetti causati dal movimento della fotocamera, il tutto in <strong>dimensioni estremamente ridotte</strong> (soli 88,5 (L) x 53 (A) x 22,5 (P) mm e un peso di 130 grammi).</p>
<table class="image" border="0" cellspacing="3" cellpadding="0" width="410" align="center">
<tbody>
<tr>
<td>
<div><img src="http://www.nital.it/press/2008/images/s600.jpg" alt="Coolpix S600" width="400" height="233" /></div>
</td>
</tr>
</tbody>
</table>
<p>La <span class="arancio">S600</span> consente agli utenti di inquadrare le immagini su un <strong>ampio schermo LCD</strong> da 2,7 pollici e 230.000 punti, dotato di un <strong>grandangolo da 160 gradi</strong> e di una <strong>protezione contro le impronte digitali</strong> assicurata da un rivestimento in fluoruro di magnesio. La <span class="arancio">S600</span> dispone di un&#8217;<strong>ampia gamma di sensibilità</strong> che arriva fino a ISO 3200 con la possibilità di usufruire del <strong>controllo ISO automatico</strong>. Progettata intorno alla rapidità di elaborazione e all&#8217;elevata qualità di immagine fornite dall&#8217;esclusiva tecnologia <strong>Nikon EXPEED</strong>, la <span class="arancio">S600</span> garantisce una <strong>risposta rapidissima</strong> (tempo di avvio pari a 0,6 secondi; ritardo allo scatto inferiore a 0,005 secondi).<br />
Grazie al <strong>multi-selettore a rotazione</strong> che rende facile e rapida la scelta delle diverse funzioni disponibili, la <span class="arancio">S600</span> è molto semplice da utilizzare. Il modo <strong>Bambini attivi</strong>, l&#8217;<strong>autofocus con priorità sul volto</strong>, che rileva e mette a fuoco fino a 12 volti, la <strong>Correzione automatica effetto occhi rossi</strong> e la <strong>funzione D-Lighting</strong>, che migliora le immagini sottoesposte, consentono al fotografo di ottenere risultati ottimali.<br />
La <span class="arancio">S600</span>, disponibile nei colori <strong>argento</strong> e <strong>nero</strong> ad un prezzo suggerito al pubblico che è di <strong>320 euro</strong>, dispone di una<strong> memoria interna pari a 45 MB</strong> ed è compatibile con le schede di memoria SD (compatibile con SDHC). Sono inclusi una batteria ricaricabile Li-ion, un caricabatterie, un cavo USB, un cavo AV, una cinghia, un cavo di alimentazione CA e un CD-ROM con la suite di software Nikon.</p>
<p align="center"><span class="titoli"><span class="dida"><img src="http://www.nital.it/press/images/puntini.gif" alt="" width="483" height="10" /></span></span></p>
<p><span class="titoli">COOLPIX S550</span><br />
La <span class="arancio">COOLPIX S550</span>, la fotocamera digitale compatta più piccola al mondo (**), dispone di uno <strong>zoom ottico 5x</strong> (36 – 178 mm), di una <strong>risoluzione da 10 megapixel</strong> e di un <strong>monitor LCD da 2,5 pollici</strong> e 230.000 punti con <strong>grandangolo</strong>. Racchiusa in un corpo in lega di alluminio di elevata qualità, l&#8217;elegante<span class="arancio"> S550</span> offre una <strong>velocità di risposta invidiabile</strong>. Inoltre, vanta le nuove funzioni di <strong>avviso occhi chiusi</strong> e di <strong>riconoscimento dei sorrisi</strong>, che consente di scattare automaticamente la fotografia quando viene rilevato un sorriso.<br />
Disponibile in colori moderni e accattivanti (<strong>argento</strong>, <strong>nero</strong> e <strong>blu</strong>), la <span class="arancio">S550</span> viene proposta ad un prezzo consigliato al pubblico di<strong> 260 euro</strong>. La fotocamera misura solo 90 x 53,5 x 22 mm, pesa 120 grammi e utilizza l&#8217;innovativo sistema di elaborazione delle immagini digitali <strong>Nikon EXPEED</strong>.</p>
<table class="image" border="0" cellspacing="3" cellpadding="0" width="410" align="center">
<tbody>
<tr>
<td>
<div><img src="http://www.nital.it/press/2008/images/s550.jpg" alt="Coolpix S550" width="400" height="259" /></div>
</td>
</tr>
</tbody>
</table>
<p align="center"><span class="titoli"><span class="dida"><img src="http://www.nital.it/press/images/puntini.gif" alt="" width="483" height="10" /></span></span></p>
<p align="justify"><span class="titoli">COOLPIX S520</span><br />
La <span class="arancio">COOLPIX S520</span> offre una <strong>risoluzione da 8 megapixel</strong> e uno <strong>schermo da 2,5 pollici</strong> con <strong>rivestimento antiriflesso</strong>, integrati in un corpo elegante, leggero e rifinito in alluminio. È dotata di un <strong>obiettivo Zoom-NIKKOR 3x</strong> (35 – 105 mm) con <strong>decentramento ottico VR</strong> per la stabilizzazione delle immagini. La <span class="arancio">S520</span> offre anche molti modi di ripresa per rendere la fotografia facile e divertente, ad esempio il modo di <strong>selezione della scena preferita</strong>, la funzione di <strong>classificazione album</strong> e l&#8217;opzione <strong>Zoom sul volto</strong>. È persino disponibile il nuovo modo <strong>Alimenti</strong> per catturare i ricchi dettagli di una cena elegante, quando la fotografia flash è vietata. La <span class="arancio">S520</span> è disponibile nei colori <strong>bronzo</strong>, <strong>nero</strong> e <strong>viola</strong> ad un prezzo consigliato al pubblico di <strong>260 euro</strong>.</p>
<table class="image" border="0" cellspacing="3" cellpadding="0" width="410" align="center">
<tbody>
<tr>
<td>
<div><img src="http://www.nital.it/press/2008/images/s520.jpg" alt="Coolpix S520" width="400" height="234" /></div>
</td>
</tr>
</tbody>
</table>
<p align="center"><span class="titoli"><span class="dida"><img src="http://www.nital.it/press/images/puntini.gif" alt="" width="483" height="10" /></span></span></p>
<p><span class="titoli"> COOLPIX S210</span><br />
Il <strong>design sottile</strong> e <strong>intuitivo</strong>, lo <strong>schermo LCD di elevata qualità</strong> da 230.000 punti e l&#8217;ottica Nikkor che include la Riduzione Vibrazioni VR sono alcune delle peculiarità che contraddistinguono lo stile accessibile e le potenzialità di scatto della <span class="arancio">COOLPIX S210</span>. Modello successivo rispetto alla fotocamera <span class="arancio">S200</span>, venduta in milioni di pezzi, la <span class="arancio">S210</span> è dotata di una <strong>risoluzione da 8 megapixel</strong> incorporata in un corpo sottile (18 mm) perfettamente adattabile alla mano e alla tasca. La <span class="arancio">S210</span> è dotata di un <strong>obiettivo zoom 3x</strong> (38 – 114 mm) e di uno <strong>schermo LCD grandangolare da 2,5 pollici</strong> e consente di scattare fotografie belle come il corpo rifinito in alluminio che la caratterizza. Inoltre, vanta una <strong>velocità di elaborazione</strong> e una <strong>qualità d&#8217;immagine</strong> potenziate grazie al modulo di elaborazione delle immagini <strong>Nikon EXPEED</strong>. La <span class="arancio">S210</span> offre un range di <strong>sensibilità estendibile fino a ISO 2000</strong> ed un modo automatico che seleziona l&#8217;impostazione migliore in caso di luce debole. La fotocamera include anche una nuova funzione di <strong>riconoscimento dei visi </strong>più rapida, che assicura un autofocus veloce e intelligente durante lo scatto di ritratti. La <span class="arancio">S210</span> è disponibile nei colori <strong>argento</strong>, <strong>nero</strong>, <strong>blu</strong>, <strong>rosa</strong> e <strong>rosso</strong> ad un prezzo suggerito al pubblico di <strong>190 euro</strong>.</p>
<table class="image" border="0" cellspacing="3" cellpadding="0" width="410" align="center">
<tbody>
<tr>
<td>
<div><img src="http://www.nital.it/press/2008/images/s210.jpg" alt="Coolpix S210" width="400" height="100" /></div>
</td>
</tr>
</tbody>
</table>
<p align="center"><span class="titoli"><span class="dida"><img src="http://www.nital.it/press/images/puntini.gif" alt="" width="483" height="10" /></span></span></p>
<p><em><strong>Note</strong></em></p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr valign="top">
<td width="6%">(*)</td>
<td width="94%">Rispetto alle fotocamere digitali compatte dotate di obiettivo zoom da 28 mm (formato 35 mm) e del sistema di riduzione delle vibrazioni, al 29 gennaio 2008 (secondo una ricerca condotta da NIKON CORPORATION).</td>
</tr>
<tr valign="top">
<td>(**)</td>
<td>Rispetto ai modelli della concorrenza con 10 megapixel effettivi dotati di zoom 5x retrattile, al 29 gennaio 2008 (secondo una ricerca condotta da NIKON CORPORATION).</td>
</tr>
</tbody>
</table>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/progettistamultimediale.wordpress.com/43/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/progettistamultimediale.wordpress.com/43/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/progettistamultimediale.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/progettistamultimediale.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/progettistamultimediale.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/progettistamultimediale.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/progettistamultimediale.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/progettistamultimediale.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/progettistamultimediale.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/progettistamultimediale.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/progettistamultimediale.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/progettistamultimediale.wordpress.com/43/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=progettistamultimediale.wordpress.com&blog=4169703&post=43&subd=progettistamultimediale&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://progettistamultimediale.wordpress.com/2008/07/09/nuova-serie-s-coolpix-nikon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/32899e130d85c12989fd68f0a31735bc?s=96&#38;d=identicon" medium="image">
			<media:title type="html">progettistamultimediale</media:title>
		</media:content>

		<media:content url="http://www.nital.it/press/images/puntini.gif" medium="image" />

		<media:content url="http://www.nital.it/press/2008/images/s600.jpg" medium="image">
			<media:title type="html">Coolpix S600</media:title>
		</media:content>

		<media:content url="http://www.nital.it/press/images/puntini.gif" medium="image" />

		<media:content url="http://www.nital.it/press/2008/images/s550.jpg" medium="image">
			<media:title type="html">Coolpix S550</media:title>
		</media:content>

		<media:content url="http://www.nital.it/press/images/puntini.gif" medium="image" />

		<media:content url="http://www.nital.it/press/2008/images/s520.jpg" medium="image">
			<media:title type="html">Coolpix S520</media:title>
		</media:content>

		<media:content url="http://www.nital.it/press/images/puntini.gif" medium="image" />

		<media:content url="http://www.nital.it/press/2008/images/s210.jpg" medium="image">
			<media:title type="html">Coolpix S210</media:title>
		</media:content>

		<media:content url="http://www.nital.it/press/images/puntini.gif" medium="image" />
	</item>
		<item>
		<title>Fotocamera compatta Nikon COOLPIX P60</title>
		<link>http://progettistamultimediale.wordpress.com/2008/07/09/fotocamera-compatta-nikon-coolpix-p60/</link>
		<comments>http://progettistamultimediale.wordpress.com/2008/07/09/fotocamera-compatta-nikon-coolpix-p60/#comments</comments>
		<pubDate>Wed, 09 Jul 2008 09:45:38 +0000</pubDate>
		<dc:creator>progettistamultimediale</dc:creator>
				<category><![CDATA[Fotografia Digitale]]></category>
		<category><![CDATA[Fotocamera compatta Nikon COOLPIX P60]]></category>

		<guid isPermaLink="false">http://progettistamultimediale.wordpress.com/?p=42</guid>
		<description><![CDATA[Torino, 29-01-2008
La risoluzione da 8,1 megapixel, lo zoom ottico 5x e la Riduzione Vibrazioni assicurano incredibili possibilità di scatto









Nikon ha il piacere di annunciare oggi la nuova Nikon COOLPIX P60, una fotocamera digitale compatta dotata di una risoluzione da 8,1 megapixel, obiettivo Zoom-NIKKOR 5x e ampio schermo LCD da 2,5 pollici e contraddistinta da un [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=progettistamultimediale.wordpress.com&blog=4169703&post=42&subd=progettistamultimediale&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><span class="date">Torino, 29-01-2008</span></p>
<p class="date">La risoluzione da 8,1 megapixel, lo zoom ottico 5x e la Riduzione Vibrazioni assicurano incredibili possibilità di scatto</p>
<table class="image" border="0" cellspacing="3" cellpadding="0" width="410" align="center">
<tbody>
<tr>
<td>
<div><img src="http://www.nital.it/press/2008/images/p60_logo.jpg" alt="Coolpix P60" width="400" height="45" /></div>
</td>
</tr>
</tbody>
</table>
<p>Nikon ha il piacere di annunciare oggi la nuova <span class="arancio">Nikon COOLPIX P60</span>, una fotocamera digitale compatta dotata di una <strong>risoluzione da 8,1 megapixel</strong>, obiettivo <strong>Zoom-NIKKOR 5x</strong> e ampio <strong>schermo LCD da 2,5 pollici</strong> e contraddistinta da un corpo camera tradizionale ed elegante ed allo stesso tempo compatto e leggero. La <span class="arancio">P60</span> è dotata della tecnologia <strong>Riduzione Vibrazioni VR</strong> di Nikon, di un&#8217;ampia gamma di <strong>funzioni di ottimizzazione foto</strong> e di un <strong>pratico selettore dei modi</strong> per trasmettere i comandi. Compatibile con batterie AA, la <span class="arancio">P60</span> attrarrà gli appassionati di fotografia grazie al suo &#8220;classico&#8221; design (l&#8217;unico colore disponibile è il <strong>nero</strong>) compatto ed alle sue prestazioni professionali. &#8220;La <span class="arancio">COOLPIX P60</span> offre, in un corpo camera facilmente impugnabile, funzioni e qualità di alto livello&#8221;, ha affermato Martina Beckmann, Marketing&amp;Communication Manager di Nikon Europe. &#8220;L&#8217;ergonomia, il potente obiettivo zoom e le caratteristiche avanzate, rendono la <span class="arancio">P60</span> la scelta ideale per chi desidera scattare immagini sorprendenti con una fotocamera compatta&#8221;.</p>
<table class="image" border="0" cellspacing="3" cellpadding="0" width="410" align="center">
<tbody>
<tr>
<td>
<div><img src="http://www.nital.it/press/2008/images/p60_1.jpg" alt="Coolpix P60" width="400" height="241" /></div>
</td>
</tr>
</tbody>
</table>
<p><span class="titoli">Maneggevolezza e semplicità di utilizzo</span><br />
La <span class="arancio">P60</span> ha l&#8217;aspetto piacevole di una fotocamera tradizionale. Progettata per un funzionamento intuitivo, è dotata di un&#8217;<strong>impugnatura comoda</strong> che fornisce stabilità durante la ripresa; il corpo camera comodo e dalle dimensioni compatte è contraddistinto dallo <strong>schermo LCD grandangolare da 2,5 pollici</strong>, dal <strong>mirino elettronico</strong> dotato di display dati di ripresa (in cui l&#8217;inquadratura dell&#8217;immagine risulta estremamente semplice) e dall&#8217;intuitivo <strong>selettore dei modi </strong>della fotocamera, che consente agli utenti di spostarsi facilmente dai modi manuali a quelli automatici. Nel modo di esposizione <strong>Auto Programmata</strong> [P], la fotocamera seleziona automaticamente il tempo di posa e il diaframma per ottenere un&#8217;esposizione ottimale, mentre il modo <strong>Manuale</strong> [M] consente agli utenti di scegliere queste due impostazioni per un maggiore controllo dei risultati. Nella fotocamera sono inclusi <strong>15 Modi scena</strong> ottimizzati per situazioni predefinite, quali Ritratto, Paesaggio, Ritratto notturno, Sport, Feste/Interni, Ripresa ravvicinata, Museo e persino Fuochi artificiali. La <span class="arancio">P60</span> consente anche di <strong>registrare filmati con audio</strong> a 640 x 480 pixel e 30 fotogrammi al secondo. Le immagini vengono salvate su una scheda di memoria SD rimovibile o sulla memoria interna da 12 MB.</p>
<p><span class="titoli">Obiettivo e qualità d&#8217;immagine</span><br />
La <span class="arancio">P60</span> è dotata di un <strong>obiettivo Zoom-NIKKOR 5x</strong> che offre una <strong>precisione straordinaria</strong> e una <strong>risoluzione estremamente nitida</strong>. L&#8217;obiettivo dispone di una <strong>lunghezza focale pari a 6,4 – 32 mm</strong>, equivalente a 36 mm – 180 mm nel formato 35 mm e di <strong>impostazioni del diaframma che variano da f/3.6 a 4.5</strong>. La fotocamera può essere utilizzata in diverse condizioni di illuminazione, grazie alla sua <strong>gamma ISO compresa tra 80 e 2000</strong>, che consente pertanto tempi di posa più brevi per evitare l&#8217;effetto mosso dei soggetti o in caso di riprese in luoghi non sufficientemente illuminati. Inoltre, il modulo di elaborazione delle immagini <strong>Nikon EXPEED</strong> della <span class="arancio">P60</span> offre una velocità di elaborazione e una qualità d&#8217;immagine incredibili. Per ottenere risultati chiari e stabili durante la ripresa di immagini fisse e filmati, la <strong>tecnologia VR </strong>del sensore riduce l&#8217;effetto del movimento della fotocamera utilizzata a mano libera che può verificarsi in caso di tempi di posa lunghi. La <span class="arancio">P60</span> dispone di un&#8217;<strong>escursione focale</strong> compresa all&#8217;incirca tra 30 cm e infinito. Il modo <strong>macro</strong> permette di scattare fotografie da una distanza pari a 10 cm dal soggetto, mentre la nuova funzione <strong>Zoom attivo</strong> consente uno zoom uniforme per le riprese ravvicinate.</p>
<table class="image" border="0" cellspacing="3" cellpadding="0" width="410" align="center">
<tbody>
<tr>
<td>
<div><img src="http://www.nital.it/press/2008/images/p60_2.jpg" alt="Coolpix P60" width="400" height="223" /></div>
</td>
</tr>
</tbody>
</table>
<p><span class="titoli">Innovazioni nella fotografia</span><br />
La <span class="arancio">P60</span> offre molte innovazioni incorporate che consentono di scattare facilmente <strong>ritratti</strong> bellissimi. Una versione avanzata dell&#8217;<strong>autofocus con priorità sul volto</strong> consente di rilevare con precisione fino a 5 volti. Un&#8217;altra funzione è la <strong>Correzione automatica effetto occhi rossi</strong>, che utilizza l&#8217;elaborazione digitale per ripristinare il colore naturale degli occhi in caso di uso del flash. Una terza innovazione nelle immagini è rappresentata dalla funzione <strong>D-Lighting</strong> di Nikon, molto più rapida rispetto al passato. Utilizzata nella fotocamera durante la visione play e senza necessità di un computer, compensa i casi di controluce eccessivo o di flash insufficiente.</p>
<p><span class="titoli">Accessori e prezzi</span><br />
La <span class="arancio">P60</span> viene fornita con due batterie alcaline formato AA, un cavo USB, un cavo audio/video, una cinghia e un CD-ROM con la suite di software per le COOLPIX. Sono disponibili, come accessori opzionali, un caricabatterie, batterie ricaricabili NI-MH e un adattatore CA. Le dimensioni della <span class="arancio">P60</span> con obiettivo retratto sono pari a 95,5 (L) x 63,5 (A) x 36 (P) mm. Il peso è di circa 160 grammi senza batteria e scheda di memoria SD. Il prezzo suggerito al pubblico per la <span class="arancio">P60</span> è di <strong>250 euro</strong>.</p>
<div><img src="http://www.nital.it/press/2008/images/p60_3.jpg" alt="Coolpix P60" width="400" height="163" /></div>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/progettistamultimediale.wordpress.com/42/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/progettistamultimediale.wordpress.com/42/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/progettistamultimediale.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/progettistamultimediale.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/progettistamultimediale.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/progettistamultimediale.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/progettistamultimediale.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/progettistamultimediale.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/progettistamultimediale.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/progettistamultimediale.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/progettistamultimediale.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/progettistamultimediale.wordpress.com/42/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=progettistamultimediale.wordpress.com&blog=4169703&post=42&subd=progettistamultimediale&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://progettistamultimediale.wordpress.com/2008/07/09/fotocamera-compatta-nikon-coolpix-p60/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/32899e130d85c12989fd68f0a31735bc?s=96&#38;d=identicon" medium="image">
			<media:title type="html">progettistamultimediale</media:title>
		</media:content>

		<media:content url="http://www.nital.it/press/2008/images/p60_logo.jpg" medium="image">
			<media:title type="html">Coolpix P60</media:title>
		</media:content>

		<media:content url="http://www.nital.it/press/2008/images/p60_1.jpg" medium="image">
			<media:title type="html">Coolpix P60</media:title>
		</media:content>

		<media:content url="http://www.nital.it/press/2008/images/p60_2.jpg" medium="image">
			<media:title type="html">Coolpix P60</media:title>
		</media:content>

		<media:content url="http://www.nital.it/press/2008/images/p60_3.jpg" medium="image">
			<media:title type="html">Coolpix P60</media:title>
		</media:content>
	</item>
		<item>
		<title>NIKKOR 16-85 mm</title>
		<link>http://progettistamultimediale.wordpress.com/2008/07/09/nikkor-16-85-mm/</link>
		<comments>http://progettistamultimediale.wordpress.com/2008/07/09/nikkor-16-85-mm/#comments</comments>
		<pubDate>Wed, 09 Jul 2008 09:42:55 +0000</pubDate>
		<dc:creator>progettistamultimediale</dc:creator>
				<category><![CDATA[Fotografia Digitale]]></category>
		<category><![CDATA[NIKKOR 16-85 mm]]></category>

		<guid isPermaLink="false">http://progettistamultimediale.wordpress.com/?p=40</guid>
		<description><![CDATA[AF-S DX NIKKOR 16-85 mm f/3.5-5.6G ED VR
Torino, 29-01-2008
Zoom grandangolare 5,3x con sistema VR per fotocamere Nikon formato DX









Nikon ha il piacere di annunciare il nuovo obiettivo AF-S DX NIKKOR 16-85 mm f/3.5-5.6G ED VR, contraddistinto da un ampio rapporto di zoom pari a 5,3x. Si tratta del primo obiettivo grandangolare da 16 mm dotato [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=progettistamultimediale.wordpress.com&blog=4169703&post=40&subd=progettistamultimediale&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><strong>AF-S DX NIKKOR 16-85 mm f/3.5-5.6G ED VR</strong></p>
<p><span class="date">Torino, 29-01-2008</span></p>
<p class="date">Zoom grandangolare 5,3x con sistema VR per fotocamere Nikon formato DX</p>
<table class="image" border="0" cellspacing="3" cellpadding="0" width="410" align="center">
<tbody>
<tr>
<td>
<div><img src="http://www.nital.it/press/2008/images/afs_1685mm_particolare.jpg" alt="PC-E NIKKOR 24 mm f/3.5D ED" width="400" height="121" /></div>
</td>
</tr>
</tbody>
</table>
<p><strong>Nikon</strong> ha il piacere di annunciare il nuovo obiettivo <span class="arancio">AF-S DX NIKKOR 16-85 mm f/3.5-5.6G ED VR</span>, contraddistinto da un ampio <strong>rapporto di zoom pari a 5,3x</strong>. Si tratta del primo obiettivo grandangolare da 16 mm dotato dell&#8217;esclusiva tecnologia Nikon di <strong>riduzione vibrazioni VR II</strong>, che consente di scattare con tempi di posa fino a quattro stop più lunghi rispetto a quanto sarebbe possibile senza tale sistema.</p>
<table class="imagedida" border="0" cellspacing="3" cellpadding="0" width="260" align="right">
<tbody>
<tr>
<td><img class="imagedida" src="http://www.nital.it/press/2008/images/afs_1685mm.jpg" alt="" width="250" height="317" /></td>
</tr>
</tbody>
</table>
<p>Destinato agli utenti delle fotocamere <strong>reflex digitali Nikon</strong>, l&#8217;obiettivo <span class="arancio">AF-S DX NIKKOR 16-85 mm f/3.5-5.6G ED VR</span> dispone di un obiettivo zoom grandangolare da <strong>16 mm</strong>, ideale per <strong>paesaggi</strong> e<strong> foto d’interni</strong>, che si spinge fino a <strong>85 mm</strong>, perfetto per i <strong>ritratti</strong>. Progettato per tutti gli appassionati, professionisti e non, il nuovo obiettivo Nikkor è perfetto per la <strong>fotografia da viaggio e naturalistica</strong>, grazie ad una messa a fuoco ravvicinata di soli 0,38 m per l&#8217;intera portata dello zoom. L&#8217;obiettivo <span class="arancio">AF-S DX NIKKOR 16-85 mm f/3.5-5.6G ED VR</span> è estremamente compatto (dimensioni: 72 x 85 mm), e dispone di una filettatura di fissaggio di 67 mm senza rotazione.</p>
<p>&#8220;Grazie alla duplice funzionalità di ripresa grandangolare e ravvicinata, l&#8217;obiettivo grandangolare 16-85 mm f/3.5-5.6G ED VR risulta una scelta ottimale per interni, matrimoni, ritratti e molto altro&#8221; ha affermato Robert Cristina, Responsabile di Professional Products e NPS, Nikon Europe BV. &#8220;Compatto e funzionale, con un peso di soli 485 grammi, è l&#8217;obiettivo avanzato da portare con sé in ogni occasione&#8221;.</p>
<p>L&#8217;obiettivo dispone di un <strong>autofocus rapido e silenzioso</strong>, grazie al motore Silent Wave di Nikon. La tecnologia di <strong>Riduzione Vibrazioni VR II</strong> incorporata nell&#8217;<span class="arancio">AF-S DX NIKKOR 16-85 mm f/3.5-5.6G ED VR</span> include sia il modo <strong>Normale</strong>, sia quello <strong>Attivo</strong>, assicurando risultati nitidi e accurati anche in condizioni di illuminazione molto scarsa.</p>
<p>L&#8217;<strong>AF-S DX NIKKOR 16-85 mm f/3.5-5.6G ED VR</strong> è stato concepito secondo la formula vincente del famoso obiettivo <strong>NIKKOR 24-120 mm V</strong>R, ma pesa <strong>90 g</strong> di meno. Grazie ai due elementi in <strong>vetro ED</strong> ed alla tecnologia di <strong>Riduzione Vibrazioni VR II</strong>, è possibile ottenere immagini di alta qualità e contrasto elevato, riducendo al minimo le immagini fantasma e i riflessi indesiderati..</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/progettistamultimediale.wordpress.com/40/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/progettistamultimediale.wordpress.com/40/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/progettistamultimediale.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/progettistamultimediale.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/progettistamultimediale.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/progettistamultimediale.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/progettistamultimediale.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/progettistamultimediale.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/progettistamultimediale.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/progettistamultimediale.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/progettistamultimediale.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/progettistamultimediale.wordpress.com/40/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=progettistamultimediale.wordpress.com&blog=4169703&post=40&subd=progettistamultimediale&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://progettistamultimediale.wordpress.com/2008/07/09/nikkor-16-85-mm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/32899e130d85c12989fd68f0a31735bc?s=96&#38;d=identicon" medium="image">
			<media:title type="html">progettistamultimediale</media:title>
		</media:content>

		<media:content url="http://www.nital.it/press/2008/images/afs_1685mm_particolare.jpg" medium="image">
			<media:title type="html">PC-E NIKKOR 24 mm f/3.5D ED</media:title>
		</media:content>

		<media:content url="http://www.nital.it/press/2008/images/afs_1685mm.jpg" medium="image" />
	</item>
		<item>
		<title>NIKKOR</title>
		<link>http://progettistamultimediale.wordpress.com/2008/07/09/nikkor/</link>
		<comments>http://progettistamultimediale.wordpress.com/2008/07/09/nikkor/#comments</comments>
		<pubDate>Wed, 09 Jul 2008 09:41:38 +0000</pubDate>
		<dc:creator>progettistamultimediale</dc:creator>
				<category><![CDATA[Fotografia Digitale]]></category>
		<category><![CDATA[PC-E Micro NIKKOR 45mm f/2.8D ED]]></category>

		<guid isPermaLink="false">http://progettistamultimediale.wordpress.com/?p=39</guid>
		<description><![CDATA[PC-E Micro NIKKOR 45mm f/2.8D ED
PC-E Micro NIKKOR 85mm f/2.8D ED
Torino, 01-07-2008
Nikon potenzia la linea NIKKOR con due nuovi obiettivi dotati di Controllo prospettiva
Nikon è lieta di presentare due nuovi obiettivi NIKKOR per usi specialistici: il PC-E Micro NIKKOR 45mm f/2.8D ED ed il PC-E Micro NIKKOR 85mm f/2.8D ED. Questi due nuovi obiettivi PC [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=progettistamultimediale.wordpress.com&blog=4169703&post=39&subd=progettistamultimediale&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>PC-E Micro NIKKOR 45mm f/2.8D ED<br />
PC-E Micro NIKKOR 85mm f/2.8D ED</p>
<p><span class="date">Torino, 01-07-2008</span></p>
<p class="date">Nikon potenzia la linea NIKKOR con due nuovi obiettivi dotati di Controllo prospettiva</p>
<p><strong>Nikon</strong> è lieta di presentare due nuovi obiettivi NIKKOR per usi specialistici: il <strong>PC-E Micro NIKKOR 45mm f/2.8D ED </strong>ed il<strong> PC-E Micro NIKKOR 85mm f/2.8D ED</strong>. Questi due nuovi obiettivi PC NIKKOR sono destinati ad applicazioni specialistiche nell&#8217;ambito della fotografia architettonica, commerciale e di paesaggi. Le funzionalità di Controllo prospettiva offrono un meccanismo di basculaggio/decentramento, la funzione di rotazione e il controllo dell&#8217;apertura automatica.</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td width="50%">
<div><img src="http://www.nital.it/press/2008/images/45mm.jpg" alt="" width="270" height="350" /></div>
</td>
<td width="50%">
<div><img src="http://www.nital.it/press/2008/images/85mm.jpg" alt="" width="270" height="350" /></div>
</td>
</tr>
</tbody>
</table>
<p>Robert Cristina, responsabile di Professional Products e NPS presso Nikon Europe B.V.: &#8220;Queste “new entry” della gamma NIKKOR saranno molto apprezzate dai fotografi di architettura e di paesaggi che utilizzano fotocamere in formato FX come la D3 e la D700; come il PC-E 24mm f/3.5D ED presentato all&#8217;inizio di quest&#8217;anno, questi nuovi obiettivi ampliano ulteriormente la gamma delle ottiche NIKKOR destinate alla fotografia specialistica&#8221;.</p>
<p>Entrambi gli obiettivi offrono eccezionali livelli di nitidezza e luminosità ai margini e agli angoli, a tutte le distanze del soggetto da macro a infinito. Sono anche dotati del rivestimento Nano Crystal Coat basato sulla tecnologia anti-riflesso all&#8217;avanguardia di Nikon, che riduce le immagini fantasma ed i riflessi indesiderati, causati da riflessi interni, con livelli molto flessibili di basculaggio e decentramento.</p>
<p>Gli obiettivi PC NIKKOR sono destinati ad un utilizzo professionale, sia sul campo che in studio, grazie al diaframma con nove lamelle arrotondate che contribuisce a ottenere il famoso &#8220;bokeh&#8221; NIKKOR che conferisce agli oggetti non a fuoco sullo sfondo un aspetto morbido, naturale e delicato.</p>
<p>La lunghezza focale di 45mm del <strong>PC-E Micro NIKKOR 45mm f/2.8D ED</strong> è ideale per una prospettiva naturale, controllabile in modo creativo dal fotografo. Questo obiettivo, realizzato in vetro ED per ridurre al minimo l&#8217;aberrazione e caratterizzato da una distanza minima di messa a fuoco di soli 25cm, ha un&#8217;apertura minima di f/32.</p>
<p>Il <strong>PC-E Micro NIKKOR 85mm f/2.8D ED</strong> sostituisce il PC Micro NIKKOR 85mm f/2.8D ed è ideale per la macrofotografia, lo still life e la ritrattistica creativa. Questo nuovo obiettivo Nikkor, che presenta lo stesso design ottico del predecessore, è più leggero e più piccolo e garantisce una distanza di messa a fuoco minima di 39 cm e un&#8217;apertura minima di f/32.</p>
<p align="center"><span class="titoli"><img src="http://www.nital.it/press/images/puntini.gif" alt="" width="483" height="10" /></span></p>
<p class="titnews"><strong>CARATTERISTICHE PRINCIPALI</strong></p>
<ul>
<li>Il rivestimento Nano Crystal Coat riduce al minimo le immagini fantasma e i riflessi indesiderati, per consentire un&#8217;eccellente riproduzione dell&#8217;immagine</li>
<li>Prestazioni ottiche di qualità superiore grazie alla riduzione al minimo della distorsione e dell&#8217;aberrazione cromatica</li>
<li>Il diaframma elettromagnetico consente il controllo dell&#8217;apertura automatica (per corpi camera compatibili)</li>
<li>Possibilità di predefinire l&#8217;apertura mediante la ghiera e il pulsante di chiusura del diaframma in Stop-down</li>
<li>Funzionalità di ripresa macro fino a 0,25 m e 0,39 m per <span class="arancio"><strong>PC-E Micro NIKKOR 45mm f/2.8D ED</strong></span> ed il<strong> PC-E Micro NIKKOR 85mm f/2.8D E</strong>, rispettivamente (con 1/2x)</li>
<li>Diaframma con nove lamelle arrotondate</li>
<li>Ottima protezione contro polvere e umidità</li>
</ul>
<p align="center">
<span class="titoli"><img src="http://www.nital.it/press/images/puntini.gif" alt="" width="483" height="10" /></span></p>
<p><span class="titnews">CARATTERISTICHE TECNICHE</span></p>
<table border="0" cellspacing="1" cellpadding="4" width="100%">
<tbody>
<tr class="testo">
<td width="29%"></td>
<td class="testo" width="35%" height="25" valign="top"><strong>PC-E Micro NIKKOR 45mm f/2.8D ED</strong></td>
<td class="testo" width="35%" valign="top"><strong>PC-E Micro NIKKOR 85mm f/2.8D E</strong></td>
</tr>
<tr class="testo" bgcolor="#eeeeee">
<td class="testo" bgcolor="#eeeeee">Lunghezza focale</td>
<td class="testo">45 mm</td>
<td class="testo">85 mm</td>
</tr>
<tr class="testo">
<td class="testo">Apertura max./min.</td>
<td class="testo">f/2.8, f/32</td>
<td class="testo">f/2.8, f/32</td>
</tr>
<tr class="testo" bgcolor="#eeeeee">
<td class="testo" valign="top">Costruzione obiettivo</td>
<td class="testo">
<div>9 elementi in 8 gruppi (un elemento in vetro ED, con rivestimento Nano Crystal Coat)</div>
</td>
<td class="testo">
<div>9 elementi in 8 gruppi (un elemento in vetro ED, con rivestimento Nano Crystal Coat)</div>
</td>
</tr>
<tr class="testo">
<td class="testo">Angolo d&#8217;immagine</td>
<td class="testo">51°, 34.5° (formato DX)</td>
<td class="testo">28.4° , 18.9° (formato DX)</td>
</tr>
<tr class="testo" bgcolor="#eeeeee">
<td class="testo">Distanza di messa a fuoco minima</td>
<td class="testo">0.253 m</td>
<td class="testo">0.39 m</td>
</tr>
<tr class="testo">
<td class="testo">Rapporto di riproduzione max.</td>
<td class="testo">1/2</td>
<td class="testo">½</td>
</tr>
<tr class="testo" bgcolor="#eeeeee">
<td class="testo">N. di lamelle del diaframma</td>
<td class="testo">9</td>
<td class="testo">9</td>
</tr>
<tr class="testo">
<td class="testo">Messa a fuoco</td>
<td class="testo">Manuale</td>
<td class="testo">Manuale</td>
</tr>
<tr class="testo" bgcolor="#eeeeee">
<td class="testo">Dimensione filtro/attacco</td>
<td class="testo">77mm</td>
<td class="testo">77mm</td>
</tr>
<tr class="testo">
<td class="testo">Diametro x lunghezza</td>
<td class="testo">φ83.5×112 mm</td>
<td class="testo">φ82.7×107 mm</td>
</tr>
<tr class="testo" bgcolor="#eeeeee">
<td class="testo">Peso</td>
<td class="testo">Circa 780 g</td>
<td class="testo">Circa 650 g</td>
</tr>
</tbody>
</table>
<p>Il <strong>PC-E Micro NIKKOR 45mm f/2.8D ED</strong> è corredato di paraluce HB-43 e custodia CL-1020 mentre il <strong>PC-E Micro NIKKOR 85mm f/2.8D E</strong> è dotato di paraluce HB-22 e custodia CL-1120.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/progettistamultimediale.wordpress.com/39/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/progettistamultimediale.wordpress.com/39/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/progettistamultimediale.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/progettistamultimediale.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/progettistamultimediale.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/progettistamultimediale.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/progettistamultimediale.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/progettistamultimediale.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/progettistamultimediale.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/progettistamultimediale.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/progettistamultimediale.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/progettistamultimediale.wordpress.com/39/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=progettistamultimediale.wordpress.com&blog=4169703&post=39&subd=progettistamultimediale&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://progettistamultimediale.wordpress.com/2008/07/09/nikkor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/32899e130d85c12989fd68f0a31735bc?s=96&#38;d=identicon" medium="image">
			<media:title type="html">progettistamultimediale</media:title>
		</media:content>

		<media:content url="http://www.nital.it/press/2008/images/45mm.jpg" medium="image" />

		<media:content url="http://www.nital.it/press/2008/images/85mm.jpg" medium="image" />

		<media:content url="http://www.nital.it/press/images/puntini.gif" medium="image" />

		<media:content url="http://www.nital.it/press/images/puntini.gif" medium="image" />
	</item>
		<item>
		<title>Nikon D700</title>
		<link>http://progettistamultimediale.wordpress.com/2008/07/09/nikon-d700/</link>
		<comments>http://progettistamultimediale.wordpress.com/2008/07/09/nikon-d700/#comments</comments>
		<pubDate>Wed, 09 Jul 2008 09:24:14 +0000</pubDate>
		<dc:creator>progettistamultimediale</dc:creator>
				<category><![CDATA[Fotografia Digitale]]></category>
		<category><![CDATA[nikon D700]]></category>

		<guid isPermaLink="false">http://progettistamultimediale.wordpress.com/?p=38</guid>
		<description><![CDATA[Torino, 01-07-2008




Nikon è lieta di presentare la nuova fotocamera reflex digitale formato Nikon FX: la Nikon D700.



La D3, ha rappresentato un grande passo in avanti nella fotografia digitale, cambiando in maniera significativa il modo di lavorare dei professionisti. Ora, con il lancio della nuova D700, dal design compatto e leggero, è possibile ottenere molti di [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=progettistamultimediale.wordpress.com&blog=4169703&post=38&subd=progettistamultimediale&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><span class="date">Torino, 01-07-2008</span></p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td width="50"><img src="http://www.nital.it/press/2008/images/nd7_fx.jpg" alt="" width="40" height="41" /></td>
<td><span class="date"><strong>Nikon</strong> è lieta di presentare la nuova fotocamera reflex digitale formato Nikon FX: la <strong>Nikon D</strong><strong>700</strong>.</span></td>
</tr>
</tbody>
</table>
<p>La D3, ha rappresentato un grande passo in avanti nella fotografia digitale, cambiando in maniera significativa il modo di lavorare dei professionisti. Ora, con il lancio della nuova D700, dal design compatto e leggero, è possibile ottenere molti di quegli stessi straordinari risultati che hanno reso da subito leggendaria la Nikon D3.</p>
<p align="center"><img class="image" src="http://www.nital.it/press/2008/images/nd7.jpg" alt="" width="400" height="314" /></p>
<p>Anche la D700 sarà in grado di superare le aspettative dei più importanti fotografi del mondo, in un corpo agile, sviluppato secondo le linee della pluripremiata Nikon D300. In luce morbida e tenue la Nikon D700 riesce a catturare tonalità omogenee e seducenti con un dettaglio sorprendente. In condizioni di luce scarsa produce immagini praticamente prive di disturbo, per garantire risultati impeccabili fino a ISO 6400. E in condizioni di illuminazione continuamente variabili, la D700 gestisce questi complessi cambiamenti di esposizione con la funzione ISO Auto.</p>
<p>La portabilità, la rapidità di risposta e la maneggevolezza ottimamente bilanciata della fotocamera vanno ad impreziosire ulteriormente questo nuovo prodotto Nikon. L’estrema qualità unita ad una impressionante velocità di scatto (5 fotogrammi per secondo oppure 8, se viene utilizzato il Multi Power Battery Pack opzionale) permette alla D700 di catturare ogni momento cruciale, dalle situazioni in rapido movimento a quelle più statiche. Ogni momento viene ripreso con precisione e nitidezza grazie all&#8217;esclusivo sistema AF a 51 punti di Nikon, unico al mondo.</p>
<p>&#8220;La Nikon D3 ha conquistato il settore della fotografia d&#8217;azione, incoraggiando molti professionisti a farla propria e ci aspettiamo che la D700 possa continuare questa tendenza&#8221;, ha dichiarato Robert Cristina, Responsabile di Professional Products e NPS presso Nikon Europe.</p>
<p><strong>La <span class="arancio">D</span></strong><span class="arancio"><strong>700</strong></span><strong> eredita la qualità d&#8217;immagine fondamentale della D3</strong>. Utilizzando le stesse tecnologie di base, come il <strong>sensore di immagine CMOS formato Nikon FX da 12.1 megapixel effettivi</strong> e la possibilità di estendere notevolmente la sensibilità, la nuova reflex Nikon permette la realizzazione di file luminosi e nitidi in un&#8217;ampia gamma ISO. La D700 presenta anche lo stesso innovativo <strong>sistema di elaborazione delle immagini ad alta velocità EXPEED</strong>, la conversione A/D a 14 bit e il canale di elaborazione immagine a 16 bit per garantire quel dettaglio e quelle gradazioni uniformi indispensabili per ottenere ingrandimenti e riproduzioni delle stampe eccezionali.</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<div><img class="image" src="http://www.nital.it/press/2008/images/expeed-sensore.jpg" alt="" width="400" height="110" /></div>
</td>
</tr>
</tbody>
</table>
<p>La D700 è ideale per chi, pur cercando una reflex digitale comoda da trasportare, non vuole scendere a compromessi per quel che riguarda la <strong>robustezza</strong> o la <strong>resistenza a polvere e umidità</strong>. La D700 comprende inoltre un <strong>sistema di pulizia del sensore di immagine</strong> che utilizza vibrazioni alle alte frequenze, per ridurre l&#8217;accumulo di polvere presente sulla superficie del sensore stesso.</p>
<p align="center"><img src="http://www.nital.it/press/2008/images/passaggi.jpg" alt="" width="280" height="145" /></p>
<p>La <strong>velocità di scatto</strong> di 5fps, ottenuta grazie alla compatta e potente batteria agli ioni di litio EN-EL3e da 1500mAh, può essere ampliata fino ad un massimo di 8 fps, con il battery pack opzionale MB-D10 (che può utilizzare anche la potente batteria EN-EL4a da 2500mAh). È così possibile una completa integrazione dell&#8217;alimentazione per chi utilizza già la D3 e la D300. Un altro vantaggio è il pratico <strong>flash con sollevamento automatico incorporato i-TTL</strong>, con copertura di campo dell&#8217;ottica di 24mm, ideale per una luce discreta del flash quando l&#8217;illuminatore di dimensioni normali potrebbe rivelarsi troppo ingombrante.</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<div><img src="http://www.nital.it/press/2008/images/nd72.jpg" alt="" width="270" height="203" /></div>
</td>
<td>
<div><img src="http://www.nital.it/press/2008/images/nd7_delfino.jpg" alt="" hspace="15" width="238" height="151" /></div>
</td>
</tr>
</tbody>
</table>
<p>Nonostante il <strong>prezzo interessante</strong>, la D700 non scende assolutamente a compromessi per quel che riguarda le sue prestazioni: <strong>tempi di azione rapidissimi</strong> (ritardo allo scatto di appena 40ms), <strong>estrema precisione del sistema AF MultiCAM3500 a 51 punti, modalità di ritaglio DX, funzione Live View con il sistema AF a contrasto di fase, monitor TFT ad alta definizione da 3 pollici</strong> (lo stesso della D3 e della D300). Il <strong>mirino</strong> della Nikon D700 presenta un eccezionale pentaprisma in vetro pieno, con una copertura pari al 95% e l&#8217;illuminazione regolabile tramite LED dei punti AF, per una visione luminosa e senza interruzioni.</p>
<p>Una nuova interessante funzione è la <strong>possibilità di visualizzare l&#8217;indicatore del livello di orizzonte virtuale durante la modalità Live View</strong>, per determinare l&#8217;orientamento della fotocamera con il braccio disteso.</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<div><img src="http://www.nital.it/press/2008/images/nd7-dietro.jpg" alt="" hspace="10" width="260" height="195" /></div>
</td>
<td valign="bottom">
<div><img src="http://www.nital.it/press/2008/images/nd7-schermo.jpg" alt="" hspace="15" vspace="10" width="238" height="157" /></div>
</td>
</tr>
</tbody>
</table>
<p>La D700 è progettata per il futuro senza ignorare il passato. Mentre Nikon festeggia il 75° anniversario dei suoi obiettivi <strong>NIKKOR</strong> e gli oltre 40 milioni di ottiche vendute, le sofisticate tecnologie di elaborazione delle immagini per il controllo dell&#8217;illuminazione periferica (vignettatura) e dell&#8217;aberrazione cromatica, consentono ai fotografi di riscoprire le possibilità creative dei loro obiettivi NIKKOR con innesto a baionetta F-mount. Il <strong>Nikon Total Imaging System</strong> (il sistema fotografico più completo al mondo) continua a crescere, fornendo obiettivi, lampeggiatori, software e accessori adatti a ogni sfida in campo fotografico, ora e in futuro.</p>
<p>La Nikon D700 sarà disponibile da fine luglio.</p>
<div><img class="image" src="http://www.nital.it/press/2008/images/nd73.jpg" alt="" width="400" height="281" /></div>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/progettistamultimediale.wordpress.com/38/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/progettistamultimediale.wordpress.com/38/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/progettistamultimediale.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/progettistamultimediale.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/progettistamultimediale.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/progettistamultimediale.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/progettistamultimediale.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/progettistamultimediale.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/progettistamultimediale.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/progettistamultimediale.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/progettistamultimediale.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/progettistamultimediale.wordpress.com/38/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=progettistamultimediale.wordpress.com&blog=4169703&post=38&subd=progettistamultimediale&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://progettistamultimediale.wordpress.com/2008/07/09/nikon-d700/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/32899e130d85c12989fd68f0a31735bc?s=96&#38;d=identicon" medium="image">
			<media:title type="html">progettistamultimediale</media:title>
		</media:content>

		<media:content url="http://www.nital.it/press/2008/images/nd7_fx.jpg" medium="image" />

		<media:content url="http://www.nital.it/press/2008/images/nd7.jpg" medium="image" />

		<media:content url="http://www.nital.it/press/2008/images/expeed-sensore.jpg" medium="image" />

		<media:content url="http://www.nital.it/press/2008/images/passaggi.jpg" medium="image" />

		<media:content url="http://www.nital.it/press/2008/images/nd72.jpg" medium="image" />

		<media:content url="http://www.nital.it/press/2008/images/nd7_delfino.jpg" medium="image" />

		<media:content url="http://www.nital.it/press/2008/images/nd7-dietro.jpg" medium="image" />

		<media:content url="http://www.nital.it/press/2008/images/nd7-schermo.jpg" medium="image" />

		<media:content url="http://www.nital.it/press/2008/images/nd73.jpg" medium="image" />
	</item>
		<item>
		<title>Nikon D300</title>
		<link>http://progettistamultimediale.wordpress.com/2008/07/09/nikon-d300/</link>
		<comments>http://progettistamultimediale.wordpress.com/2008/07/09/nikon-d300/#comments</comments>
		<pubDate>Wed, 09 Jul 2008 09:21:20 +0000</pubDate>
		<dc:creator>progettistamultimediale</dc:creator>
				<category><![CDATA[Fotografia Digitale]]></category>
		<category><![CDATA[nikon d300]]></category>

		<guid isPermaLink="false">http://progettistamultimediale.wordpress.com/?p=37</guid>
		<description><![CDATA[La nuova reflex digitale Nikon presenta, tra le altre caratteristiche, una risoluzione da 12,3 megapixel, una velocità di scatto pari a 6 fps, la funzione self-cleaning del sensore e la visione live view.
Torino, 23-08-2007
Nikon presenta la nuova reflex digitale D300, una fotocamera destinata a fissare nuovi standard in termini di prestazioni.

La Nikon D300, dotata di [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=progettistamultimediale.wordpress.com&blog=4169703&post=37&subd=progettistamultimediale&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>La nuova reflex digitale Nikon presenta, tra le altre caratteristiche, una risoluzione da 12,3 megapixel, una velocità di scatto pari a 6 fps, la funzione self-cleaning del sensore e la visione live view.</p>
<p><span class="date">Torino, 23-08-2007</span><br />
Nikon presenta la nuova reflex digitale <span class="arancio">D300</span>, una fotocamera destinata a fissare nuovi standard in termini di prestazioni.</p>
<p align="center"><img src="http://www.nital.it/press/2007/images/D300Front.jpg" alt="" width="300" height="244" /></p>
<p align="justify">La <span class="arancio">Nikon D300</span>, dotata di un sensore di immagine formato DX, offre eccezionali tecnologie multi-funzione, elevata qualità d&#8217;immagine e risposta rapida. La risoluzione da 12,3 megapixel, leader nella categoria, la velocità di scatto di 6 fps, l&#8217;unità di pulizia automatica del sensore ed il display LCD VGA ad alta definizione da 3&#8243;, combinati con la leggendaria robustezza dei prodotti Nikon, fanno della D300 una soluzione rivoluzionaria per i fotografi alla ricerca di una reflex capace di unire prestazioni elevate a compattezza del corpo camera e facilità d&#8217;uso.</p>
<p align="justify">&#8220;Grazie all&#8217;utilizzo delle più recenti tecnologie ed alle rinomate caratteristiche ergonomiche di Nikon, la D300 fissa un nuovo standard per i professionisti alla ricerca di una soluzione economica&#8221;, ha affermato Robert Cristina, Responsabile del marchio di Nikon Professional Products, Europa. &#8220;La D300 è una vera e propria fotocamera &#8216;adatta a tutte le situazioni&#8217;, grazie alla rapidità di risposta, alle elevate prestazioni ed alla facilità di utilizzo, caratteristiche accattivanti per chiunque pratichi la fotografia in modo professionale.&#8221;.</p>
<p align="justify"><span class="arancio">Velocità e prestazioni di alto livello</span><br />
Per la <span class="arancio">Nikon D300</span> sono state utilizzate le più recenti tecnologie professionali studiate per produrre immagini della migliore qualità. Il sensore CMOS formato DX da 12,3 MP ad alta risoluzione genera file adatti a molteplici fini d&#8217;impiego ed è combinato con un&#8217;elevata velocità standard di cadenza di raffica buffer pari a 6 fps (fino a 8 fps con il multi power battery pack opzionale).<br />
La <span class="arancio">D300</span> è caratterizzata da una rapida accensione, una risposta veloce ed un&#8217;eccellente versatilità, per soddisfare le esigenze di una vasta gamma di applicazioni fotografiche. La fotocamera si accende in soli 0,13 secondi, con un ritardo allo scatto quasi impercettibile pari a 45 millisecondi. .</p>
<p align="justify"><span class="arancio">Eccellente precisione</span><br />
<img src="http://www.nital.it/images/clip_image002_0003.jpg" alt="" hspace="5" vspace="5" width="113" height="123" align="left" /> La <span class="arancio">Nikon D300</span> è caratterizzata da un&#8217;unità self-cleaning del sensore che oscilla ad alta frequenza per rimuovere eventuali tracce di polvere presente sulla superficie del filtro ottico low-pass del sensore.<br />
La fotocamera offre un&#8217;ampia estensione ISO (200-3200), oltre a LO 1 (equivalente ad ISO 100) e HI 1 (equivalente ad ISO 6400). La precisione delle immagini è straordinaria, grazie al nuovo sistema di riconoscimento scena Nikon, che utilizza l&#8217;apprezzato sensore colore RGB da 1005-pixel di Nikon, modificato nell&#8217;impiego in modo da riconoscere la forma e la posizione dei soggetti prima della cattura dell&#8217;immagine.<br />
Questa caratteristica consente inoltre al nuovo sistema autofocus a 51 punti di inseguire i soggetti anche in base al colore, migliorando al tempo stesso la precisione di misurazione esposimetrica e del bilanciamento del bianco.<br />
La D300 è dotata inoltre della visione live view, che presenta ai fotografi un&#8217;immagine live sullo schermo LCD, con due modi per lo scatto a mano libera o su cavalletto. L&#8217;autofocus è disponibile in entrambi i modi di visione live view.</p>
<p align="justify"><span class="arancio">Immagini ottimizzate con EXPEED</span><br />
<img src="http://www.nital.it/press/2007/images/clip_image005.jpg" alt="" hspace="4" vspace="4" width="176" height="59" align="left" />Il sistema di image processing <span class="arancio">EXPEED</span> della Nikon D300 consente di catturare ed elaborare rapidamente dati di immagini ad alta definizione. Il sistema EXPEED integra soluzioni hardware ed anni di know-how Nikon nell&#8217;elaborazione delle immagini. Il sistema EXPEED della nuova Nikon D300 è caratterizzato da una conversione analogico-digitale (A/D) a 14 bit con elaborazione delle immagini a 16 bit: sono dunque garantiti, come è consuetudine di Nikon, colori accurati, tonalità uniformi nella resa dell&#8217;incarnato ed estrema precisione nei dettagli.</p>
<p align="justify"><span class="arancio">Proiettata verso il futuro</span><br />
La <span class="arancio">Nikon D300</span> è sinonimo di alta definizione. Dallo schermo LCD VGA a 3 pollici con angolo di visione di 170 gradi fino all&#8217;interfaccia HDMI per display HD, la D300 è adatta a tutti gli ambienti di elaborazione delle immagini, da quelli attuali a quelli del futuro.<br />
I pulsanti di controllo della D300 sono stati studiati per semplificarne l&#8217;utilizzo, così come il pannello LCD superiore che permette una comoda visione dei dati ed il monitor LCD posteriore, che può cambiare colore in base alle condizioni di illuminazione dell&#8217;ambiente.<br />
L&#8217;intuitivo selettore multi-area a 8 direzioni semplifica la selezione di qualsiasi impostazione dell&#8217;autofocus a 51 punti.</p>
<p align="justify"><span class="arancio">Durevole e affidabile</span><br />
<img src="http://www.nital.it/images/clip_image002_0002.jpg" alt="" hspace="5" width="120" height="104" align="right" /> La Nikon D300 continua la lunga tradizione Nikon in fatto di robustezza e longevità.<br />
Il corpo camera è costruito in lega di magnesio, mentre l&#8217;otturatore della fotocamera è stato testato per cicli di <span class="arancio">150.000 scatti</span>.<br />
La <span class="arancio">D300</span> è progettata inoltre per un elevato livello di resistenza alla polvere e di impermeabilità.</p>
<p align="justify"><span class="arancio">Total Imaging System</span><br />
Come la D3, la Nikon D300 non è una semplice fotocamera, ma parte di un sistema Nikon completo che consente ai fotografi di creare immagini eccezionali.<br />
La D300 è infatti compatibile con il Total Imaging System Nikon, che va dagli obiettivi NIKKOR ad una gamma completa di lampeggiatori flash, accessori e software per qualsiasi applicazione fotografica.<br />
Il Multi Power Battery Pack MB-D10 è un accessorio opzionale in grado di aumentare l&#8217;autonomia della fotocamera e permette di aggiungere la possibilità di ripresa verticale ergonomica e di aumentare la velocità dei fotogrammi fino a 8 fps*.<br />
Il compatto MB-D10 viene fissato alla base della fotocamera. A differenza di altre impugnature, l&#8217;MB-D10 non occupa lo spazio della batteria della fotocamera; pertanto, è possibile effettuare riprese con due batterie EN-EL3e oppure aggiungere una potente batteria EN-EL4a. La fotocamera D300 e l&#8217;MB-D10 possono essere alimentati anche da batterie stilo di tipo AA.<br />
<em>*Richiede EN-EL4a.</em></p>
<p align="justify"><span class="arancio">Reti senza cavi</span><br />
<img src="http://www.nital.it/images/clip_image002_0000.jpg" alt="" hspace="4" width="128" height="119" align="left" /> Nikon ha precorso i tempi nella trasmissione delle immagini senza cavi.<br />
Ora, grazie al nuovo trasmettitore senza cavi <strong>Nikon WT-4</strong>, è iniziata l&#8217;era delle reti a più fotocamere.<br />
Non solo è possibile trasmettere (&#8216;inviare&#8217;) le immagini ai server e controllare in modalità remota la fotocamera, ma con il trasmettitore WT-4 è possibile anche scorrere in modalità remota le miniature delle immagini sulla fotocamera.<br />
In ambienti senza cavi, è possibile connettere fino a 5 fotocamere Nikon D300, scorrere simultaneamente le miniature delle immagini da tutte le fotocamere connesse ed &#8216;estrarre&#8217; i relativi file immagine, mentre i fotografi continuano le riprese.</p>
<p align="justify"><img src="http://www.nital.it/images/clip_image002_0001.jpg" alt="" hspace="5" width="320" height="213" align="right" /> Il corpo della Nikon D300, la cui disponibilità sul mercato italiano è prevista a <strong>novembre 2007</strong>, misura 147,2 (Largh.) × 112,8 (Alt.) × 74 (Prof.) mm e pesa 795 grammi.</p>
<p align="justify">
<p align="justify"><a class="biancodata" href="http://www.nital.it/press/2007/pr/Nikon%20D300_comunicato%20stampa.pdf" target="_blank"><strong>Scarica il PDF</strong></a></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/progettistamultimediale.wordpress.com/37/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/progettistamultimediale.wordpress.com/37/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/progettistamultimediale.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/progettistamultimediale.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/progettistamultimediale.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/progettistamultimediale.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/progettistamultimediale.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/progettistamultimediale.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/progettistamultimediale.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/progettistamultimediale.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/progettistamultimediale.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/progettistamultimediale.wordpress.com/37/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=progettistamultimediale.wordpress.com&blog=4169703&post=37&subd=progettistamultimediale&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://progettistamultimediale.wordpress.com/2008/07/09/nikon-d300/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/32899e130d85c12989fd68f0a31735bc?s=96&#38;d=identicon" medium="image">
			<media:title type="html">progettistamultimediale</media:title>
		</media:content>

		<media:content url="http://www.nital.it/press/2007/images/D300Front.jpg" medium="image" />

		<media:content url="http://www.nital.it/images/clip_image002_0003.jpg" medium="image" />

		<media:content url="http://www.nital.it/press/2007/images/clip_image005.jpg" medium="image" />

		<media:content url="http://www.nital.it/images/clip_image002_0002.jpg" medium="image" />

		<media:content url="http://www.nital.it/images/clip_image002_0000.jpg" medium="image" />

		<media:content url="http://www.nital.it/images/clip_image002_0001.jpg" medium="image" />
	</item>
		<item>
		<title>Nikon D60</title>
		<link>http://progettistamultimediale.wordpress.com/2008/07/09/nikon-d60/</link>
		<comments>http://progettistamultimediale.wordpress.com/2008/07/09/nikon-d60/#comments</comments>
		<pubDate>Wed, 09 Jul 2008 09:19:38 +0000</pubDate>
		<dc:creator>progettistamultimediale</dc:creator>
				<category><![CDATA[Fotografia Digitale]]></category>
		<category><![CDATA[nikon d60]]></category>

		<guid isPermaLink="false">http://progettistamultimediale.wordpress.com/?p=36</guid>
		<description><![CDATA[Torino, 29-01-2008
Nikon D60: facile da utilizzare, con una risoluzione di 10 megapixel e la modifica incorporata delle immagini









Nikon ha il piacere di annunciare la Nikon D60, una reflex digitale progettata per gli utenti che desiderano avere, racchiuse in una unica fotocamera, tecnologia all&#8217;avanguardia, semplicità di utilizzo e funzioni creative. La Nikon D60 è dotata di [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=progettistamultimediale.wordpress.com&blog=4169703&post=36&subd=progettistamultimediale&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><span class="date">Torino, 29-01-2008</span></p>
<p class="date">Nikon D60: facile da utilizzare, con una risoluzione di 10 megapixel e la modifica incorporata delle immagini</p>
<table class="image" border="0" cellspacing="3" cellpadding="0" width="410" align="center">
<tbody>
<tr>
<td>
<div><img src="http://www.nital.it/press/2008/images/d60_logo.jpg" alt="Nikon D60" width="400" height="143" /></div>
</td>
</tr>
</tbody>
</table>
<p><strong>Nikon</strong> ha il piacere di annunciare la <span class="arancio">Nikon D60</span>, una <strong>reflex digitale</strong> progettata per gli utenti che desiderano avere, racchiuse in una unica fotocamera, <strong>tecnologia all&#8217;avanguardia</strong>, <strong>semplicità di utilizzo</strong> e <strong>funzioni creative</strong>. La <strong>Nikon D60</strong> è dotata di una risoluzione da <strong>10,2 megapixel effettivi</strong>, dell&#8217;esclusivo sistema di elaborazione delle immagini digitali <strong>Nikon EXPEED</strong>, di diverse funzioni di modifica incorporate e di un sistema di <strong>autofocus</strong> a <strong>3 aree</strong> di messa a fuoco.<br />
La fotocamera offre inoltre la <strong>ripresa in sequenza a 3 fps</strong>, l&#8217;<strong>accensione praticamente istantanea</strong> in soli 0,19 secondi e la possibilità di scattare a <strong>sensibilità ISO elevate</strong>: il tutto in un compatto e leggero corpo camera compatto dal design ergonomico.</p>
<p>La <span class="arancio">Nikon D60</span>, in virtù della sua semplicità d&#8217;uso, permette al fotografo di concentrarsi maggiormente sullo scatto e sulla composizione dello stesso. Sempre in quest&#8217;ottica, il design delle fotocamera, semplice e funzionale, prevede un <strong>numero ridotto di pulsanti</strong>.<br />
La combinazione di <strong>monitor</strong> e <strong>display</strong> per la visualizzazione dei dati di ripresa permette al fotografo di avere sempre tutto sotto controllo.<br />
Le informazioni vengono visualizzate su uno <strong>schermo LCD da 2,5 pollici</strong> mediante una intuitiva interfaccia grafica (personalizzabile in tre diversi stili), per soddisfare le esigenze di tutti gli utenti. I simboli e i numeri sul display possono ruotare di 90 gradi, in modo da presentare le informazioni nel corretto orientamento in base alla posizione in cui viene tenuta la fotocamera al momento dello scatto. La <span class="arancio"><strong>D60</strong></span> include inoltre una nuova funzione che consente lo spegnimento automatico del monitor LCD quando viene utilizzato il mirino, ottimizzando così il consumo della batteria.<br />
La fotocamera utilizza l&#8217;esclusiva tecnologia <strong>Nikon EXPEED</strong>, che permette di ottimizzare la qualità delle immagini e di ottenere la massima velocità di elaborazione. Dispone, inoltre, di <strong>funzioni creative</strong> progettate per consentire il miglioramento e la regolazione degli scatti realizzati, senza ricorrere all&#8217;utilizzo del computer. L&#8217;ottimizzazione delle immagini viene ottenuta grazie a funzioni quali il <strong>D-Lighting</strong> attivo (che compensa le ombre più decise) e la <strong>correzione automatica dell&#8217;effetto</strong> &#8220;<strong>occhi-rossi</strong>&#8221; (causato dall&#8217;utilizzo del flash incorporato). Tra le funzioni creative sono inoltre incluse la <strong>creazione automatica di file stop-motion</strong>, cioè animazioni basate sulla riproduzione di immagini fisse, ed <strong>effetti che simulano i filtri ottici</strong>, per produrre sfumature di colore e condizioni di alte-luci.</p>
<table class="image" border="0" cellspacing="3" cellpadding="0" width="410" align="center">
<tbody>
<tr>
<td>
<div><img src="http://www.nital.it/press/2008/images/d60_1.jpg" alt="Nikon D60" width="400" height="283" /></div>
</td>
</tr>
</tbody>
</table>
<p>Per impedire che la polvere penetri nella fotocamera quando si cambia l&#8217;obiettivo, la <span class="arancio">Nikon D60</span> dispone di un <strong>sistema Dust-off integrato</strong>. Questo esclusivo sistema di controllo del flusso d&#8217;aria, convoglia la polvere lontano dal percorso dell&#8217;immagine, mentre un&#8217;unità di pulizia automatica del sensore vibra in modo da rimuovere eventuali particelle di polvere rimaste sul sensore della fotocamera.</p>
<p>&#8220;La <span class="arancio">Nikon D60</span> è pensata per fare in modo che la fotografia di alto livello sia alla portata di tutti&#8221; ha affermato Toru Uematsu, Prosumer Products Manager presso Nikon Europe BV. &#8220;Grazie alla combinazione di tecnologia di precisione e praticità di utilizzo, la D60 presenta tutte le caratteristiche necessarie per garantire agli utenti delle fotocamere compatte la possibilità di passare alle reflex digitali in tutta facilità e sicurezza&#8221;.</p>
<table class="image" border="0" cellspacing="3" cellpadding="0" width="410" align="center">
<tbody>
<tr>
<td>
<div><img src="http://www.nital.it/press/2008/images/d60_2.jpg" alt="Nikon D60" width="400" height="150" /></div>
</td>
</tr>
</tbody>
</table>
<p>La <strong>Nikon D60</strong> può essere utilizzata in qualsiasi condizione di illuminazione, grazie all&#8217;<strong>ampia gamma</strong> di sensibilità da <strong>ISO 100</strong> a <strong>ISO 1600</strong>, a cui si aggiunge la modalità <strong>ISO AUTO</strong>, offrendo una riproduzione reale dei colori, con risultati chiari e nitidi.<br />
Il lampeggiatore <strong>incorporato</strong> garantisce risultati eccellenti grazie al sofisticato sistema di flash<strong> i-TTL</strong>, che consente inoltre l&#8217;utilizzo di lampeggiatori aggiuntivi a controllo remoto.<br />
Le dimensioni della <strong>Nikon D60</strong>, compatibile con schede di memoria <strong>SD</strong> e <strong>SDHC</strong>, sono pari a 126 (L) x 94 (A) x 64 (P) mm ed il suo peso è pari a <strong>495 gr</strong>. La nuova <strong>Nikon D60</strong> ha molto da offrire: <strong>qualità</strong> di immagine eccezionale, <strong>semplicità</strong> di funzionamento, un&#8217;ampia scelta di <strong>funzioni creative</strong> ed un sistema di riduzione della polvere <strong>integrato</strong> ed <strong>efficace</strong>.<br />
Risultato: immagini divertenti, fantastiche e geniali. Con la <strong>D60</strong> la perfezione fotografica è davvero a un passo.</p>
<div><img src="http://www.nital.it/press/2008/images/d60_3.jpg" alt="Nikon D60" width="400" height="261" /></div>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/progettistamultimediale.wordpress.com/36/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/progettistamultimediale.wordpress.com/36/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/progettistamultimediale.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/progettistamultimediale.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/progettistamultimediale.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/progettistamultimediale.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/progettistamultimediale.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/progettistamultimediale.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/progettistamultimediale.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/progettistamultimediale.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/progettistamultimediale.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/progettistamultimediale.wordpress.com/36/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=progettistamultimediale.wordpress.com&blog=4169703&post=36&subd=progettistamultimediale&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://progettistamultimediale.wordpress.com/2008/07/09/nikon-d60/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/32899e130d85c12989fd68f0a31735bc?s=96&#38;d=identicon" medium="image">
			<media:title type="html">progettistamultimediale</media:title>
		</media:content>

		<media:content url="http://www.nital.it/press/2008/images/d60_logo.jpg" medium="image">
			<media:title type="html">Nikon D60</media:title>
		</media:content>

		<media:content url="http://www.nital.it/press/2008/images/d60_1.jpg" medium="image">
			<media:title type="html">Nikon D60</media:title>
		</media:content>

		<media:content url="http://www.nital.it/press/2008/images/d60_2.jpg" medium="image">
			<media:title type="html">Nikon D60</media:title>
		</media:content>

		<media:content url="http://www.nital.it/press/2008/images/d60_3.jpg" medium="image">
			<media:title type="html">Nikon D60</media:title>
		</media:content>
	</item>
		<item>
		<title>Manuale Asp</title>
		<link>http://progettistamultimediale.wordpress.com/2008/07/09/manuale-asp/</link>
		<comments>http://progettistamultimediale.wordpress.com/2008/07/09/manuale-asp/#comments</comments>
		<pubDate>Wed, 09 Jul 2008 08:29:59 +0000</pubDate>
		<dc:creator>progettistamultimediale</dc:creator>
				<category><![CDATA[Manuale Asp]]></category>
		<category><![CDATA[asp manuale guida]]></category>

		<guid isPermaLink="false">http://progettistamultimediale.wordpress.com/?p=35</guid>
		<description><![CDATA[
ASP, che cosa è? A cosa serve?
Breve introduzione al linguaggio ASP.


I primi      passi
Cominciamo dall&#8217;inizio con qualche semplice esempio.


Scaviamo un      pò le fondamenta
I primi oggetti, metodi e proprietà.


Dai,      facciamo qualcosa un pò più divertente ;o)
Il primo esempio concreto.


Il Request   [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=progettistamultimediale.wordpress.com&blog=4169703&post=35&subd=progettistamultimediale&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><ol type="1">
<li class="MsoNormal"><a name="Indice"></a><a href="#Primo"><span><strong><span style="font-size:13pt;font-family:Arial;">ASP, che cosa è? A cosa serve?</span></strong></span></a><span style="font-size:10.5pt;font-family:Tahoma;"><br />
Breve introduzione al linguaggio ASP.<br />
<!--[if !supportLineBreakNewLine]--><br />
<!--[endif]--></span></li>
<li class="MsoNormal"><strong><span style="font-size:13pt;font-family:Arial;"><a href="#Secondo"><span>I primi      passi</span></a></span></strong><span style="font-size:10.5pt;font-family:Tahoma;"><br />
Cominciamo dall&#8217;inizio con qualche semplice esempio.<br />
<!--[if !supportLineBreakNewLine]--><br />
<!--[endif]--></span></li>
<li class="MsoNormal"><strong><span style="font-size:13pt;font-family:Arial;"><a href="#Terzo"><span>Scaviamo un      pò le fondamenta</span></a></span></strong><span style="font-size:10.5pt;font-family:Tahoma;"><br />
I primi oggetti, metodi e proprietà.<br />
<!--[if !supportLineBreakNewLine]--><br />
<!--[endif]--></span></li>
<li class="MsoNormal"><strong><span style="font-size:13pt;font-family:Arial;"><a href="#Quarto"><span>Dai,      facciamo qualcosa un pò più divertente ;o)</span></a></span></strong><span style="font-size:10.5pt;font-family:Tahoma;"><br />
Il primo esempio concreto.<br />
<!--[if !supportLineBreakNewLine]--><br />
<!--[endif]--></span></li>
<li class="MsoNormal"><strong><span style="font-size:13pt;font-family:Arial;"><a href="#Quinto"><span>Il Request      oggetto continua</span></a></span></strong><span style="font-size:10.5pt;font-family:Tahoma;"><br />
Le collezioni Form e Querystring.<br />
<!--[if !supportLineBreakNewLine]--><br />
<!--[endif]--></span></li>
<li class="MsoNormal"><strong><span style="font-size:13pt;font-family:Arial;"><a href="#Sesto"><span>L&#8217;architettura      dell&#8217; ASP object model</span></a></span></strong><span style="font-size:10.5pt;font-family:Tahoma;"><br />
La struttura del file global.asa.<br />
<!--[if !supportLineBreakNewLine]--><br />
<!--[endif]--></span></li>
<li class="MsoNormal"><strong><span style="font-size:13pt;font-family:Arial;"><a href="#Settimo"><span>Vbscript e le      lingue che usiamo per parlare con il browser</span></a></span></strong><span style="font-size:10.5pt;font-family:Tahoma;"><br />
Primi concetti del linguaggio Visual Basic Script.<br />
<!--[if !supportLineBreakNewLine]--><br />
<!--[endif]--></span></li>
<li class="MsoNormal"><strong><span style="font-size:13pt;font-family:Arial;"><a href="#Ottavo"><span>Usare Funzioni      &amp; Procedure</span></a></span></strong><span style="font-size:10.5pt;font-family:Tahoma;"><br />
Primi passi verso la programmazione<br />
<!--[if !supportLineBreakNewLine]--><br />
<!--[endif]--></span></li>
<li class="MsoNormal"><strong><span style="font-size:13pt;font-family:Arial;"><a href="#Nona"><span>E adesso la      vera ragione per cui adoperiamo tecnologie come ASP</span></a></span></strong><span style="font-size:10.5pt;font-family:Tahoma;"><br />
Cominciamo a capire il motivo per cui utilizzare ASP<br />
<!--[if !supportLineBreakNewLine]--><br />
<!--[endif]--></span></li>
<li class="MsoNormal"><strong><span style="font-size:13pt;font-family:Arial;"><a href="#decima"><span>Database      access with ADO</span></a></span></strong><span style="font-size:10.5pt;font-family:Tahoma;"><br />
La prima connessione ad un database<br />
<!--[if !supportLineBreakNewLine]--><br />
<!--[endif]--></span></li>
<li class="MsoNormal"><strong><span style="font-size:13pt;font-family:Arial;"><a href="#undicesima"><span>Facciamo la      conoscenza con il Connection e il Recorset</span></a></span></strong><span style="font-size:10.5pt;font-family:Tahoma;"><br />
L&#8217;oggetto Recordset: cosa è e come gestirlo<br />
<!--[if !supportLineBreakNewLine]--><br />
<!--[endif]--></span></li>
<li class="MsoNormal"><strong><span style="font-size:13pt;font-family:Arial;"><a href="#dodicesima"><span>Conoscenza      col Connection e Recordset non basta</span></a></span></strong><span style="font-size:10.5pt;font-family:Tahoma;"><br />
Ulteriori informazioni sul Recordset<br />
<!--[if !supportLineBreakNewLine]--><br />
<!--[endif]--></span></li>
<li class="MsoNormal"><strong><span style="font-size:13pt;font-family:Arial;"><a href="#tredicesimo"><span>Non ho ancora      finito. Lezione pratica.</span></a></span></strong><span style="font-size:10.5pt;font-family:Tahoma;"><br />
Inserire informazioni in un database tramite form.<br />
<!--[if !supportLineBreakNewLine]--><br />
<!--[endif]--></span></li>
<li class="MsoNormal"><strong><span style="font-size:13pt;font-family:Arial;"><a href="#quattordicesimo"><span>Come      presentare l&#8217;Output</span></a></span></strong><span style="font-size:10.5pt;font-family:Tahoma;"><br />
Suggerimenti su come impostare l&#8217;output delle informazioni.<br />
<!--[if !supportLineBreakNewLine]--><br />
<!--[endif]--></span></li>
<li class="MsoNormal"><strong><span style="font-size:13pt;font-family:Arial;"><a href="#quindicesimo"><span>Come      lavorare dal letto</span></a></span></strong><span style="font-size:10.5pt;font-family:Tahoma;"><br />
Automatizzare al massimo le nostre applicazioni.<br />
<!--[if !supportLineBreakNewLine]--><br />
<!--[endif]--></span></li>
<li class="MsoNormal"><strong><span style="font-size:13pt;font-family:Arial;"><a href="#sedicesimo"><span>Il pannello      di controllo</span></a></span></strong><span style="font-size:10.5pt;font-family:Tahoma;"><br />
Creare un pannello di controllo per l&#8217;applicazione<br />
<!--[if !supportLineBreakNewLine]--><br />
<!--[endif]--></span></li>
<li class="MsoNormal"><strong><span style="font-size:13pt;font-family:Arial;"><a href="#diciassettesimo"><span>Come mantenere      i nostri dati</span></a></span></strong><span style="font-size:10.5pt;font-family:Tahoma;"><br />
Dare la possibilità di modificare le informazioni da pannello.<br />
<!--[if !supportLineBreakNewLine]--><br />
<!--[endif]--></span></li>
<li class="MsoNormal"><strong><span style="font-size:13pt;font-family:Arial;"><a href="#diciottesimo"><span>Le News non      bastano</span></a></span></strong><span style="font-size:10.5pt;font-family:Tahoma;"><br />
Personalizzare con email il tutto.<br />
<!--[if !supportLineBreakNewLine]--><br />
<!--[endif]--></span></li>
<li class="MsoNormal"><strong><span style="font-size:13pt;font-family:Arial;"><a href="#diciannovesimo"><span>E poi possiamo      partire per l&#8217;Australia</span></a></span></strong><span style="font-size:10.5pt;font-family:Tahoma;"><br />
Gestire i feedback dell&#8217;applicazione.<br />
<!--[if !supportLineBreakNewLine]--><br />
<!--[endif]--></span></li>
<li class="MsoNormal"><strong><span style="font-size:13pt;font-family:Arial;"><a href="#ventesimo"><span>Vogliamo      degli altri in Ufficio?</span></a></span></strong><span style="font-size:10.5pt;font-family:Tahoma;"><br />
Gestire più utenti nel pannello di controllo.<br />
<!--[if !supportLineBreakNewLine]--><br />
<!--[endif]--></span></li>
<li class="MsoNormal"><strong><span style="font-size:13pt;font-family:Arial;"><a href="#ventunesimo"><span>Allora      diamogli le chiavi e facciamoli lavorare</span></a></span></strong><span style="font-size:10.5pt;font-family:Tahoma;"><br />
Dare l&#8217;accesso agli altri utenti.<br />
<!--[if !supportLineBreakNewLine]--><br />
<!--[endif]--></span></li>
<li class="MsoNormal"><strong><span style="font-size:13pt;font-family:Arial;"><a href="#ventiduesimo"><span>Conclusione</span></a></span></strong><span style="font-size:10.5pt;font-family:Tahoma;"><br />
Conclusioni e suggerimenti.</span></li>
</ol>
<p><span style="font-size:12pt;font-family:&quot;"><br /> </span></p>
<p class="MsoNormal"><a name="Primo"><strong><span style="font-size:15pt;font-family:Tahoma;color:black;">ASP, che cosa è? A cosa serve?</span></strong></a><span><span style="font-size:15pt;font-family:Tahoma;color:black;"></span></span></p>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:Tahoma;color:black;"><!--[if gte vml 1]&gt;                    &lt;![endif]--><!--[if !vml]--><img src="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" border="0" alt="" vspace="2" width="800" height="1" /><!--[endif]--><br />
</span>Lo sai cosa è un protocollo no?<br />
Beh, nel caso che il termine sia nuovo, un protocollo è un gruppo di regole che ci permettono di comunicare l&#8217;uno con l&#8217;altro. Per esempio, l&#8217;italiano è un protocollo, lo stringere la mano quando ci si incontra, adoperare il coltello e la forchetta, fermarsi quando il semaforo è rosso (non un buon esempio per gli italiani) sono tutti protocolli. Quando due eskimesi si incontrano si strofinano il naso, i russi si baciano 3 volte, gli inglesi una, gli italiani due, ecc. E&#8217; così che ci capiamo.<br />
L&#8217;unica cosa importante è che tutti coloro che sono coinvolti nella comunicazione condividano le stesse regole.</p>
<p>L&#8217;HTTP (HyperText Transfer Protocol), la lingua franca dell&#8217;internet, è un protocollo. Quando due computer conoscono le regole dell&#8217;HTTP possono comunicare tranquillamente.<br />
La ragione per cui è così popolare ed ha ricevuto così tanto successo, più che altro, è perché è un protocollo molto semplice. Ogni computer riesce a parlare HTTP!<br />
Sfortunatamente questa sua grande forza, come sempre nella vita, è anche la sua più grande debolezza.</p>
<p>Il HTTP protocollo funziona così:<br />
tu mi chiedi una pagina web e io te la mando. Punto, basta. Non so chi sei, no so dove stai e non me ne importa niente. Basta che mi dai un Internet Protocol (IP) verso cui spedire il pacchetto e io lo riesco a far arrivare a destinazione.</p>
<p>Sfortunatamente un protocollo così semplice non ci permette una grande sofisticazione nel processo comunicativo. È un po&#8217; come vivere senza la memoria. Un po&#8217; come un pesce rosso che gira dentro al suo vaso: &#8220;Hello! Guarda qui! Che bel sasso!&#8221;</p>
<p>È in questo contesto che vengono utilizzate tecnologie come Microsoft Internet Information Server (IIS), Macromedia ColdFusion Server, Apache Server ecc.<br />
Impiegando un po&#8217; di risorse sul server ci permettono di comunicare più intelligentemente. In un senso, introducono la memoria nei processi di comunicazione HTTP.</p>
<p>IIS (il server) per esempio, quando riceve una richiesta da te (il cliente) per un pagina mette da parte un po&#8217; di spazio nella sua memoria e ci scrive il tuo nome, indirizzo, la pagina e un mucchio di altre cose (che vedrai nella prossime lezioni) riguardo a chi sei e cosa hai chiesto. Quando richiedi un&#8217;altra risorsa il server controlla la tua area di memoria riconoscendoti subito.</p>
<p>Come programmatore, usando Active Server Pages (ASP) sul server (IIS), io posso guardare in quest&#8217;area di memoria e, per esempio, trovare il tuo nome e stamparlo in cima alla pagina prima di mandartela.<br />
ASP è la tecnologia che è a nostra disposizione per manipolare le informazioni che IIS raccoglie e mantiene.</p>
<p>In conclusione possiamo dire che tecnologie come IIS e ASP espandono il protocollo HTTP con l&#8217;introduzione della continuità e ci permettono di maneggiare la conversazione fra il server e il cliente in una maniere più ricca.</p>
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal"><a href="#Indice"><span style="font-size:10.5pt;font-family:Tahoma;">Torna a indice</span></a></p>
<p><span style="font-size:12pt;font-family:&quot;"><br /> </span></p>
<p class="MsoNormal"><a name="Secondo"><strong><span style="font-size:15pt;font-family:Tahoma;color:black;">I primi passi</span></strong></a><span style="font-size:15pt;font-family:Tahoma;color:black;"></span></p>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:Tahoma;color:black;"><!--[if gte vml 1]&gt;  &lt;![endif]--><!--[if !vml]--><img src="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" border="0" alt="" vspace="2" width="800" height="1" /><!--[endif]--><br />
</span>Prima che tu possa cominciare a sperimentare le tue applicazioni con questa tecnologia hai bisogno di un server e della DLL di ASP. Ci sono diversi siti che spiegano come si fa ad installare l&#8217;ambiente ASP.<br />
Questo sito spiega come si fa ad installare il Personal Web Server per Window98 ed è uno dei migliori</p>
<p><a href="http://www.soft-land.org/faq/asppws.html"><span style="font-size:10.5pt;font-family:Tahoma;">http://www.soft-land.org/faq/asppws.html</span></a></p>
<p>A questo punto, penso sia ragionevole assumere che tu sei gia un discreto programmatore in HTML (la lingua di HTTP), altrimenti non saresti qui a volere imparare di più ;o)</p>
<p>Allora, cominciamo subito.<br />
Il seguente file, buongiorno.htm, scrive &#8220;Buongiorno a tutti&#8221; sul tuo schermo quando lo chiami dal tuo browser.<br />
<!--[if !supportLineBreakNewLine]--><br />
<!--[endif]--></p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB">&lt;html&gt;&lt;head&gt;&lt;title&gt;Buongiorno&lt;/title&gt;&lt;/head&gt;<br />
&lt;body<br />
Buongiorno a tutti<br />
&lt;/body&gt;<br />
&lt;/html&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Se volessimo adoperare ASP per fare la stessa cosa, cosa dobbiamo fare? Beh, guarda qui:<br />
<!--[if !supportLineBreakNewLine]--><br />
<!--[endif]--></p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB">&lt;html&gt;&lt;head&gt;&lt;title&gt;Buongiorno&lt;/title&gt;&lt;/head&gt;<br />
&lt;body<br />
&lt;% response.write &#8220;Buongiorno a tutti&#8221; %&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Salva il file come buongiorno.asp e richiamalo dal browser. Come vedi i due file ottengono lo stesso risultato.</p>
<p>Analizziamo la sintassi di ASP:<br />
&lt;% e %&gt; sono I delimitatori che ASP riconosce come propri. Tutto quello che è dentro a questi delimitatori è codice ASP.<br />
Response è l&#8217;oggetto di ASP che risponde al client, mentre write (scrivi) è una delle cose che l&#8217;oggetto sa fare.<br />
Parleremo di oggetti in più approfonditamente nella prossima lezione ;o)</p>
<p>Adesso modifichiamo questo programmino in modo da farne qualcosa di più interessante<br />
<!--[if !supportLineBreakNewLine]--><br />
<!--[endif]--></p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;html&gt;&lt;head&gt;&lt;title&gt;Buongiorno   a tutti&lt;/title&gt;&lt;/head&gt;<br />
&lt;body<br />
&lt;%<br />
Dim cresci<br />
For cresci=1 to 5<br />
response.write &#8220;&lt;font size=+&#8221; &amp; cresci &amp;   &#8220;&gt;Buongiorno a tutti&lt;/font&gt;&lt;br&gt;&#8221;<br />
Next<br />
%&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</span></td>
</tr>
</tbody>
</table>
<p class="MsoNormal" style="margin-bottom:12pt;">Una volta che riesci a far funzionare lo script sul tuo browser, dai un&#8217;occhiata al codice sorgente ;o) (Visualizza -&gt; HTML)</p>
<p>Questo è il codice che vedrai visualizzato:<br />
<!--[if !supportLineBreakNewLine]--><br />
<!--[endif]--></p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;html&gt;&lt;head&gt;&lt;title&gt;   Buongiorno a tutti &lt;/title&gt;&lt;/head&gt;<br />
&lt;body<br />
&lt;font size= +1&gt; Buongiorno a tutti &lt;/font&gt;&lt;br&gt;<br />
&lt;font size= +2&gt; Buongiorno a tutti &lt;/font&gt;&lt;br&gt;<br />
&lt;font size= +3&gt; Buongiorno a tutti &lt;/font&gt;&lt;br&gt;<br />
&lt;font size= +4&gt; Buongiorno a tutti &lt;/font&gt;&lt;br&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Allora, che cosa fa esattamente questo ASP?<br />
ASP è un interprete. Quando chiediamo il file buongiorno.asp all&#8217;IIS, questo riconosce l&#8217;estensione .asp e invia il file al motore di ASP (asp.dll).</p>
<p>Il motore legge dal primo carattere all&#8217;ultimo costruendo una stringa normale in HTML e, quando trova uno dei suoi delimitatori (&lt;%) dice &#8220;Oh, questo è il mio!&#8221; e esegue l&#8217;azione appropriata. Nel nostro caso ha trovato un semplice loop. Lo esegue e continua a costruire la stringa in HTML. Quando trova il delimitatore che chiude (%&gt;) attacca la sua stringa a quella precedente e così continua fino alla fine del file. Quando ha finito, il motore manda la stringa in HTML a IIS che la invia al browser dell&#8217;utente (un po&#8217; semplicistico ma vero ;o).</p>
<p>Ne segue che ASP e HTML possono essere mescolati in ogni maniera. Finché stiamo attenti a mantenere i delimitatore, funziona sempre.<br />
Per esempio buongiorno.asp potrebbe essere scritto così:<br />
<!--[if !supportLineBreakNewLine]--><br />
<!--[endif]--></p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;html&gt;&lt;head&gt;&lt;title&gt;Buongiorno   a tutti &lt;/title&gt;&lt;/head&gt;<br />
&lt;body&gt;</p>
<p>&lt;%<br />
&#8216;dichiare la variabile<br />
Dim cresci<br />
For cresci=1 to 5<br />
%&gt;</p>
<p>&lt;font size=+&lt;%= cresci %&gt;Buongiorno a   tutti&lt;/font&gt;&lt;br&gt;</p>
<p>&lt;%<br />
Next<br />
%&gt;</p>
<p>&lt;/body&gt;<br />
&lt;/html&gt;</span></td>
</tr>
</tbody>
</table>
<p>Come vedi, qui abbiamo inserito la variabile &#8220;cresci&#8221; nel HTML<br />
L&#8217;unica cosa da notare è che per ottenere il suo valore, la sintassi è &lt;%=<br />
Ah! un&#8217;altra cosa. I commenti in ASP usano <strong>&#8216;</strong>, non dimenticarti, sono molto importanti ;o)</p>
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal"><a href="#Indice"><span style="font-size:10.5pt;font-family:Tahoma;">Torna a indice</span></a></p>
<p><span style="font-size:12pt;font-family:&quot;"><br /> </span></p>
<p class="MsoNormal"><a name="Terzo"><strong><span style="font-size:15pt;font-family:Tahoma;color:black;">Scaviamo un pò le fondamenta</span></strong></a><span><span style="font-size:15pt;font-family:Tahoma;color:black;"></span></span></p>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:Tahoma;color:black;"><!--[if gte vml 1]&gt;  &lt;![endif]--><!--[if !vml]--><img src="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" border="0" alt="" vspace="2" width="800" height="1" /><!--[endif]--><br />
</span>Abbiamo detto prima che il <strong>Response</strong> è un oggetto. Ma cosa intendiamo per oggetto?<br />
In termini tecnici un oggetto è &#8220;un coso&#8221; e il modello di questo &#8220;coso&#8221; e il gruppo di regole che ne determina le funzionalità.<br />
Non è proprio così sciocco come sembra, vediamo un semplice esempio in linguaggio umano.</p>
<p>Se dovessimo descrivere una bicicletta a una persona che non ne ha mai vista una, quale credi sia la maniera migliore per descriverla? Potremmo cominciare a descrivere le cose che la bicicletta deve essere in grado di fare oppure i metodi della bicicletta. Per esempio:<br />
Metodi: pedalare, suonare il campanello, frenare, ecc.</p>
<p>Se un oggetto deve diventare una bicicletta, è indispensabile che riesca a fare queste cose. Questi sono i &#8220;metodi&#8221; comuni a tutte le biciclette.</p>
<p>Ma non basta, ci sono anche un mucchio di biciclette diverse in giro e per descriverle tutte bisogna che definiamo anche qualche proprietà:<br />
Proprietà: il colore, l&#8217;altezza del telaio, la misura delle ruote, ecc.</p>
<p>Allora. Una volta che abbiamo definito tutti i Metodi e le Proprietà dell&#8217;oggetto, il nostro nuovo amico dovrebbe essere in grado di rappresentarsi una bicicletta abbastanza reale.</p>
<p>Per aiutarlo ancora un po&#8217; di più c&#8217;è un&#8217;altra cosa che sarebbe molto utile definire: gli eventi o le azioni che possiamo fare con l&#8217;oggetto, per esempio:<br />
Eventi: quando salgo, quando scendo, quando casco, ecc.</p>
<p>In una tecnologia come DHTML un esempio di un oggetto è una window. Metodi che possiamo adoperare sono aprire o chiudere. Proprietà di questo oggetto sono Top, Bottom, Left, Right, ecc.<br />
Un evento è il OnClick quando il mouse ci manda un segnale.</p>
<p>Lo stesso vale per l&#8217;oggetto <strong>Response</strong> che abbiamo adoperato prima. Anche questo ha Metodi e Proprietà. Adoperandoli come vogliamo siamo in grado di costruire molti Response, oggetti che, nei loro limiti, possono fare molte cose diverse.</p>
<p>L&#8217;oggetto <strong>Response</strong> ha i seguenti &#8220;Metodi&#8221;:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB">AddHeader,   AppendToLog, BinaryWrite, Clear, End, Flush, Redirect, Write</span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">E queste &#8220;Proprietà&#8221;:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">Buffer, CacheControl, Charset,   ContentType, Expires, ExpiresAbsolute, IsClientConnected, PICS, Status</span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">E tanto per complicare le cose il Response ha anche una &#8220;Collezione&#8221;:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">Cookies </span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">La sintassi come abbiamo gia visto è semplice:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">Response.Clear<br />
Response.Redirect &#8220;lab/buongiorno.asp&#8221;<br />
Response.Buffer = True<br />
Response.ContentType = &#8220;image/JPG&#8221;<br />
Response.Expires = 10<br />
strColore = Response.Cookies.Item(&#8220;colore_preferito&#8221;)</span></td>
</tr>
</tbody>
</table>
<p>Ma basta per ora.<br />
Nella prossima lezione vedremo come questi oggetti si mettono insieme per costruire delle applicazioni utili e efficienti.</p>
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal"><a href="#Indice"><span style="font-size:10.5pt;font-family:Tahoma;">Torna a indice</span></a></p>
<p><span style="font-size:12pt;font-family:&quot;"><br /> </span></p>
<p class="MsoNormal"><a name="Quarto"><strong><span style="font-size:15pt;font-family:Tahoma;color:black;">Dai, facciamo qualcosa un pò più divertente ;o)</span></strong></a><span style="font-size:15pt;font-family:Tahoma;color:black;"></span></p>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:Tahoma;color:black;"><!--[if gte vml 1]&gt;  &lt;![endif]--><!--[if !vml]--><img src="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" border="0" alt="" vspace="2" width="800" height="1" /><!--[endif]--><br />
</span>Al giorno d&#8217;oggi lavorare con queste tecnologie e un po&#8217; come giocare con il Lego.<br />
Metto 2 mattoni rossi da 2 + 2 mattoni verdi da 2, ci metto sopra un bel mattoncino blue da 6 e: &#8220;hey presto, ho fatto un ponte!&#8221;.</p>
<p>Vediamo cosa si può fare con i pezzi di ASP, l&#8217;oggetto <strong>Response</strong> + l&#8217;oggetto <strong>Request</strong>.</p>
<p>Usando il metodo <strong>Write </strong>del <strong>Response</strong> siamo in grado di scrivere sullo schermo. Usando il <strong>Request</strong> siamo in grado di leggere dallo schermo.</p>
<p>Per riferimento vi mostro il modello dell&#8217;oggetto <strong>Request</strong>:<br />
Proprieta : TotalBytes<br />
Collections : ClientCertificate, Cookies, Form, QueryString, ServerVariables<br />
Metodi : BinaryRead</p>
<p>Come col Lego, con questi due oggetti siamo in grado di costruire un ponte fra una pagina e l&#8217;altra.</p>
<p>Cominciamo col costruire una pagina che raccoglie l&#8217;input da una form e restituisce una risposta appropriata.<br />
Chiamiamola il file <em>chiedimi.asp</em></p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB">&lt;html&gt;&lt;head&gt;&lt;title&gt;Chiedimi&lt;/title&gt;&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;%<br />
Response.Write &#8220;&lt;form action=&#8217;rispondimi.asp&#8217;   method=&#8217;post&#8217;&gt;&lt;br&gt;&#8221;<br />
Response.Write &#8220;come ti chiami?&#8221;<br />
</span><span style="font-size:10.5pt;font-family:&quot;color:#064987;">Response.Write &#8220;&lt;input type=&#8217;text&#8217;   name=&#8217;nome&#8217;&gt;&lt;br&gt;&#8221;<br />
Response.Write &#8220;di che citta&#8217; sei?&#8221;<br />
</span><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB">Response.Write   &#8220;&lt;input type=&#8217;text&#8217; name=&#8217;citta&#8217;&gt;&lt;br&gt;&#8221;<br />
Response.Write &#8220;&lt;input type=&#8217;submit&#8217; value=&#8217;dimmelo&#8217;&gt;&#8221;<br />
Response.Write &#8220;&lt;/form&gt;&#8221;<br />
%&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Vedi subito cosa succede qui, no? Naturalmente avremmo potuto scrivere questo senza ASP, direttamente in HTML ma volevo solo farti vedere cosa si può fare con il Response.</p>
<p>Adesso costruiamo una pagina per la risposta chiamiamola <em>rispondimi.asp</em>.<br />
Lo so che il <strong>Request</strong> lo abbiamo appena guardato ma, sono sicuro che capirai, dopo lo guarderemo più in dettaglio.</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;html&gt;&lt;head&gt;&lt;title&gt;Rispondimi&lt;/title&gt;&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;%<br />
nome = Request.Form(&#8220;nome&#8221;)<br />
citta = Request.Form(&#8220;citta&#8221;)<br />
Response.write &#8220;Ciao &#8221; &amp; nome &amp; &#8220;,&lt;br&gt; Oooh,   &#8221; &amp; citta &amp; &#8220;…, mi piacerebbe venire…&lt;br&gt;&#8221;<br />
%&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p>Semplice no?<br />
L&#8217;oggetto<strong> Request</strong> funziona con un gruppo di collezioni di dati.<br />
In questo caso l&#8217;input dalla pagina precedente è dentro alla collezione Form.   Poiché noi sappiamo già i nomi dei campi li possiamo chiamare direttamente ma   se non li sapessimo, potremmo trovarli così:</p>
<p>&lt;html&gt;&lt;head&gt;&lt;title&gt;Rispondimi&lt;/title&gt;&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;%<br />
&#8216;per ogni dato nella collezione scrivi dato e valore del dato<br />
For each dato in Request.Form<br />
Response.Write dato &amp; &#8221; = &#8221; &amp; Request.Form(dato) &amp;   &#8220;&lt;br&gt;&#8221;<br />
Next<br />
%&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</span></td>
</tr>
</tbody>
</table>
<p>Questo modo ha il vantaggio di accedere il nome del controllo insieme con il valore. Per esempio se sono io che rispondo, il programma restituisce:</p>
<p style="text-align:center;" align="center"><em>Nome = Giorgio<br />
Citta = Surfers Paradise</em></p>
<p style="margin-bottom:12pt;">Il ponte è fatto no?<br />
È facile passare valori da un pagina all&#8217;altra con ASP?</p>
<p>Non è comunque l&#8217;unico modo per passare variabili da una pagina a un&#8217;altra. Dopo tutto non possiamo mettere form dappertutto e non sempre le variabili che vogliamo passare hanno a che fare con i nostri utenti. Spesso abbiamo bisogno di mandare delle flags per avvertirci su che corso prendere in dipendenza da un valore o un altro.<br />
Per esempio se volessimo combinare i due file chiedimi.asp e rispondimi.asp in uno solo, potremmo farlo? E se la risposta è sì, come facciamo?</p>
<p>Segue <em>domanda_rispondi.asp</em></p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;html&gt;&lt;head&gt;&lt;title&gt;Domanda   e Rispondi&lt;/title&gt;&lt;/head&gt;<br />
&lt;body</p>
<p>&lt;%<br />
clickato = Request.Querystring(&#8220;clickato&#8221;)<br />
&#8217;se cliccato ha un valore, il cliente ha cliccato il bottone della form<br />
If clickato then<br />
nome = Request.Form(&#8220;nome&#8221;)<br />
citta = Request.Form(&#8220;citta&#8221;)<br />
Response.write &#8220;Ciao &#8221; &amp; nome &amp; &#8220;,&lt;br&gt; Oooh,   &#8221; &amp; citta &amp; &#8220;&#8230;, mi piacerebbe venire&#8230;&lt;br&gt;&#8221;<br />
Else<br />
&#8216;altrimenti è appena entrato in questa pagina<br />
Response.Write &#8220;&lt;form action=&#8217;domanda_rispondi.asp?clickato=true&#8217;   method=&#8217;post&#8217;&gt;&#8221;<br />
Response.Write &#8220;come ti chiami?&#8221;<br />
Response.Write &#8220;&lt;input type=&#8217;text&#8217; name=&#8217;nome&#8217;&gt;&lt;br&gt;&#8221;<br />
Response.Write &#8220;di che citta&#8217; sei?&#8221;<br />
</span><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB">Response.Write   &#8220;&lt;input type=&#8217;text&#8217; name=&#8217;citta&#8217;&gt;&lt;br&gt;&#8221;<br />
Response.Write &#8220;&lt;input type=&#8217;submit&#8217; value=&#8217;dimmelo&#8217;&gt;&#8221;<br />
Response.Write &#8220;&lt;/form&gt;&#8221;<br />
end if<br />
%&gt;</p>
<p>&lt;/body&gt;<br />
&lt;/html&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">
Non c&#8217;è una grande differenza nel modo con cui abbiamo operato, ma guarda alla linea:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;form   action=&#8217;domanda_rispondi.asp?clickato=true&#8217; method=&#8217;post&#8217;&gt;</span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Qui prima di tutto rimandiamo il file in sé stesso passandogli un valore <em>clickato=true</em>. In questo caso il valore di clickato è contenuto nella collezione <strong>QueryString</strong> dell&#8217;oggetto <strong>Request</strong>.<br />
Quindi lo possiamo recuperare semplicemente con:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">clickato =   Request.Querystring(&#8220;clickato&#8221;)</span></p>
</td>
</tr>
</tbody>
</table>
<p>In questa maniera il valore è passato insieme all&#8217;URL (infatti lo vedi nell&#8217;URL nel browser):<br />
<a href="http://localhost/domanda_rispondi.asp?clickato=true">http://localhost/domanda_rispondi.asp?clickato=true</a></p>
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal"><a href="#Indice"><span style="font-size:10.5pt;font-family:Tahoma;">Torna a indice</span></a></p>
<p><span style="font-size:12pt;font-family:&quot;"><br /> </span></p>
<p class="MsoNormal"><a name="Quinto"><strong><span style="font-size:15pt;font-family:Tahoma;color:black;">Il Request oggetto continua</span></strong></a><span style="font-size:15pt;font-family:Tahoma;color:black;"></span></p>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:Tahoma;color:black;"><!--[if gte vml 1]&gt;  &lt;![endif]--><!--[if !vml]--><img src="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" border="0" alt="" vspace="2" width="800" height="1" /><!--[endif]--><br />
</span>Le collezioni <strong>Form</strong> e <strong>QueryString</strong> sono certamente le due più utili dell&#8217;oggetto <strong>Request</strong> e sono quelle che adopererai di più. Ma c&#8217;è anche un&#8217;altra collezione molto utile che si può adoperare con un po&#8217; di attenzione.<br />
Prova questo:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">For each nome in   Request.ServerVariables<br />
Response.Write nome &amp; &#8220;=&#8221; &amp; Request.ServerVariables(nome)   &amp; &#8220;&lt;br&gt;&#8221;<br />
next</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">I valori di tutte queste variabili sono contenute nell&#8217;header di un a richiesta HTTP e sono tutti accessibili (però stai attento poiché sono dipendenti dal browser dell&#8217;utente quindi non sono sempre tutti accessibili) .</p>
<p>Per esempio qui potremmo:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB">strFirma =   Request.ServerVariables(&#8220;HTTP_USE_AGENT&#8221;)</span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Poi analizzando questa stringa potremmo trovare che tipo di browser ha fatto una richiesta alle nostre pagine. Così se è Netscape, restituiamo una pagina per Netscape se no restituiamo pagine disegnate per Internet Explorer.</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
If Instr(strFirma,&#8221;MSIE&#8221;) then<br />
Response.write &#8220;&lt;br&gt;Hey, questo l&#8217;ha fatto   Microsoft!&lt;br&gt;&#8221;<br />
Elseif Instr(strFirma,&#8221;Mozilla&#8221;) then<br />
Response.write &#8220;&lt;br&gt;Hey, questo l&#8217;ha fatto   Netscape!&lt;br&gt;&#8221;<br />
End if<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">In caso che tu non lo sappia, la funzione <strong>Instr</strong> cerca un match nella stringa di input:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">Instr(stringa1,stringa2)</span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Come dire &#8220;Dimmi se la stringa2 è dentro a stringa1&#8243;</p>
<p>Questa collezione è molto utile per esempio quando cominciamo a rendere automatico il passaggio da una pagina all&#8217;altra. Questo è un pochettino più complicato al momento, ma funziona ottimamente per trovare quale è la pagina che effettua una chiamata. Di conseguenza potremmo automatizzare il titolo o il colore o qualunque cosa vogliamo.</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">strDaDoveVengo =   Request.Servervariables(&#8220;HTTP_REFERER&#8221;)<br />
UltimoSlash = InStrRev(strDaDoveVengo,&#8221;/&#8221;)<br />
strChiama = Mid((strDaDoveVengo),(UltimoSlash + 1), len(strDaDoveVengo)-   UltimoSlash)<br />
Response.Write &#8220;Chi mi vuole? : &#8221; &amp; strChiama &amp;   &#8220;&lt;br&gt;&#8221;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Ricordati che queste variabili dipendono dalla configurazione della tua macchina per cui non sempre sono disponibili.</p>
<p>Ecco una semplice applicazione che adopera le variabili per tracciare chi è venuto sul nostro sito, che pagina ha visto e che lingua parla. Il tutto lo scriviamo in un file <em>ospite.txt</em>. Studiala e se è un po&#8217; troppo complicata lascia perdere per adesso. Fra un paio di lezioni la capirai benissimo.</p>
<p>Prima di tutto devi creare un file vuoto di nome <em>ospite.txt</em>, fallo con Notepad (Blocco Note).</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
Dim lapagina, ilcliente, lalingua<br />
Dim filepath, logfile</p>
<p>&#8216;raccogli le informazioni che vuoi scrivere<br />
lapagina = Request.ServerVariables(&#8220;PATH_INFO&#8221;)<br />
ilcliente = Request.ServerVariables(&#8220;REMOTE_ADDR&#8221;)<br />
lalingua = Request.ServerVariables(&#8220;HTTP_ACCEPT_LANGUAGE&#8221;)</p>
<p>&#8216;crea un FileSystem oggetto<br />
Set fs = CreateObject(&#8220;Scripting.FileSystemObject&#8221;)</p>
<p>&#8216;trova il path del file<br />
filePath = Server.mapPath (&#8220;ospite.txt&#8221;)</p>
<p>&#8216;costruisci la stringa da scrivere<br />
&#8216;chr(44) è una virgola, VBcrlf è un carriage return+line feed<br />
strOspite = lapagina &amp; chr(44) &amp; ilcliente &amp; chr(44) &amp;   lalingua &amp; chr(44) &amp; Now() &amp; VBcrlf</p>
<p>&#8216;aprila per scrivere<br />
Set LogFile = fs.OpenTextFile(filepath, <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_cool.gif' alt='8)' class='wp-smiley' /> </p>
<p>&#8217;scrivi<br />
logfile.Write strOspite</p>
<p>&#8216;chiudi<br />
logfile.Close<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal"><a href="#Indice"><span style="font-size:10.5pt;font-family:Tahoma;">Torna a indice</span></a></p>
<p><span style="font-size:12pt;font-family:&quot;"><br /> </span></p>
<p class="MsoNormal"><a name="Sesto"><strong><span style="font-size:15pt;font-family:Tahoma;color:black;">L&#8217;architettura dell&#8217; ASP object model</span></strong></a><span style="font-size:15pt;font-family:Tahoma;color:black;"></span></p>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:Tahoma;color:black;"><!--[if gte vml 1]&gt;  &lt;![endif]--><!--[if !vml]--><img src="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" border="0" alt="" vspace="2" width="800" height="1" /><!--[endif]--><br />
</span>Prima che continuamo a saltare troppo di palo in frasca, facciamo un passo indietro e guardiamo a come un&#8217;applicazione scritta con ASP funziona nella sua completezza.</p>
<p>Quando accediamo per la prima volta ad un file asp, IIS guarda nella directory root per vedere se trova un file chiamata <em>global.asa</em> (Active Server Application).<br />
È questo file che ci permette di controllare due degli oggetti più importanti di ASP: l&#8217;<strong>Application</strong> e il <strong>Session</strong>.</p>
<p>Se ricordi, al principio di questo tutorial abbiamo parlato del fatto che il protocollo HTTP è senza memoria. L&#8217;oggetto <strong>Request</strong> ci ha aiutato un po&#8217; a mantenere la memoria ma solo da una pagina all&#8217;altra. Si potrebbe dire che l&#8217;oggetto <strong>Request</strong> è un po&#8217; la memoria corta. Beh, l&#8217;<strong>Application</strong> e il <strong>Session</strong> sono la memoria lunga. Per essere ancora più precisi, nell&#8217;universo di IIS, il <strong>Session</strong> è la memoria lunga che rimane in vita finchè rimane in vita la tua connessione, mentre l&#8217;<strong>Application</strong> è il codice genetico che rimane in vita per tutti, finchè l&#8217;universo di IIS continua.</p>
<p>Come vedi, in questa metafora tu hai un potere enorme e in realtà sei tu che decidi come questo universo funziona o non funziona.</p>
<p>Il <em>Global.asa</em> ha 4 events principali. <span lang="EN-GB">Eccone uno standard</span></p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB">&lt;script   LANGUAGE=&#8221;VBScript&#8221; RUNAT=&#8221;Server&#8221;&gt;</p>
<p>Sub Application_OnStart<br />
End Sub</p>
<p>Sub Application_OnEnd<br />
End Sub</p>
<p>Sub Session_OnStart<br />
End Sub</p>
<p>Sub Session_OnEnd<br />
End Sub</p>
<p>&lt;/script&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Per esempio se definiamo una variabile di scopo Application così:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB">&lt;%<br />
Sub Application_OnStart<br />
Set application(&#8220;connection_string&#8221;) =   &#8220;DSN=lamiadb;uid=sa;pwd=&#8221;<br />
Set Application(&#8220;immagini_path&#8221;) =   &#8220;C:\MyWebRoot\Mywebsite\ASPtutorial\immagini\&#8221;<br />
End Sub<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">In qualunque delle mie pagine, posso scrivere</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
connection_string = Application(&#8220;connection_string&#8221;)<br />
&#8216;per ottenere la mia stringa di connessione all database<br />
immagini_path = Application((&#8220;immagini_path&#8221;)<br />
&#8216;per ottenere il directory dove sono le mie immagini<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">e queste variabili rimangono valide finché noi stessi uccidiamo l&#8217;applicazione o fermiamo IIS.</p>
<p>Un altro esempio. Nel <em>global.asa</em> durante <strong>Session OnStart</strong> event, definiamo:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB">&lt;%<br />
Sub Application_OnStart<br />
Set Session(&#8220;login&#8221;) = False<br />
End Sub<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Potremmo adoperarla in tutte le pagine nel nostro sito per controllare se il cliente ha l&#8217;autorizzazione per vedere la pagina. Come? Così:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
If Session (&#8220;login&#8221;) = False then<br />
Il cliente non si è autenticato<br />
Messaggio: mi dispiace ma qui non puoi venire<br />
Else<br />
Il cliente si è autenticato<br />
Lascia entrare e mostra la pagina<br />
End if<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Naturalmente questo presume che tu abbia un meccanismo per permettere che il cliente effettui il login nel tuo sito e che il tuo codice cambi lo stato della variabile (<em>Set Session (&#8220;login&#8221;) = True</em>) quando il login è avvenuto correttamente.</p>
<p>Nell&#8217;oggetto <strong>Session</strong> la durata delle variabili è valida fino a quando non chiudi il tuo browser, oppure, se non hai attività, IIS chiude di solito la sessione dopo 30 minuti.</p>
<p>Un esempio pratico che puoi applicare subito.<br />
Diciamo che tu hai un sito dove è importante che i tuoi clienti entrino da una pagina specifica che vuoi tu e non da dove loro hanno messo un bookmark:<br />
Facile, lo facciamo con il <strong>Response</strong>:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB">Sub   Session_OnStart<br />
Response.Redirect &#8220;C:\MyWebRoot\MyWebSite\buongiorno.asp<br />
end sub</span></td>
</tr>
</tbody>
</table>
<p>Appena la <strong>Session</strong> comincia, cioè quando qualcuno entra nel sito attraverso il suo bookmark, IIS spara l&#8217;azione <strong>Session_OnStart</strong> che ti ridirige esattamente dove vuoi tu.</p>
<p>C&#8217;è chi dice che l&#8217;internet mette sempre più potere nelle mani dei clienti ma non certo con noi programmatori. Abbiamo sempre tutto sotto controllo ;o)</p>
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal"><a href="#Indice"><span style="font-size:10.5pt;font-family:Tahoma;">Torna a indice</span></a></p>
<p><span style="font-size:12pt;font-family:&quot;"><br /> </span></p>
<p class="MsoNormal"><a name="Settimo"><strong><span style="font-size:15pt;font-family:Tahoma;color:black;">Vbscript e le lingue che usiamo per parlare con il browser</span></strong></a><span style="font-size:15pt;font-family:Tahoma;color:black;"></span></p>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:Tahoma;color:black;"><!--[if gte vml 1]&gt;  &lt;![endif]--><!--[if !vml]--><img src="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" border="0" alt="" vspace="2" width="800" height="1" /><!--[endif]--><br />
</span>Le pagine ASP sono una combinazione di script in ActiveX e di tag HTML. IIS usa questi scripts, per darci la funzionalità nelle nostre applicazioni.<br />
IIS ha due motori interni per interpretare questi scripts:</p>
<p>· VBScript che è un subset di Visual Basic for Application (VBA)<br />
· Jscript un versione di JavaScript da Microsoft</p>
<p>Javascript, un subset del linguaggio C, è un prodotto di Netscape e di Sun Microsystem ed è interpretato dal suo motore.</p>
<p>Quali di queste lingue adoperare è una tua scelta e dipende naturalmente dalla familiarità che hai con questi linguaggi. In pratica però adoperiamo un po&#8217; di una e un po&#8217; dell&#8217;altra.</p>
<p>Per esempio, qui adoperiamo Vbscript per scrivere server side script e adoperiamo Javascript per scrivere client side script. La ragione è che Netscape non capisce VBScript e quindi tutti i nostri utenti Netscape non vedrebbero quando siamo svegli.</p>
<p>Siccome questo è un tutorial su ASP, non VBScript, cerchiamo di non perdere troppo tempo. Ci sono ottimi manuali per VBScript anche online. Per citarne uno, all&#8217;indirizzo riportato qui sotto trovi l&#8217;help di Microsoft che puoi scaricare e installare liberamente sul tuo computer.</p>
<p><a href="http://msdn.microsoft.com/scripting"><span style="font-size:10.5pt;font-family:Tahoma;" lang="EN-GB">http://msdn.microsoft.com/scripting</span></a><span lang="EN-GB"><br />
32-bit VBScript Documentation Download (VBSDOC.exe 473KB) for Windows 95 and Windows NT.</p>
<p></span>Guardiamo solo velocemente quello di cui abbiamo bisogno. Come tutte le lingue VBScript impiega delle strutture di controllo per creare la logica nelle nostre applicazioni. Ci sono due tipi principali di strutture:</p>
<p>· Decisioni, che definiscono su che ramo logico andare in base al risultato di un test<br />
· Loops, che processano ciclicamente fino a che una specifica condizione non è raggiunta.</p>
<p>Decisioni:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
If (sei non sei alto più di 2    metri) then<br />
Passa sotto<br />
End if<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Questa è la decisione più comune di tutte e c&#8217;è poco da spiegare.<br />
&#8220;Se passi la condizione allora facciamo qualcosa&#8221;<br />
La struttura che segue è un allargamento della precedente<br />
&#8220;Se passi la condizione allora facciamo qualcosa altrimenti facciamone qualche altra&#8221;"</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
If (finché il tempo è buono) then<br />
Rimango in spiaggia<br />
Else<br />
Me ne vado a casa<br />
end if<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">La prossima struttura invece è adoperata per scegliere fra decisioni multiple:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
Select case colore<br />
Case &#8220;rosso&#8221;<br />
Sono un comunista<br />
Case &#8220;verde&#8221;<br />
Sono un conservazionista<br />
Case&#8221;blue&#8221;<br />
Sono un sognatore<br />
Case else<br />
Sono un cretino ;o)<br />
end select<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Questa struttura è molto efficiente e in più produce del codice che si legge bene.</p>
<p>Loop<br />
Come abbiamo detto queste sono strutture cicliche che continuano a riprodursi fino a che una condizione predeterminante è raggiunta.</p>
<p>Questo lo abbiamo già visto nella prima lezione</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
For scalino=1 fino a 50<br />
Vai su e conta<br />
Next<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Logico no? Comunque, usando il For loop dobbiamo sapere quanti gradini ci sono prima di cominciare altrimenti rimaniamo a metà della scala!</p>
<p>La seguente struttura ci permette invece di arrivare in cima alla scala in tutte le maniere</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
Do While (intanto che ci sono scalini)<br />
Vai su e conta<br />
Loop<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Quando arriviamo in cima e non ci sono più scalini il Loop esce.<br />
Ti ricordi <em>ospite.asp</em> che abbiamo scritto nella lezione 5?<br />
Allora prova questa struttura:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
Dim filepath, logfile</p>
<p>Set fs = Server.CreateObject(&#8220;Scripting.FileSystemObject&#8221;)</p>
<p>&#8216;trova il path del file<br />
filePath = Server.mapPath (&#8220;ospite.txt&#8221;)<br />
&#8216;o se più facile<br />
filepath = &#8220;c:/latuawebroot/latuafile/ospite.txt&#8221;<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">se ti trovi nei guai qui, usa il <strong>Response</strong> per vedere cosa succede.<br />
Per esempio se il tuo programma non trova il file, utilizza un&#8217;altra dichiarazione:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;% Response.Write &#8220;il   filepath del mio file è =: &#8221; &amp; filepath &amp; &#8220;&lt;br&gt;&#8221;   %&gt;</span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">così vedi dove sei e lo puoi riparare.</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
&#8216;apri per leggere (1)<br />
Set logfile = fs.OpenTextFile(filepath, 1)</p>
<p>&#8216;leggi finché End of File è diverso da true<br />
Do While logfile.AtEndOfStream &lt;&gt; true<br />
response.write logfile.ReadLine &amp; &#8220;&lt;br&gt;&#8221;<br />
loop</p>
<p>&#8216;esci e chiudi la porta<br />
logfile.Close<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p>Come vedi questo programma legge tutto il tuo file <em>ospite.txt</em>. Così se domani sei in vacanza in Sardegna e vuoi vedere chi è venuto sul tuo server, facile: apri <em>looping.asp</em> e il gioco è fatto.</p>
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal"><a href="#Indice"><span style="font-size:10.5pt;font-family:Tahoma;">Torna a indice</span></a></p>
<p><span style="font-size:12pt;font-family:&quot;"><br /> </span></p>
<p class="MsoNormal"><a name="Ottavo"><strong><span style="font-size:15pt;font-family:Tahoma;color:black;">Usare Funzioni &amp; Procedure</span></strong></a><span style="font-size:15pt;font-family:Tahoma;color:black;"></span></p>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:Tahoma;color:black;"><!--[if gte vml 1]&gt;  &lt;![endif]--><!--[if !vml]--><img src="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" border="0" alt="" vspace="2" width="800" height="1" /><!--[endif]--><br />
</span>La creazione di Funzioni e Procedure nel nostro programma è una tecnica programmatica utile per diverse ragioni. Prima di tutto rende il programma più leggibile partizionando dei blocchi di logica che compiono dei lavori definitivi e in più, poiché spesso la stessa cosa deve essere fatta in molti posti diversi, ci permette di riutilizzare del codice.</p>
<p>Per esempio, ti ricordi il programma che abbiamo scritto nella lezione 4, quando abbiamo combinato in un unico file l&#8217;input di una form col suo output nella presentazione?</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;html&gt;&lt;head&gt;&lt;title&gt;Chiedi   e Rispondi&lt;/title&gt;&lt;/head&gt;<br />
&lt;body</p>
<p>&lt;%<br />
clickato = Request.Querystring(&#8220;clickato&#8221;)<br />
&#8217;se clickato ha un valore, il cliente ha clickato il bottone<br />
If clickato then<br />
nome = Request.Form(&#8220;nome&#8221;)<br />
citta = Request.Form(&#8220;citta&#8221;)<br />
Response.write &#8220;Ciao &#8221; &amp; nome &amp; &#8220;,&lt;br&gt; Oooh,   &#8221; &amp; citta &amp; &#8220;…, mi piacerebbe venire…&lt;br&gt;&#8221;<br />
Else<br />
&#8216;altrimenti è appena entrato in questa pagina<br />
Response.Write &#8220;&lt;form action=&#8217;chiedi_rispondi.asp?clickato=truè   method=&#8217;post&#8217;&gt;&#8221;<br />
Response.Write &#8220;&lt;input type=&#8217;text&#8217; name=&#8217;nomè&gt; &#8220;<br />
Response.Write &#8220;&lt;input type=&#8217;text&#8217; name=&#8217;citta&#8217;&gt;&#8221;<br />
Response.Write &#8220;&lt;input type=&#8217;submit&#8217; name=&#8217;submit&#8217;   value=&#8217;dimmelo&#8217;&gt; &#8220;<br />
Response.Write &#8220;&lt;/form&gt;&#8221;<br />
end if<br />
%&gt;</p>
<p>&lt;/body&gt;<br />
&lt;/html&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Questo programma, essendo così corto, è certamente leggibile; ma se le righe invece di essere poche fossero diverse centinaia? Con una form molto lunga e con una presentazione complessa basata su un numero di parametri passati da pagine precedenti? Tipo una situazione di e-commerce dove raccogliamo dati di carte di credito?</p>
<p>Guarda un po&#8217; com&#8217;è bello usando procedure:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
Option Explicit<br />
Dim clickato, form<br />
Dim nome, citta<br />
Dim saluti<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose:Dimostra gli oggetti Response e Request<br />
&#8216;Date: 10 March 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
call Main()</p>
<p>Sub Main()<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose:contiene l&#8217;intera logica dell&#8217; applicazione<br />
&#8216;Date: 10 March 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
FaiLaTesta()</p>
<p>clickato = Request.QueryString(&#8220;clickato&#8221;)</p>
<p>If NOT clickato then</p>
<p>MostraLaForma()</p>
<p>Else</p>
<p>LeggiLaForma(form)</p>
<p>DaiLaRisposta()</p>
<p>End if</p>
<p>FaiLaCoda()</p>
<p>End Sub</p>
<p>Sub FaiLaTesta()<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose:Scrive HTML header<br />
&#8216;Date: 10 March 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
Response.write &#8220;&lt;html&gt;&lt;head&gt;&lt;title&gt;Chiedi e   Rispondi&lt;/title&gt;&lt;/head&gt;&lt;body&gt;&#8221;<br />
End Sub</p>
<p>Sub MostraLaForma()<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose:mostra la form al cliente<br />
&#8216;Date: 10 March 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
Response.Write &#8220;&lt;form action=&#8217;showproc.asp?clickato=truè   method=&#8217;post&#8217;&gt;&lt;br&gt;&#8221;<br />
Response.Write &#8220;come ti chiami?&#8221;<br />
Response.Write &#8220;&lt;input type=&#8217;text&#8217; name=&#8217;nomè&gt;&lt;br&gt;&#8221;<br />
Response.Write &#8220;di che citta&#8217; sei?&#8221;<br />
Response.Write &#8220;&lt;input type=&#8217;text&#8217; name=&#8217;citta&#8217;&gt;&lt;br&gt;&#8221;<br />
Response.Write &#8220;&lt;input type=&#8217;submit&#8217; value=&#8217;dimmelo&#8217;&gt;&#8221;<br />
Response.Write &#8220;&lt;/form&gt;&#8221;</p>
<p>End Sub</p>
<p>Sub LeggiLaForma(form)<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: Legge i dati e mantiene le variabili<br />
&#8216;Date: 10 March 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
nome = Request.Form(&#8220;nome&#8221;)<br />
citta = Request.Form(&#8220;citta&#8221;)</p>
<p>End Sub</p>
<p>Sub DaiLaRisposta()<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: Produce output<br />
&#8216;Date: 10 March 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
Response.write &#8220;Ciao &#8221; &amp; nome &amp; &#8220;,&lt;br&gt; Oooh,   &#8221; &amp; citta &amp; &#8220;…, mi piacerebbe venire…&lt;br&gt;&#8221;<br />
End Sub</p>
<p>Sub FaiLaCoda()<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose:scrive HTML Footer<br />
&#8216;Date: 10 March 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
Response.write &#8220;&lt;/body&gt;&lt;/html&gt;&#8221;<br />
End Sub<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Certo che a vederlo in questo contesto sembra un po&#8217; strafatto ma immagina che la prossima volta che dobbiamo costruire un file simile ne abbiamo già una metà già scritta. Comunque svilupperemo l&#8217;argomento durante il corso di queste lezioni e vedrai che questo metodo è molto utile. Nel programma precedente non ci sono Funzioni ma solo Procedure. Così mettiamone una e vediamo qual è la differenza.</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
Function ParteDelGiorno()<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: calcola la parte del giorno per salutare<br />
&#8216;Date: 10 March 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
Dim cheora</p>
<p>cheora = Hour(Now)</p>
<p>Select case cheora<br />
case 8,9,10,11,12<br />
cheora = &#8220;Buongiorno&#8221;<br />
case 13,14,15,16,17<br />
cheora = &#8220;Buon pomeriggio&#8221;<br />
case 18,19,20,21,22,23,24<br />
cheora = &#8220;Buonanotte&#8221;<br />
case else<br />
cheora = &#8220;Spegni il computer e vai a letto&#8221;<br />
End Select</p>
<p>ParteDelGiorno = cheora</p>
<p>End Function<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Come vedi questa Funzione è certamente riutilizzabile anche se un po&#8217; semplice (ma bisogna pur cominciare da qualche parte o no? ;o).</p>
<p>Aggiungi queste due linee nel codice fra:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
If NOT clickato then</p>
<p>saluti = ParteDelGiorno()<br />
Response.Write saluti</p>
<p>MostraLaForma()<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Come vedi, poiché la funzione ci restituisce un valore, bisogna dargli una variabile per raccogliere l&#8217;informazione. Oppure volendo avremmo potuto scriverla direttamene con:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;% Response.write   ParteDelGiorno() %&gt;</span></p>
</td>
</tr>
</tbody>
</table>
<p>Allora, in sostanza, abbiamo messo un po&#8217; di ordine nel nostro programma.<br />
Anche se ti sembra un po&#8217; troppa strutturato per quello che fa, so di sicuro che mi ringrazierai se per caso ritorni a questo programma fra qualche mese ;o)</p>
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal"><a href="#Indice"><span style="font-size:10.5pt;font-family:Tahoma;">Torna a indice</span></a><br /> <a name="Nona"><strong><span style="font-size:15pt;font-family:Tahoma;color:black;">E adesso la vera ragione per cui adoperiamo tecnologie come ASP</span></strong></a><span style="font-size:15pt;font-family:Tahoma;color:black;"></span></p>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:Tahoma;color:black;"><!--[if gte vml 1]&gt;  &lt;![endif]--><!--[if !vml]--><img src="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" border="0" alt="" vspace="2" width="800" height="1" /><!--[endif]--><br />
</span>Fino ad ora tutta l&#8217;enfasi nello sviluppo dei siti web è stata &#8220;messa in vetrina&#8221;. Abbiamo fatto delle vetrine stupende che sono costate una fortuna, ma dentro al negozio? Molto poco. Spesso un cliente ha l&#8217;impressione che non ci sia nessunno e spesso il cliente ha ragione! Come facciamo a rimediare?</p>
<p>In questo caso tecnologie come ASP ci aiutano proprio. Per esempio tutti sanno che un sito deve avere un mezzo con cui il cliente può comunicare con noi. La maniera più semplice è un &#8220;mailto:&#8221; collegato al tuo email.</p>
<p>Sfortunatamente questo metodo fallisce molto spesso poiché presuppone che il programma di posta elettronica dell&#8217;utente sia configurato correttamente e spesso non lo è.</p>
<p>Il secondo metodo è una form mantenuta dall&#8217;ISP presso cui risiede il nostro sito. Gli Script dietro a questa form di solito mandano un e-mail al cliente. Il metodo migliore però è costruire la tua form da solo e controllare le informazioni che vuoi sapere dai tuoi clienti e la risposta che gli vuoi dare.</p>
<p>A questo punto, cominciamo a costruire un&#8217;applicazione che ci servirà quando avremo finito le nostre lezioni: costruiamo una Form che ci permette di raccogliere informazioni dai nostri clienti, restituendo loro un messaggio di ringraziamento e mandando a noi una email. Il primo pezzo lo sai già fare da solo.</p>
<p>Cominciamo a fare un file chiamato <em>feedback.asp</em> e vediamo dove ci porta.</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;HTML&gt;<br />
&lt;HEAD&gt;<br />
&lt;TITLE&gt;Feedback Form&lt;/TITLE&gt;<br />
&lt;/head&gt;<br />
&lt;/HEAD&gt;</p>
<p>&lt;BODY&gt;<br />
&lt;FORM ACTION=&#8221;manda_feedback.asp&#8221; METHOD=&#8221;post&#8221;&gt;<br />
&lt;div align=&#8221;center&#8221;&gt;<br />
&lt;table border=&#8221;0&#8243; width=&#8221;85%&#8221; celpadding=&#8221;2&#8243;   cellspacing=&#8221;2&#8243;&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;<br />
&lt;h1&gt;Grazie per&#8230;.&lt;hr align=&#8221;LEFT&#8221; size=&#8221;1&#8243;   width=&#8221;100%&#8221; color=&#8221;navy&#8221;&gt;&lt;/h1&gt;<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;Se avete&#8230;.&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;td align=&#8221;center&#8221;&gt;&lt;br&gt;&lt;br&gt;<br />
&lt;table width=&#8221;60%&#8221; border=&#8221;0&#8243; celpadding=&#8221;2&#8243;   cellspacing=&#8221;2&#8243;&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;Nome&lt;/td&gt;<br />
&lt;td&gt;&lt;INPUT NAME=&#8221;nome&#8221; TYPE=&#8221;TEXT&#8221; size=24   MAXLENGTH=50&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;email&lt;/td&gt;<br />
&lt;td valign=&#8221;top&#8221;&gt;<br />
&lt;INPUT NAME=&#8221;email&#8221; TYPE=&#8221;TEXT&#8221; ALIGN=left size=24   MAXLENGTH=50&gt;<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;tr&gt;<br />
&lt;td valign=&#8221;top&#8221;&gt;Commenti&lt;/td&gt;<br />
&lt;td&gt;&lt;TEXTAREA NAME=&#8221;commenti&#8221; ROWS=7   COLS=40&gt;&lt;/TEXTAREA&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td valign=&#8221;top&#8221;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/td&gt;<br />
&lt;td&gt;<br />
&lt;table width=&#8221;100%&#8221; border=&#8221;0&#8243;   celpadding=&#8221;2&#8243; cellspacing=&#8221;2&#8243;&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;<br />
&lt;INPUT TYPE=checkbox NAME=&#8221;notifyme&#8221; VALUE=&#8221;yes&#8221;   UNCHECKED&gt;<br />
&lt;/td&gt;<br />
&lt;td&gt;Vi interessa ricevere&#8230;.&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td colspan=&#8221;2&#8243; align=&#8221;center&#8221;&gt;<br />
&lt;table width=&#8221;50%&#8221; border=&#8221;0&#8243; celpadding=&#8221;6&#8243;   cellspacing=&#8221;2&#8243;&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;&lt;INPUT TYPE=&#8221;submit&#8221; NAME=&#8221;parla&#8221;   VALUE=&#8221;parla con noi&#8221;&gt;&lt;/td&gt;<br />
&lt;td align=&#8221;right&#8221;&gt;<br />
&lt;INPUT TYPE=&#8221;reset&#8221; NAME=&#8221;nograzie&#8221; VALUE=&#8221;no   grazie&#8221;&gt;<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;/div&gt;<br />
&lt;/FORM&gt;</p>
<p>&lt;/BODY&gt;<br />
&lt;/HTML&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;"><em>Feedback.asp</em> ha 2 text boxes, 1 textarea per i commenti e un checkbox nel caso i nostri clienti vogliano ricevere una newsletter regolarmente o pubblicità o qualcosa che ce li leghi a noi un po&#8217;. In inglese si chiama stickyness (come il miele, appiccicoso)</p>
<p>La form chiama in azione manda_feedback.asp con il metodo Post. Questo file raccoglie l&#8217;input del cliente e lo invia a noi per email. In più presenta al cliente una pagina ringraziando per i suoi commenti.</p>
<p>Volendo, se sei avventuroso, potresti adoperare lo stesso metodo di prima e costruire l&#8217;applicazione nello stesso file. Come vuoi tu, ormai sei già un esperto ;o)</p>
<p>Allora costruiamo questa <em>manda_feedback.asp</em>.<br />
Per mandare una email dobbiamo adoperare il <strong>NewMail</strong> oggetto dalla <strong>CDONTS</strong> library di Micorsoft.</p>
<p>Il modo in cui adoperiamo questo oggetto è simile agli altri e molto semplice.</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
Option Explicit<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: processes the feedback mail<br />
&#8216;Date: 10 March 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
Dim form, nome</p>
<p>%&gt;<br />
&lt;Html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;Manda Feedback&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;%</p>
<p>call Main()</p>
<p>Sub Main()<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: la logica dell&#8217;applicazione<br />
&#8216;Date: 10 March 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8217;se la lungezza è 0 non c&#8217;e niente nell email<br />
If Len(Request.Form(&#8220;email&#8221;)) = 0 then<br />
no_email()<br />
else<br />
manda_posta(form)<br />
ecco_fatto(nome)<br />
end if<br />
End sub</p>
<p>Sub no_email()<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: manda un messaggio se email è vuoto<br />
&#8216;Date: 10 March 2001<br />
&#8216;Commenti: potevamo usare javascript per forzare il cliente<br />
&#8216;ma questi sono esempi di ASP<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;allora diciamo al cliente che senza una email non possiamo rispondergli<br />
response.write &#8220;&lt;div align=&#8217;center&#8217;&gt;&#8221;<br />
response.write &#8220;&lt;table border=&#8217;0&#8242; width=&#8217;80%&#8217; cellspadding=&#8217;4&#8242;   cellspacing=&#8217;4&#8242;&gt;&#8221;<br />
response.write &#8220;&lt;tr&gt;&lt;td&gt;niente   email&#8230;?&lt;/td&gt;&lt;/tr&gt;&#8221;<br />
response.write &#8220;&lt;tr&gt;&lt;td&gt;per favore, torna indiedro e&#8230;   &lt;/td&gt;&lt;/tr&gt;&#8221;<br />
response.write &#8220;&lt;tr&gt;&lt;td align=&#8217;middlè&gt;&#8221;<br />
response.write &#8220;&lt;a href=&#8217;Javascript:history.go(-1)&#8217;&gt;Prova di   nuovo&lt;/a&gt;&#8221;<br />
response.write &#8220;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&#8221;<br />
End Sub</p>
<p>Sub manda_posta(form)<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: manda la email<br />
&#8216;Date: 10 March 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
Dim email, commenti<br />
Dim objMail, mandamiquesto</p>
<p>&#8216;facciamo la vendemmia dell&#8217;input<br />
nome = Request.Form(&#8220;nome&#8221;)<br />
email = Request.Form(&#8220;email&#8221;)<br />
commenti = Request.Form(&#8220;commenti&#8221;)</p>
<p>mandamiquesto = nome &amp; &#8220;VBcrlf&#8221; &amp; email &amp;   &#8220;Vbcrlf&#8221; &amp; commenti<br />
&#8216;costruiamo un NewMail oggetto<br />
Set objMail = Server.CreateObject(&#8220;CDONTS.NewMail&#8221;)<br />
&#8216;adesso che abbiamo accesso a tuttle le sue proprieta, usiamole<br />
&#8216;prendiamo il nome dal Form di input<br />
objMail.From = nome<br />
&#8216;mandiamola a me, va…<br />
objMail.To = &#8220;giorgiogobbo@hotmail.com&#8221;<br />
&#8216;mettiamoci un riga per il titolo<br />
objMail.Subject = &#8220;Feedback dal sito&#8221;<br />
&#8216;e nel corpo ci mettiamo la stringa che abbiamo costruito<br />
objMail.Body = mandamiquesto<br />
&#8216;al momento è poco importante, direi<br />
objMail.importance = 0<br />
&#8216;e via che va<br />
objMail.Send</p>
<p>&#8216;e adesso puliamo prima di andarcene<br />
Set objMail = Nothing<br />
end sub</p>
<p>Sub ecco_fatto(nome)<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: manda un ringraziamento<br />
&#8216;Date: 10 March 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
response.write &#8220;&lt;div align=&#8217;center&#8217;&gt;&#8221;<br />
response.write &#8220;&lt;table border=&#8217;0&#8242; width=&#8217;80%&#8217; cellspadding=&#8217;4&#8242;   cellspacing=&#8217;4&#8242;&gt;&#8221;<br />
response.write &#8220;&lt;tr&gt;&lt;td&gt;Grazie &#8221; &amp; nome &amp;   &#8221; per il&#8230;&lt;/td&gt;&lt;/tr&gt;&#8221;<br />
response.write &#8220;&lt;tr&gt;&lt;td align=&#8217;middlè&gt;&#8221;<br />
response.write &#8220;&lt;a   href=&#8217;Javascript:history.go(-2)&#8217;&gt;Continua&lt;/a&gt;&#8221;<br />
response.write &#8220;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&#8221;<br />
End sub</p>
<p>%&gt;</p>
<p>&lt;/body&gt;<br />
&lt;/html&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Ed ecco qui che abbiamo la nostra form funzionante. L&#8217;oggetto <strong>NewMail</strong> è abbastanza semplice no?</p>
<p>Se volessimo delle copie carbone il <strong>NewMail</strong> ci permetterebbe di specificare anche:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
ObjMail.CC<br />
ObjMail.BCC<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">O potremmo formattare la email in HTML con la proprietà:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;% ObjMail.BodyFormat =   CdoBodyFormatHTML %&gt;</span></p>
</td>
</tr>
</tbody>
</table>
<p>Ma adopereremo questo oggetto di nuovo nelle prossime lezioni e impareremo di più.</p>
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal"><a href="#Indice"><span style="font-size:10.5pt;font-family:Tahoma;">Torna a indice</span></a></p>
<p><span style="font-size:12pt;font-family:&quot;"><br /> </span></p>
<p class="MsoNormal"><a name="decima"><strong><span style="font-size:15pt;font-family:Tahoma;color:black;">Database access with ADO</span></strong></a><span style="font-size:15pt;font-family:Tahoma;color:black;"></span></p>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:Tahoma;color:black;"><!--[if gte vml 1]&gt;  &lt;![endif]--><!--[if !vml]--><img src="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" border="0" alt="" vspace="2" width="800" height="1" /><!--[endif]--><br />
</span>Se il nostro sito diventa popolare dovremmo ricevere un mucchio di email e presto ci accorgeremo che programmi come Outlook o Eudora non sono adeguati a conservare questo dati. Ma grazie a Dio, ci sono le banche dati. In un sito moderno, le banche dati sono come il cuore in un essere umano: indispensabili. Costruiamone una subito.</p>
<p>Io ne ho fatta una in Microsoft Access. L&#8217;ho chiamata <em>CRM.mdb</em> poiché vogliamo costruire un sistema di Customer Relationship Management (CRM, gestore dei rapporti con i clienti) che ci permetta di comunicare con i nostri clienti in una maniera più efficiente. Dentro <em>crm.mdb</em> ho messo una tabella chiamata:</p>
<div>
<table class="MsoNormalTable" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="padding:3pt;" colspan="2">
<p style="text-align:center;" align="center"><strong>tbl_feedback</strong></p>
</td>
</tr>
<tr>
<td style="padding:3pt;">
<p class="MsoNormal"><strong><em><span style="font-size:10.5pt;font-family:Tahoma;color:black;">Nome campo</span></em></strong><span style="font-size:10.5pt;font-family:Tahoma;color:black;"></span></p>
</td>
<td style="padding:3pt;">
<p class="MsoNormal"><strong><em><span style="font-size:10.5pt;font-family:Tahoma;color:black;">Tipo campo</span></em></strong><span style="font-size:10.5pt;font-family:Tahoma;color:black;"></span></p>
</td>
</tr>
<tr>
<td style="padding:3pt;">
<p class="MsoNormal"><em><span style="font-size:10.5pt;font-family:Tahoma;color:black;">Id Autonumber</span></em><span style="font-size:10.5pt;font-family:Tahoma;color:black;"></span></p>
</td>
<td style="padding:3pt;">
<p class="MsoNormal"><em><span style="font-size:10.5pt;font-family:Tahoma;color:black;" lang="EN-GB">primary key</span></em><span style="font-size:10.5pt;font-family:Tahoma;color:black;" lang="EN-GB"></span></p>
</td>
</tr>
<tr>
<td style="padding:3pt;">
<p class="MsoNormal"><em><span style="font-size:10.5pt;font-family:Tahoma;color:black;" lang="EN-GB">Nome</span></em><span style="font-size:10.5pt;font-family:Tahoma;color:black;" lang="EN-GB"></span></p>
</td>
<td style="padding:3pt;">
<p class="MsoNormal"><em><span style="font-size:10.5pt;font-family:Tahoma;color:black;" lang="EN-GB">Text</span></em><span style="font-size:10.5pt;font-family:Tahoma;color:black;" lang="EN-GB"></span></p>
</td>
</tr>
<tr>
<td style="padding:3pt;">
<p class="MsoNormal"><em><span style="font-size:10.5pt;font-family:Tahoma;color:black;" lang="EN-GB">Email</span></em><span style="font-size:10.5pt;font-family:Tahoma;color:black;" lang="EN-GB"></span></p>
</td>
<td style="padding:3pt;">
<p class="MsoNormal"><em><span style="font-size:10.5pt;font-family:Tahoma;color:black;" lang="EN-GB">Text</span></em><span style="font-size:10.5pt;font-family:Tahoma;color:black;" lang="EN-GB"></span></p>
</td>
</tr>
<tr>
<td style="padding:3pt;">
<p class="MsoNormal"><em><span style="font-size:10.5pt;font-family:Tahoma;color:black;">Commenti</span></em><span style="font-size:10.5pt;font-family:Tahoma;color:black;"></span></p>
</td>
<td style="padding:3pt;">
<p class="MsoNormal"><em><span style="font-size:10.5pt;font-family:Tahoma;color:black;">Memo</span></em><span style="font-size:10.5pt;font-family:Tahoma;color:black;"></span></p>
</td>
</tr>
</tbody>
</table>
</div>
<p style="margin-bottom:12pt;">E poi ho inserito un paio di records in modo da fare un test dell&#8217;intera procedura.</p>
<p>A questo punto lasciami chiarire la scelta di Access come database. Io di solito uso MS SQL ma ho pensato che Access sia un pò più accessibile come costo. Però il tipo di database che adoperi per questi esercizi non è molto rilevante. Il code che scriveremo funziona per quasi tutte le banche dati commerciabili, quindi scegli quella con cui sei più comodo.</p>
<p>Prima che andiamo troppo avanti però, devo dirti che Access non è una soluzione industriale, non è il tipo di applicazione che vorrei adoperare su un web server per un sito commerciale.</p>
<p>Allora cominciamo a fare cose serie. Fino a poco tempo fa, costruire un sito dinamico con un database era un lavoro solo per i &#8220;big boys&#8221; ma adesso con oggetti (o meglio super oggetti) come ActiveX Database Object (ADO) è diventato un gioco da ragazzi.</p>
<p>ADO è come un superset di un oggetto. È una collezione di oggetti che, tutte insieme, semplificano il lavoro di collegare e manipolare i dati che risiedono dentro il database. In più ADO è inserito dentro un&#8217;altra tecnologia di Microsoft, Object Linking &amp; Embedding DataBase (OLE DB), il che rende le cose ancora più facili.</p>
<p>La prima cosa da fare per lavorare con un database è di creare una connection. Se vuoi dare acqua al giardino devi attaccare il tubo al rubinetto, è uguale.</p>
<p>Il metodo che adoperiamo per collegarci è sempre lo stesso indipendentemente dal tipo di database che utilizziamo, la sintassi però varia. Ci sono diverse maniere per collegarsi ma qui, per semplicità adoperiamo la Connection String.</p>
<p>Per esempio per collegarci con il nostro database dobbiamo inserire il seguente codice:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
Provider = Microsoft.Jet.OLEDB.4.0; Data Source =   C:/dovehaimessoiltuo/crm.mdb<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Un consiglio gratuito: non salvare mai il database nella stessa directory dei tuoi file ASP. Mettilo sempre fuori dal tuo Web Root, in modo da renderla inaccessibile agli utenti.</p>
<p>Lo stesso code per MS SQL per esempio è</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
Provider = SQLOLEDB; Data Source = ilnomedeltuoserver; Initial Catalog=   nomedeldatabase; User Id=ilnome; Password=lapassword<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Comunque una volta che abbiamo inserito uno di questi due comandi per la nostra pagina ASP siamo collegati al database.</p>
<p>Non ci credi? Beh, prova un po&#8217; questo codice (chiama il file <em>check_connection.asp</em>)</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
Set objConn = Server.CreateObject(&#8220;ADODB.Connection&#8221;)<br />
objConn.Open(&#8220;Provider = Microsoft.Jet.OLEDB.4.0; Data Source =   C:/asptutorial/crm.mdb&#8221;)</p>
<p>Set objRs = Server.CreateObject(&#8220;ADODB.Recordset&#8221;)<br />
set objRs = objConn.Execute(&#8220;SELECT * from tbl_feedback&#8221;)</p>
<p>Do while NOT objRs.EOF<br />
response.write &#8220;nome = &#8221; &amp; objRs(&#8220;nome&#8221;) &amp;   &#8220;&lt;br&gt;&#8221;<br />
response.write &#8220;email = &#8221; &amp; objRs(&#8220;email&#8221;) &amp;   &#8220;&lt;br&gt;&#8221;<br />
response.write &#8220;commenti = &#8221; &amp; objRs(&#8220;commenti&#8221;)   &amp; &#8220;&lt;br&gt;&#8221;<br />
response.write &#8220;&lt;hr size=&#8217;1&#8242; color=&#8217;midnightbluè width=&#8217;40%&#8217;   align=&#8217;left&#8217;&gt;&#8221;<br />
objRs.Movenext<br />
Loop</p>
<p>objRs.Close<br />
Set objRs = Nothing<br />
objConn.Close<br />
Set objConn = Nothing<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p>Se non ha funzionato, leggi i messaggi che il Browser ti dà sulla pagina. Io qui uso IE5.5 e se per esempio metto l&#8217;indirizzo del database sbagliato mi dice:</p>
<p><em>Error Type:<br />
Microsoft JET Database Engine (0&#215;80004005)<br />
&#8216;C:\asptutorial\tut\crm.mdb&#8217; is not a valid path. </em><em><span lang="EN-GB">Make sure that the path name is spelled correctly and that you are connected to the server on which the file resides.<br />
/tut/check_connection.asp, line 4<br />
</span></em><span lang="EN-GB"><br />
Svelto, guardo subito alla linea 4 e vedo subito dove è il problema.</p>
<p></span>Se a questi punto il database non funziona non puoi continuare con le lezioni. Quindi concentrati e lavora. Quando sei riuscito a vedere il contenuto del tuo database, prosegui con la lezione 11 e vediamo un po&#8217; che cosa è che abbiamo fatto in realtà.</p>
<p class="MsoNormal">
<p class="MsoNormal"><a href="#Indice"><span style="font-size:10.5pt;font-family:Tahoma;">Torna a indice</span></a></p>
<p><span style="font-size:12pt;font-family:&quot;"><br /> </span></p>
<p class="MsoNormal"><a name="undicesima"><strong><span style="font-size:15pt;font-family:Tahoma;color:black;">Facciamo la conoscenza con il Connection e il Recorset</span></strong></a><span style="font-size:15pt;font-family:Tahoma;color:black;"></span></p>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:Tahoma;color:black;"><!--[if gte vml 1]&gt;  &lt;![endif]--><!--[if !vml]--><img src="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" border="0" alt="" vspace="2" width="800" height="1" /><!--[endif]--><br />
</span>Congratulazioni ;o)<br />
Adesso che hai passato questo ostacolo, non ce ne sono più. Di qui in poi, è tutta discesa. A dir la verità, è proprio incredibile come si fa presto al giorno d&#8217;oggi. Fino a poco tempo fa ci sarebbero volute delle settimane per fare una cosa simile. La metafora del Lego sta diventando più e più realtà.<br />
Allora cos&#8217;è che abbiamo fatto esattamente? Cosa significa il codice che abbiamo usato?<br />
Cominciamo dal principio:<br />
Abbiamo già visto prima come si costruisce un oggetto con <strong>NewMail</strong>. Qui faremo lo stesso. Costruiamo un oggetto <strong>Connection</strong> che appartiene ad ADO e lo chiamiamo objConn.</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB">Set   objConn = Server.CreateObject(&#8220;ADODB.Connection&#8221;)</span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Poi usando il metodo Open del Connection Object ci colleghiamo al database:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">objConn.Open(&#8220;Provider =   Microsoft.Jet.OLEDB.4.0; Data Source = C:/asptutorial/crm.mdb&#8221;)</span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Adesso abbiano bisogno di un oggetto Recordset (anche questo di ADO) per metterci dentro tutti i nostri dati che vengono fuori quando interroghiamo il database.</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB">Set objRs   = Server.CreateObject(&#8220;ADODB.Recordset&#8221;)</span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">E poi con il metodo <strong>Execute</strong> dell&#8217;oggetto <strong>Connection</strong> eseguiamo una query al database e depositiamo il risultato nel recordset che abbiamo costruito.</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB">set objRs   = objConn.Execute(&#8220;SELECT * from tbl_feedback&#8221;)</span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Ciò che faremo di qui in poi l&#8217;abbiamo già visto. Questo While Loop semplicement dice &#8220;fai finché non siamo arrivati alla fine del file&#8221; (EOF = End Of File)</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB">Do While   NOT objRs.EOF</span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Scrivimi il nome, email e commenti del primo record:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">response.write &#8220;nome = &#8221;   &amp; objRs(&#8220;nome&#8221;) &amp; &#8220;&lt;br&gt;&#8221;<br />
response.write &#8220;email = &#8221; &amp; objRs(&#8220;email&#8221;) &amp;   &#8220;&lt;br&gt;&#8221;<br />
response.write &#8220;commenti = &#8221; &amp; objRs(&#8220;commenti&#8221;)   &amp; &#8220;&lt;br&gt;&#8221;<br />
response.write &#8220;&lt;hr size=&#8217;1&#8242; color=&#8217;midnightbluè width=&#8217;40%&#8217;   align=&#8217;left&#8217;&gt;&#8221;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">e quando l&#8217;hai fatto spostati al prossimo record</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">objRs.Movenext</span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">e rifallo</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">Loop</span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">
Poi si pulisce.</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB">&lt;%<br />
objRs.Close<br />
Set objRs = Nothing<br />
objConn.Close<br />
Set objConn = Nothing<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Tutto qui.<br />
Naturalmente questa non è l&#8217;unica maniera di scrittura del codice e forse neanche la più efficiente, comunque avrai poi tempo di sperimentare per conto tuo. Questo metodo è semplice e valido.<br />
Bisogna sottolineare che è molto importante chiudere il recordset e la connection. Vedremo i motivi un po&#8217; più avanti.<br />
La regola più importante per accedere ad una database è uguale a quella nell&#8217;affrontare una rotonda stradale: entra più svelto che puoi ed esci appena possibile. Quindi la connection deve essere chiusa al più presto possibile in modo da far posto a un&#8217;altra macchina. È più che sicuro che nella nostra applicazione queste righe di code saranno ripetute molte volte anche spesso nella stessa pagina. Anche se fai 100 chiamate nella stessa pagina mai lasciare aperta la connection, chiudila sempre e crearne un&#8217;altra quando ne hai bisogno. Altrimenti se continui a girare intorno e intorno gli altri faranno fatica ad entrare.<br />
Allora, vediamo se possiamo semplificare un po&#8217; il codice che abbiamo scritto per evitare di scrivere sempre tutto.<br />
Per esempio la string che usiamo per collegarci al database, poiché è sempre la stessa, non potremmo metterla nel <em>global.asa</em>? Ricordi? Se la mettiamo in quel file ce l&#8217;abbiamo sempre e se spostiamo il database da un&#8217;altra parte o se ne facciamo un&#8217;altra dobbiamo solo cambiare quella linea e tutto il resto funziona.</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB">&lt;%<br />
Sub Application_OnStart()<br />
strDbConn = &#8220;Provider = Microsoft.Jet.OLEDB.4.0; Data Source =   C:/asptutorial/crm.mdb&#8221;<br />
Set Application(&#8220;dbconn&#8221;) = strDbConn<br />
End Sub<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Cosi che nelle nostre pagine ci colleghiamo così:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;% objConn.Open   Application(&#8220;dbconn&#8221;) %&gt;</span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">O ancora meglio, potremmo scriver una procedura</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
Sub Prendi_Recordset(objConn, objRs, strConn, strsql)<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: riceve un recordset dalla mia database<br />
&#8216;Date: 28 March 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
Set objConn = Server.CreateObject(&#8220;ADODB.Connection&#8221;)<br />
objConn.Open strConn<br />
Set objRS = objConn.Execute (strsql)<br />
End Sub<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Tutte le volte che devi accedere al database basta una riga sola</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
call Prendi_recordset(objConn, objRS, strConn, strsql)<br />
dove naturalmente strConn e strsql sono:<br />
strsql =&#8221;SELECT * from tbl_feedback&#8221;<br />
strConn = Application(&#8220;dbconn&#8221;)<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">e così finiamo questo programma per bene. <span lang="EN-GB">(Segue <em>check_connection.asp</em>)</span></p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
Option Explicit<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: controlla se la nostro database funzione<br />
&#8216;Date: 28 March 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
Dim objConn, objRs</p>
<p>call Main()</p>
<p>Sub Main()<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: logica dell&#8217;applicazione<br />
&#8216;Date: 28 March 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
Dim strConn, strsql<br />
strConn = Application(&#8220;dbconn&#8221;)<br />
strsql =&#8221;SELECT * from tbl_feedback&#8221;</p>
<p>call Prendi_Recordset(strConn, strsql)<br />
call Guarda_Recordset(objRs)</p>
<p>&#8216;pulisci e chiudi<br />
objRs.Close<br />
Set objRs = Nothing<br />
objConn.close<br />
Set objConn = Nothing<br />
End sub</p>
<p>Sub Guarda_Recordset(objRs)<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: mostra un recordset dalla mia database<br />
&#8216;Date: 28 March 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
Do while NOT objRs.EOF<br />
response.write &#8220;nome = &#8221; &amp; objRs(&#8220;nome&#8221;) &amp;   &#8220;&lt;br&gt;&#8221;<br />
response.write &#8220;email = &#8221; &amp; objRs(&#8220;email&#8221;) &amp;   &#8220;&lt;br&gt;&#8221;<br />
response.write &#8220;commenti = &#8221; &amp; objRs(&#8220;commenti&#8221;)   &amp; &#8220;&lt;br&gt;&#8221;<br />
response.write &#8220;&lt;hr size=&#8217;1&#8242; color=&#8217;midnightbluè width=&#8217;40%&#8217;   align=&#8217;left&#8217;&gt;&#8221;<br />
objRs.Movenext<br />
Loop<br />
End sub</p>
<p>Function Prendi_Recordset(strConn, strsql)<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: riceve un recordset da un query<br />
&#8216;Date: 28 March 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
Set objConn = Server.CreateObject(&#8220;ADODB.Connection&#8221;)<br />
objConn.Open strConn<br />
Set objRs = objConn.Execute (strsql)<br />
End Function<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p class="MsoNormal">
<p class="MsoNormal"><a href="#Indice"><span style="font-size:10.5pt;font-family:Tahoma;">Torna a indice</span></a></p>
<p><span style="font-size:12pt;font-family:&quot;"><br /> </span></p>
<p class="MsoNormal"><a name="dodicesima"><strong><span style="font-size:15pt;font-family:Tahoma;color:black;">Conoscenza col Connection e Recordset non basta</span></strong></a><span style="font-size:15pt;font-family:Tahoma;color:black;"></span></p>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:Tahoma;color:black;"><!--[if gte vml 1]&gt;  &lt;![endif]--><!--[if !vml]--><img src="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" border="0" alt="" vspace="2" width="800" height="1" /><!--[endif]--><br />
</span>Nella lezione precedente siamo riusciti a estrarre un recordset dal nostro database. Bene, da qualche parte si deve pur cominciare. Se non l&#8217;avevi mai fatto sono sicuro che sei molto contento con te stesso ;o)</p>
<p>L&#8217;oggetto <strong>Recordset</strong> però è un po&#8217; più complicato di quello che abbiamo fatto fino adesso. Se ci hai fatto caso, nel programma <em>check_connection.asp</em> abbiamo dovuto mantenere la  <strong>Connection</strong> con il database aperta finché non abbiamo finito col recordset. La ragione è che il metodo che abbiamo adoperato, essendo il più semplice, ci ha dato un <strong>Connected Recordset</strong>. C&#8217;è un&#8217;altra maniera, e più efficiente di estrarre un recordset che ci permette di chiudere la connection non appena i dati sono arrivati. Questo è il <strong>Disconnected Recordset</strong>.</p>
<p>Modifichiamo il nostro <em>Prendi_Recordset</em> così che possiamo chiudere la connection subito. Prima però abbiamo bisogno di includere un file che contiene i valori delle costanti di ADO. Il file si chiama <em>adovbs.inc</em> e si include nella pagina con questa sintassi:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;!&#8211;#include   virtual=&#8221;yourwebroot/dovelatrovo/adovbs.inc&#8221;&#8211;&gt;</span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Lo so che non abbiamo parlato di <strong>Includes</strong> e forse è meglio se ne parliamo subito.</p>
<p>Gli <strong>Includes</strong> sono un po&#8217; come le <strong>Funtions</strong> e le <strong>Procedures</strong> e si adoperano per incapsulare del codice in modo da poterlo riutilizzare in molte pagine. Il motore di ASP, quando vede una direttiva &#8220;include&#8221;, cerca il file e inserisce il codice che trova in quel punto del file. Personalmente io adopero poco i file include perché rendono il codice più difficile da leggere e possono creare problemi se la struttura del directory del sito cambia. Di regola si fa una folder chiamata include e tutte le include si chiamano di li. Per convenzione sono chiamati con estensione <em>.inc</em> ma le puoi chiamare anche con <em>.asp</em>. Come tutto il resto possono contenere ASP, HTML o una mescolanza di tutto.<br />
Con un po&#8217; di giudizio sono molto utili e anche noi li adopereremo presto. Il più grande vantaggio è che se mettiamo un file include che, per esempio, contiene un numero di funzioni utili al principio di tutte le nostre pagine, quando cambiamo l&#8217;include non dobbiamo cambiare nessuna delle nostre pagine.</p>
<p>Ma riprendiamo con la nostra funzione che ci dà indietro un recordset disconnesso.</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
Function Prendi_Recordset(strConn, strsql)<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: ritorna un disconnetted recordset<br />
&#8216;Date: 28 March 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
Dim objConn, objRS</p>
<p>Set objConn = Server.CreateObject(&#8220;ADODB.Connection&#8221;)<br />
objConn.Open strConn<br />
Set objRS = Server.CreateObject(&#8220;ADODB.Recordset&#8221;)</p>
<p>objRS.CursorLocation = adUseClient<br />
objRS.Open strsql, objConn, adOpenForwardOnly, adLockBatchOptimistic</p>
<p>Set objRS.ActiveConnection = Nothing<br />
objConn.Close<br />
Set objConn = Nothing</p>
<p>Prendi_RecordSet = objRS</p>
<p>End Function<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Ne segue che dalla nostra pagina la chiamiamo con:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;% Set objRS =   Prendi_RecordSet(strConn, strsql) %&gt;</span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">La ragione per cui è preferibile chiudere le connessioni al database al più presto è che le connessioni richiedono al server risorse considerevoli. In più se non le chiudiamo esplicitamente rimangono aperte, con il risultato che le performance del Server deteriorano drasticamente. Non vogliamo, insomma, fare aspettare i nostri utenti più di quello che devono.</p>
<p>Spesso però dobbiamo fare delle query al database che non richiedono che il codice ci ritorni un recordset. Per esempio se volessimo inserire un nuovo record nella nostro database o se ne volessimo cambiare uno già in esistenza.<br />
In questi casi è sufficiente collegarci e eseguire la query, così:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
dbConn = Application(&#8220;dbconn&#8221;)</p>
<p>strsql = &#8220;INSERT INTO tbl_feedback ( nome, email, commenti, ricevuto )   Values(&#8216;amerigo vespucci&#8217;,'amerigo@nave.net&#8217;,'hello therè,Now());&#8221;</p>
<p>Set objConn = Server.CreateObject(&#8220;ADODB.Connection&#8221;)<br />
objConn.Open dbConn<br />
objConn.Execute strsql<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Quando questi programmi non funzionanao subito come vorresti, usa il <strong>response.write</strong> per vedere cosa è che non va. Per esempio con:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;% Response.write strsql %&gt;</span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Potresti vedere il code sql della tua query. Se lo tagliamo e lo incolliamo nella query window di Access vedi subito se funziona o no. Lo puoi mettere a posto da lì e quando ha funzionato in Access lo puoi incollare di nuovo nel tuo programma.</p>
<p>Anche in questi case sarebbe meglio fare una Function così che la possiamo usare dappertutto e in una maniera uniforme.</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
Sub fai_query(strConn, strsql)<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: fa una query con una string valida di SQL<br />
&#8216;Date: 29 March 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
Dim objConn</p>
<p>Set objConn = Server.CreateObject(&#8220;ADODB.Connection&#8221;)<br />
objConn.Open strConn</p>
<p>objConn.Execute strSQL</p>
<p>objConn.Close<br />
set objConn = Nothing</p>
<p>End Sub<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Quando la chiamiamo dal nostro programma, questo basta</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB">Call   fai_query( strConn, strsql)</span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">A questo punto abbiamo un bell&#8217;esempio per l&#8217;uso di una include file. Se mettiamo queste <strong>Procedure</strong> e funzioni che abbiamo scritto per connetterci al database in un file unico e chiamandolo <em>attrezzi_db.inc</em>, possiamo adoperarle dappertutto nelle nostre pagine.</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;!&#8211;#file   virtual=lamiaWebRoot/include/attrezzi_db.inc &#8211;&gt;</span></p>
</td>
</tr>
</tbody>
</table>
<p>Il nostro programma diventa molto più facile da leggere, ci risparmiamo un mucchio di linee di codice e siamo sicuri che chiudiamo le <strong>Connections</strong>.</p>
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal"><a href="#Indice"><span style="font-size:10.5pt;font-family:Tahoma;">Torna a indice</span></a></p>
<p class="MsoNormal">
<p><span style="font-size:12pt;font-family:&quot;"><br /> </span></p>
<p class="MsoNormal"><a name="tredicesimo"><strong><span style="font-size:15pt;font-family:Tahoma;color:black;">Non ho ancora finito. Lezione pratica.</span></strong></a><span style="font-size:15pt;font-family:Tahoma;color:black;"></span></p>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:Tahoma;color:black;"><!--[if gte vml 1]&gt;  &lt;![endif]--><!--[if !vml]--><img src="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" border="0" alt="" vspace="2" width="800" height="1" /><!--[endif]--><br />
</span>Adesso che sai recuperare un record dal database e metterne dentro uno nuovo non ci rimane un gran che da fare. Per fare qualcosa di utile cerchiamo allora di costruire un&#8217;applicazione che ci permetta di inserire delle informazioni nel database attraverso una form e di mostrarle quando visualizziamo una pagina. Per esempio: se volessimo mostrare notizie di attualità sul nostro sito e cambiarle ogni giorno, non sarebbe meglio automatizzare il lavoro invece di scrivere HTML in continuazione? Io penso di sì!</p>
<p>Allora scriviamo il pseudocodice che descrive l&#8217;applicazione:</p>
<p><em>Input<br />
Se la form è vuota<br />
Mostrala<br />
Se no<br />
Entra I dati nel database</p>
<p>Output<br />
Prendi il recordset dal database<br />
Formattalo e mostralo all&#8217;utente<br />
</em><br />
Subito costruiamo un&#8217;altra tabella per questa applicazione dove mettiamo i seguenti campi:</p>
<div>
<table class="MsoNormalTable" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="padding:3pt;" colspan="2">
<p style="text-align:center;" align="center"><strong>tbl_news</strong></p>
</td>
</tr>
<tr>
<td style="padding:3pt;">
<p class="MsoNormal"><strong><em><span style="font-size:10.5pt;font-family:Tahoma;color:black;">Nome campo</span></em></strong><span style="font-size:10.5pt;font-family:Tahoma;color:black;"></span></p>
</td>
<td style="padding:3pt;">
<p class="MsoNormal"><strong><em><span style="font-size:10.5pt;font-family:Tahoma;color:black;">Tipo campo</span></em></strong><span style="font-size:10.5pt;font-family:Tahoma;color:black;"></span></p>
</td>
</tr>
<tr>
<td style="padding:3pt;">
<p class="MsoNormal"><em><span style="font-size:10.5pt;font-family:Tahoma;color:black;">Id</span></em><span style="font-size:10.5pt;font-family:Tahoma;color:black;"></span></p>
</td>
<td style="padding:3pt;">
<p class="MsoNormal"><em><span style="font-size:10.5pt;font-family:Tahoma;color:black;" lang="EN-GB">primary key</span></em><span style="font-size:10.5pt;font-family:Tahoma;color:black;" lang="EN-GB"></span></p>
</td>
</tr>
<tr>
<td style="padding:3pt;">
<p class="MsoNormal"><em><span style="font-size:10.5pt;font-family:Tahoma;color:black;" lang="EN-GB">Titolo</span></em><span style="font-size:10.5pt;font-family:Tahoma;color:black;" lang="EN-GB"></span></p>
</td>
<td style="padding:3pt;">
<p class="MsoNormal"><em><span style="font-size:10.5pt;font-family:Tahoma;color:black;">Text</span></em><span style="font-size:10.5pt;font-family:Tahoma;color:black;"></span></p>
</td>
</tr>
<tr>
<td style="padding:3pt;">
<p class="MsoNormal"><em><span style="font-size:10.5pt;font-family:Tahoma;color:black;">Sottotitolo</span></em><span style="font-size:10.5pt;font-family:Tahoma;color:black;"></span></p>
</td>
<td style="padding:3pt;">
<p class="MsoNormal"><em><span style="font-size:10.5pt;font-family:Tahoma;color:black;">Memo</span></em><span style="font-size:10.5pt;font-family:Tahoma;color:black;"></span></p>
</td>
</tr>
<tr>
<td style="padding:3pt;">
<p class="MsoNormal"><em><span style="font-size:10.5pt;font-family:Tahoma;color:black;">Testo</span></em><span style="font-size:10.5pt;font-family:Tahoma;color:black;"></span></p>
</td>
<td style="padding:3pt;">
<p class="MsoNormal"><em><span style="font-size:10.5pt;font-family:Tahoma;color:black;">Memo</span></em><span style="font-size:10.5pt;font-family:Tahoma;color:black;"></span></p>
</td>
</tr>
<tr>
<td style="padding:3pt;">
<p class="MsoNormal"><em><span style="font-size:10.5pt;font-family:Tahoma;color:black;">Data_vivo</span></em><span style="font-size:10.5pt;font-family:Tahoma;color:black;"></span></p>
</td>
<td style="padding:3pt;">
<p class="MsoNormal"><em><span style="font-size:10.5pt;font-family:Tahoma;color:black;" lang="EN-GB">date/time</span></em><span style="font-size:10.5pt;font-family:Tahoma;color:black;" lang="EN-GB"></span></p>
</td>
</tr>
<tr>
<td style="padding:3pt;">
<p class="MsoNormal"><em><span style="font-size:10.5pt;font-family:Tahoma;color:black;" lang="EN-GB">Data_morto</span></em><span style="font-size:10.5pt;font-family:Tahoma;color:black;" lang="EN-GB"></span></p>
</td>
<td style="padding:3pt;">
<p class="MsoNormal"><em><span style="font-size:10.5pt;font-family:Tahoma;color:black;">date/time</span></em><span style="font-size:10.5pt;font-family:Tahoma;color:black;"></span></p>
</td>
</tr>
</tbody>
</table>
</div>
<p style="margin-bottom:12pt;">Hai fatto? Via! La form la fai con gli occhi chiusi. Io, qui sotto, modifico quella che abbiamo già fatto per il feedback, è quasi uguale. Salva questa form e chiamala <em>news.inc</em> Io uso i file include (<em>.inc</em>) di rado, ma ora voglio farti vedere un po&#8217; tutte le maniere in cui si può lavorare.</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;&#8211; NEWS.INC&#8211;&gt;<br />
&lt;&#8211; input form per le news applicazione&#8211;&gt;<br />
&lt;HTML&gt;<br />
&lt;HEAD&gt;<br />
&lt;TITLE&gt;News Input&lt;/TITLE&gt;<br />
&lt;/head&gt;<br />
&lt;/HEAD&gt;</p>
<p>&lt;BODY&gt;<br />
&#8216;usiamo questa flag per controllare se la form è stata mandata<br />
&lt;FORM ACTION=&#8221;news.asp?submitted=true&#8221;   METHOD=&#8221;post&#8221;&gt;<br />
&lt;div align=&#8221;center&#8221;&gt;<br />
&lt;table border=&#8221;0&#8243; width=&#8221;95%&#8221; celpadding=&#8221;2&#8243;   cellspacing=&#8221;2&#8243;&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;&lt;h1&gt;Entra le news per oggi qui&#8230;<br />
&lt;hr align=&#8221;LEFT&#8221; size=&#8221;1&#8243; width=&#8221;100%&#8221;   color=&#8221;navy&#8221;&gt;&lt;/h1&gt;<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;td align=&#8221;center&#8221;&gt;&lt;br&gt;&lt;br&gt;<br />
&lt;table width=&#8221;80%&#8221; border=&#8221;0&#8243; celpadding=&#8221;2&#8243;   cellspacing=&#8221;2&#8243;&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;Titolo&lt;/td&gt;<br />
&lt;td&gt;&lt;INPUT NAME=&#8221;titolo&#8221; TYPE=&#8221;TEXT&#8221;   size=&#8221;80&#8243; MAXLENGTH=&#8221;80&#8243;&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;Sottotitolo&lt;/td&gt;<br />
&lt;td valign=&#8221;top&#8221;&gt;<br />
&lt;TEXTAREA NAME=&#8221;sottotitolo&#8221; ROWS=&#8221;3&#8243;   COLS=&#8221;60&#8243;&gt;&lt;/TEXTAREA&gt;<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;tr&gt;<br />
&lt;td valign=&#8221;top&#8221;&gt;News&lt;/td&gt;<br />
&lt;td&gt;&lt;TEXTAREA NAME=&#8221;news&#8221; ROWS=&#8221;10&#8243;   COLS=&#8221;60&#8243;&gt;&lt;/TEXTAREA&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td nowrap&gt;Data di entrata&lt;/td&gt;<br />
&lt;td valign=&#8221;top&#8221;&gt;<br />
&lt;INPUT NAME=&#8221;vivo&#8221; TYPE=&#8221;TEXT&#8221; Value=&#8221;&lt;%=   Now() %&gt;&#8221; size=&#8221;24&#8243; MAXLENGTH=&#8221;24&#8243;&gt;<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td nowrap&gt;Data di scadenza&lt;/td&gt;<br />
&lt;td valign=&#8221;top&#8221;&gt;<br />
&lt;INPUT NAME=&#8221;morto&#8221; TYPE=&#8221;TEXT&#8221; size=&#8221;24&#8243;   MAXLENGTH=&#8221;24&#8243;&gt;<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td valign=&#8221;top&#8221;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/td&gt;<br />
&lt;td&gt;<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td colspan=&#8221;2&#8243; align=&#8221;center&#8221;&gt;<br />
&lt;table width=&#8221;40%&#8221; border=&#8221;0&#8243; celpadding=&#8221;6&#8243;   cellspacing=&#8221;2&#8243;&gt;<br />
&lt;tr&gt;<br />
&lt;td align=&#8221;right&#8221;&gt;<br />
&lt;INPUT TYPE=&#8221;submit&#8221; NAME=&#8221;submit&#8221;   VALUE=&#8221;Entra&#8221;&gt;<br />
&lt;/td&gt;<br />
&lt;td align=&#8221;left&#8221;&gt;<br />
&lt;INPUT TYPE=&#8221;reset&#8221; NAME=&#8221;Reset&#8221;   VALUE=&#8221;Reset&#8221;&gt;<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;/div&gt;<br />
&lt;/FORM&gt;</p>
<p>&lt;/BODY&gt;<br />
&lt;/HTML&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">
L&#8217;unica cosa che ancora non hai visto qui è la maniera in cui inseriamo il valore dalla data di oggi. Mi sembra che ne abbiamo parlato nella prima lezione. Inutile farlo a mano, no?</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB">&lt;tr&gt;<br />
&lt;td nowrap&gt;Data di entrata&lt;/td&gt;<br />
&lt;td valign=&#8221;top&#8221;&gt;<br />
&lt;INPUT NAME=&#8221;vivo&#8221; TYPE=&#8221;TEXT&#8221; Value=&#8221;&lt;%=   Now() %&gt;&#8221; size=&#8221;24&#8243; MAXLENGTH=&#8221;24&#8243;&gt;<br />
&lt;/td&gt;<br />
&lt;/tr&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Le date sono sempre un po&#8217; problematiche con le banche dati e nel maneggiarle di sicuro ti verrà qualche capello bianco. Infatti paesi diversi adoperano formati diversi. Per esempio negli USA la data è sempre riportata come mese/giorno/anno, mentre in Europa è giorno/mese/anno. A dirti la verità io odio le date ma, hey! Non si può farne a meno.</p>
<p>Adesso mettiamoci intorno il resto del programma adoperando quella library che abbiamo già fatto <em>attrezzi_db.asp</em>. Includendola abbiamo accesso alle nostre funzioni.</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
Option Explicit<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: applicazione per le news<br />
&#8216;Date: 30 March 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
%&gt;<br />
&lt;!&#8211; la mia è nella stessa folder &#8211;&gt;<br />
&lt;!&#8211; #include file=&#8221;attrezzi_db.asp&#8221; &#8211;&gt;<br />
&lt;%<br />
Dim strConn, message<br />
Dim titolo, sottotitolo, testo, vivo, morto</p>
<p>call Main()</p>
<p>Sub Main()<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: la logica dell&#8217;applicazione<br />
&#8216;Date: 29 March 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
Dim submitted, query, form<br />
submitted = Request.QueryString(&#8220;submitted&#8221;)<br />
If submitted then<br />
call vendemmia(form)<br />
query = costruisci_query(titolo,sottotitolo,testo,vivo,morto)<br />
strConn = Application(&#8220;dbconn&#8221;)<br />
&#8216;questa è in attrezzi_db.inc, ti ricordi? quindi ce l&#8217;abbiamo<br />
call fai_query(strConn, query)<br />
call quale_risultato(message)<br />
else<br />
%&gt;<br />
&lt;!&#8211; mettiamo la form qui &#8211;&gt;<br />
&lt;!&#8211; #include file=&#8221;news.inc&#8221;&#8211;&gt;<br />
&lt;%<br />
end if<br />
end Sub</p>
<p>Sub vendemmia(form)<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: raccogli i dati dalla form<br />
&#8216;Date: 29 March 2001<br />
&#8216;Commenti: corregge il problema di &amp;quot;<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;questo Replace lo facciamo per il carattere &#8220;&amp;quot;&#8221;<br />
&#8216;altrimenti la Database   si confonde<br />
titolo =   Replace(Request.Form(&#8220;titolo&#8221;),&#8221;&#8216;&#8221;,&#8221;&#8221;&#8221;)<br />
sottotitolo =   Replace(Request.Form(&#8220;sottotitolo&#8221;),&#8221;&#8216;&#8221;,&#8221;&#8221;&#8221;)<br />
testo = Replace(Request.Form(&#8220;news&#8221;),&#8221;&#8216;&#8221;,&#8221;&#8221;&#8221;)<br />
vivo = Request.Form(&#8220;vivo&#8221;)<br />
morto = Request.Form(&#8220;morto&#8221;)<br />
end sub</p>
<p>Function costruisci_query(titolo,sottotitolo,news,vivo,morto)<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: costruisce la query<br />
&#8216;Date: 29 March 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
Dim strsql<br />
strsql = &#8220;INSERT INTO tbl_news ( titolo, sottotitolo, testo, data_vivo,   data_morto)&#8221;<br />
strsql = strsql &amp; &#8221; Values(&#8216;&#8221;<br />
strsql = strsql &amp; titolo &amp; &#8220;&#8216;,&#8217;&#8221;<br />
strsql = strsql &amp; sottotitolo &amp; &#8220;&#8216;,&#8217;&#8221;<br />
strsql = strsql &amp; testo &amp; &#8220;&#8216;,&#8217;&#8221;<br />
strsql = strsql &amp; vivo &amp; &#8220;&#8216;,&#8217;&#8221;<br />
strsql = strsql &amp; morto &amp; &#8220;&#8216;)&#8221;<br />
&#8217;se hai dei guai costruendo questa, metti un<br />
&#8216;Response.Write strsql &amp; &#8220;&lt;br&gt;&#8221;<br />
&#8216;così la vedi e la puoi accomodare<br />
costruisci_query = strsql<br />
End Function</p>
<p>Sub quale_risultato(message)<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: cronaca il risultato della query e formatta una risposta<br />
&#8216;Date: 29 March 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
Select case message<br />
case &#8220;ok&#8221;<br />
response.write &#8220;Tutto è andato bene, &lt;br&gt; e grazie per il   pesce.&#8221;<br />
</span><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB">response.write   &#8220;&lt;br&gt;&lt;br&gt;&lt;div align=&#8217;center&#8217;&gt;&lt;a   href=&#8217;JavaScript:history.back()&#8217;&gt;Click to go   back&lt;/a&gt;&lt;/div&gt;&#8221;<br />
case &#8220;not ok&#8221;<br />
response.write &#8220;È un grosso disastro! </span><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;br&gt;   Chissa cosa è successo?&#8221;<br />
response.write &#8220;Prova a scrivere la query e altre variabili per vedere   se riesci a risolvere il problema.&#8221;<br />
response.write &#8220;&lt;br&gt;Anche la professione del falegname è onorevole   ;o)&#8221;<br />
response.write &#8220;&lt;br&gt;&lt;br&gt;&lt;div align=&#8217;center&#8217;&gt;&lt;a   href=&#8217;JavaScript:history.back()&#8217;&gt;Click to go back&lt;/a&gt;&lt;/div&gt;&#8221;<br />
case else<br />
response.write &#8220;Se sei qui è metafisica pura&#8221;<br />
end select</p>
<p>end sub<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Non è un gran che diverso da quello che abbiamo già fatto prima. Ma come sempre quando si comincia a scrivere il codice il pseudocodice si espande e così il nostro originale è diventato:</p>
<p><em>Input<br />
Se la form NON è vuota<br />
includi il file attrezzi.asp<br />
vendemmia la form<br />
costruisci la query<br />
esegui la query<br />
chek per errori<br />
Entra I dati nelil database<br />
cronaca il risultato</p>
<p>Se no<br />
Mostra la Form<br />
finito</em></p>
<p>Costruire la query, cosa che ancora non avevamo fatto, è sempre un po&#8217; difficile ma richiede solo attenzione. Le prime volte è sempre meglio stamparla così si vede cosa non va. Più che altro stai attento alla sintassi mettendola in ordine come ho fatto io, o ancora di più se vuoi. <span lang="EN-GB">Ordine is GOOD!</p>
<p></span>Per esempio guarda come spesso si programma in ASP:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
strsql = &#8220;INSERT INTO tbl_news ( titolo, sottotitolo, _<br />
testo, data_vivo, data_morto) Values (&#8216;&#8221;_<br />
&amp; titolo&amp; &#8220;&#8216;,&#8217;&#8221; &amp; sottotitolo &amp; &#8220;&#8216; , &#8216; &#8221;   &amp; testo &amp;_<br />
&#8220;&#8216;,&#8217;&#8221; &amp;vivo&amp; &#8220;&#8216;,&#8217;&#8221; &amp; morto &amp;   &#8220;&#8216;)&#8221;<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Come fai a vedere errori di sintassi qui? e questa è una query da bambini. Ancora meglio di quello che ho fatto io sarebbe:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
strsql = &#8220;INSERT INTO tbl_news&#8221;<br />
strsql = strsql &amp; &#8220;(&#8220;<br />
strsql = strsql &amp; &#8220;titolo,&#8221;<br />
strsql = strsql &amp; &#8220;sottotitolo,&#8221;<br />
strsql = strsql &amp; &#8220;testo,&#8221;<br />
strsql = strsql &amp; &#8220;data_vivo, &#8220;<br />
strsql = strsql &amp; &#8220;data_morto)&#8221;<br />
strsql = strsql &amp; &#8221; Values(&#8216;&#8221;<br />
strsql = strsql &amp; titolo<br />
strsql = strsql &amp; &#8220;&#8216;,&#8217;&#8221;<br />
strsql = strsql &amp; sottotitolo<br />
strsql = strsql &amp; &#8220;&#8216;,&#8217;&#8221;<br />
strsql = strsql &amp; testo<br />
strsql = strsql &amp; &#8220;&#8216;,&#8217;&#8221;<br />
strsql = strsql &amp; vivo<br />
strsql = strsql &amp; &#8220;&#8216;,&#8217;&#8221;<br />
strsql = strsql &amp; morto<br />
strsql = strsql &amp; &#8220;&#8216;)&#8221;<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Vedi come è più facile trovare errori con un buon layout? Un altro cambiamento è avvenuto nella nostra <em>fai_query()</em>, la funzione che esegue la query. Quando si fanno delle query al database c&#8217;è sempre la possibilità che qualche cosa non funzioni e così è indispensabile controllare ogni errore. Guarda come abbiamo modificato il code di <em>fai_query()</em>:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB"><br />
&lt;%<br />
On Error Resume Next</p>
<p>objConn.Execute strSQL</p>
<p>if err = 0 then<br />
objConn.Close<br />
set objConn = Nothing<br />
message = &#8220;ok&#8221;<br />
else<br />
message = &#8220;not ok&#8221;<br />
end if<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p>la linea <strong>On Error Resume Next</strong> forza il programma a continuare in caso di errore. Se non c&#8217;è un errore, l&#8217;oggetto <strong>Error</strong> rimane a zero e noi implementiamo un flag che dice &#8220;ok&#8221; ma se un errore è occorso allora mandiamo un messaggio al nostro utente per dirgli che qualcosa non ha funzionato. La nuova procedura <em>quale_risultato(message)</em> manda il messaggio che vogliamo noi invece di uno che vuole Microsoft.<br />
Allora tutto quello che rimane è formattare l&#8217;Output ma lo faremo nella prossima lezione.</p>
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal"><a href="#Indice"><span style="font-size:10.5pt;font-family:Tahoma;">Torna a indice</span></a></p>
<p><span style="font-size:12pt;font-family:&quot;"><br /> </span></p>
<p class="MsoNormal"><a name="quattordicesimo"><strong><span style="font-size:15pt;font-family:Tahoma;color:black;">Come presentare l&#8217;Output</span></strong></a><span style="font-size:15pt;font-family:Tahoma;color:black;"></span></p>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:Tahoma;color:black;"><!--[if gte vml 1]&gt;  &lt;![endif]--><!--[if !vml]--><img src="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" border="0" alt="" vspace="2" width="800" height="1" /><!--[endif]--><br />
</span>Questa lezione sarà di riposo. Vogliamo solo finire la nostra applicazione per le news e sappiamo già cosa dobbiamo fare. Vediamo allora come formattare l&#8217;output:</p>
<p><em>Output<br />
Prendi il recordset dalil database<br />
Format e mostrala al cliente</em></p>
<p>Se modifichiamo il nostro file <em>check_connection.asp</em> esso dovrebbe già fare tutto. Cambiamo la query e basta.</p>
<p>Ma adesso mi accorgo che questa lezione non è un riposo poiché abbiamo a che fare con delle date ;o(<br />
Beh, tanto vale che risolviamo il problema.</p>
<p>Se vogliamo che il nostro programmino di News sia utile bisogna che facciamo vedere solo le News che si riferiscono alla data corrente quindi la nostra query deve tener conto forzatamente della data e dovrebbe diventare</p>
<p><em>select * from tbl_news where data_morto &lt; oggi<br />
</em><br />
In genere il formato della data dipende da come il server è stato configurato e non sempre noi abbiamo controllo del server. Diciamo che il tuo sito è su un server a Bologna e tutto funziona perfettamente. Domani invece lo muovi su un server a Seattle (USA) perché ti costa la metà, funzionerà tutto bene anche lì?</p>
<p>Io credo di no. Il server americano di sicuro salva la data come mese/giorno/anno mentre a Bologna tu adoperavi giorno/mese/anno. Se, per esempio, si vuole inserire un comando del tipo:</p>
<p><em>se<br />
02/03/01 è diverso da 03/02/01<br />
allora cambia la data</em></p>
<p>a Bologna sarà vero ma a Seattle non lo sarà più anche se la data è la stessa. Come facciamo a risolvere questi problemi?</p>
<p>Non è poi così difficile è solo una seccatura. Prova un po&#8217; questo:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
Option Explicit<br />
dim oggi,x</p>
<p>oggi = date()<br />
response.write &#8220;oggi = &#8221; &amp; oggi &amp; &#8220;&lt;br&gt;&#8221;<br />
x = split(oggi, &#8220;/&#8221;)</p>
<p>response.write &#8220;x(0) = &#8221; &amp; x(0) &amp; &#8220;&lt;br&gt;&#8221;<br />
response.write &#8220;x(1) = &#8221; &amp; x(1) &amp; &#8220;&lt;br&gt;&#8221;<br />
response.write &#8220;x(2) = &#8221; &amp; x(2) &amp; &#8220;&lt;br&gt;&#8221;<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">
Con la funzione Split riusciamo a separare i tre campi della data. Una volta che li abbiamo così, possiamo rimetterli a posto come vogliamo noi</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
data_Bologna = x(0) &amp; &#8220;/&#8221; &amp; x(1) &amp; &#8220;/&#8221; &amp;   x(2)<br />
data_Seattle = x(1) &amp; &#8220;/&#8221; &amp; x(0) &amp; &#8220;/&#8221; &amp;   x(2)<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">
Allora adesso che abbiamo risolto il problema della data, torniamo al nostro output per il programma News.</p>
<p>Prendi il vecchio <em>check_connection.asp</em> è chiamalo <em>news_out.asp</em>. L&#8217;unica cosa da fare qui è cambiare:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB">Sub   Guarda_Recordset(objRs)</span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">così che si presenta un po&#8217; meglio.</p>
<p>Prima però mettiamo un altro campo nel database così che possiamo mandare i nostri clienti direttamente ad un&#8217;altra pagina dove la news viene mostrata per intero o ad un altro sito dove ci sono informazioni più approfondite.</p>
<p>Naturalmente bisogna anche cambiare l&#8217;input così che possiamo inserire questo URL nel database.<br />
Ora la nostra <strong>tbl_news</strong> ha un campo chiamato url e questi comandi vanno nel nostro <em>news.inc</em>:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB">&lt;tr&gt;<br />
&lt;td nowrap&gt;URL&lt;/td&gt;<br />
&lt;td valign=&#8221;top&#8221;&gt;&lt;INPUT NAME=&#8221;url&#8221;   TYPE=&#8221;TEXT&#8221; size=&#8221;24&#8243;   MAXLENGTH=&#8221;100&#8243;&gt;&lt;/td&gt;<br />
&lt;/tr&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Allora adesso dobbiamo fare in modo che la pagina mostri il titolo e il sottotitolo di tutte le news che abbiamo con la data_morto &gt; (maggiore) di oggi. Poi quando il cliente clicca sul titolo il testo deve apparire per intero.</p>
<p>Adesso la mia procedura è diventata:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
Sub Guarda_Recordset(objRs)<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: mostra un format recordset dalla mia database<br />
&#8216;Date: 28 March 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
dim titolo, sottotitolo, test, url</p>
<p>&#8216;vendemmia la form<br />
titolo = objRs(&#8220;titolo&#8221;)<br />
sottotitolo = objRs(&#8220;sottotitolo&#8221;)<br />
url = objRs(&#8220;url&#8221;)</p>
<p>Do while NOT objRs.EOF<br />
&#8216;tanto per cambiare possiamo usare HTML puro<br />
%&gt;</p>
<p>&lt;table width=&#8221;80%&#8221; border=&#8221;0&#8243;   cellpadding=&#8221;4&#8243; cellspacing=&#8221;2&#8243;&gt;<br />
&lt;tr&gt;<br />
&lt;td rowspan=&#8221;2&#8243; width=&#8221;5%&#8221; valign=&#8221;top&#8221;&gt;&lt;img   src=&#8221;news.gif&#8221; width=&#8221;32&#8243; height=&#8221;36&#8243;   alt=&#8221;" border=&#8221;0&#8243;&gt;&lt;/td&gt;<br />
&lt;td bgcolor=&#8221;#8b4513&#8243; widrh=&#8221;100%&#8221;&gt;&lt;a   href=&#8221;&lt;%=objRs(&#8220;url&#8221;)%&gt;&#8221;&gt;&lt;font   size=&#8221;+2&#8243;   color=&#8221;white&#8221;&gt;&lt;%=titolo%&gt;&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td bgcolor=&#8221;#b8860b&#8221;&gt;&lt;font size=&#8221;+1&#8243;   color=&#8221;white&#8221;&gt;&lt;%=sottotitolo%&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;</p>
<p>&lt;%<br />
objRs.Movenext<br />
Loop</p>
<p>End sub<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Come vedi puoi formattare l&#8217;output come vuoi e come hai sempre fatto.</p>
<p>L&#8217;unica linea che non abbiamo commentato è quella dell&#8217;URL</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;a   href=&#8221;&lt;%=objRs(&#8220;url&#8221;)%&gt;&#8221;&gt;&lt;%=titolo%&gt;&lt;/a&gt;</span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Si potrebbe anche fare molto meglio passando l&#8217;id della news nella <strong>Request.Querystring</strong> così:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB">&lt;a   href=&#8221;&lt;%=objRs(&#8220;url&#8221;)%&gt;?id=&lt;%=objRs(&#8220;id&#8221;)%&gt;&lt;%=titolo%&gt;&lt;/a&gt;</span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">se questa sintassi ti sembra un po&#8217; confusa prova invece:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">response.write &#8220;&lt;a   href=&#8217;&#8221; &amp; url &amp; &#8220;?id=&#8221; &amp; id &#8220;&#8216;&gt;&#8221;   &amp; titolo &amp; &#8220;&lt;/a&gt;&#8221;</span></p>
</td>
</tr>
</tbody>
</table>
<p>tutte e due danno lo stesso risultato.<br />
Ormai è tutto semplice no?</p>
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal"><a href="#Indice"><span style="font-size:10.5pt;font-family:Tahoma;">Torna a indice</span></a></p>
<p><span style="font-size:12pt;font-family:&quot;"><br /> </span></p>
<p class="MsoNormal"><a name="quindicesimo"><strong><span style="font-size:15pt;font-family:Tahoma;color:black;">Come lavorare dal letto</span></strong></a><span style="font-size:15pt;font-family:Tahoma;color:black;"></span></p>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:Tahoma;color:black;"><!--[if gte vml 1]&gt;  &lt;![endif]--><!--[if !vml]--><img src="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" border="0" alt="" vspace="2" width="800" height="1" /><!--[endif]--><br />
</span>Adesso che abbiamo imparato a usare un database dal Web e sappiamo costruire pagine che ci danno accesso a tutti i nostri dati non dobbiamo più essere in ufficio per lavorare. Volendo, possiamo rimanere a letto e con il portatile continuare a mantenere il sito in tutta tranquillità.</p>
<p>Però&#8230; prima bisogna creare un&#8217;area privata sul nostro sito altrimenti chiunque sapesse l&#8217;URL potrebbe modificare il nostro database attraverso le nostre pagine. Un grosso NO, NO. Il database è il nostro tesoro. Prima di rimanere a letto sarà meglio che creiamo una Login con una password in modo da essere al sicuro proprio come Ali Baba dentro la sua caverna.</p>
<p>Cosa si fa? Di sicuro hai già una buona idea su come procedere. Io di solito faccio così:<br />
Nel <em>global.asa</em> metto:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB">&lt;%<br />
Sub Session_OnStart<br />
Session(&#8220;login&#8221;) = False<br />
End Sub<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Ok, così quando vieni nella pagine la variabile mi dice che tu non sei autorizzato. Quindi in ognuna delle mie pagine che voglio mantenere private, in cima, prima che succeda niente, controllo per vedere se il mio cliente ha l&#8217;autorizzazione.</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
If Session(&#8220;login&#8221;) then<br />
&#8216;fai tutto quello che la tua pagina deve fare<br />
else<br />
&#8216;Mi dispiace ma qui non ci puoi entrare<br />
end if<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p>Siccome tutte le mie pagine adoperano due include, una per la testa della pagina e una per la coda, di solito questa parte del codice risiede lì.</p>
<p>Allora con questo sistema non possono entrare ma sfortunatamente non possiamo entrare neanche noi ;o)<br />
Quindi creiamo subito una tabella nel nostro database chiamandola <strong>tbl_login</strong>. Qui ci mettiamo:</p>
<div>
<table class="MsoNormalTable" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr style="height:15.75pt;">
<td style="height:15.75pt;padding:3pt;" colspan="2">
<p style="text-align:center;" align="center"><strong>tbl_login</strong></p>
</td>
</tr>
<tr style="height:14.25pt;">
<td style="height:14.25pt;padding:3pt;">
<p class="MsoNormal"><strong><em><span style="font-size:10.5pt;font-family:Tahoma;color:black;">Nome campo</span></em></strong><span style="font-size:10.5pt;font-family:Tahoma;color:black;"></span></p>
</td>
<td style="height:14.25pt;padding:3pt;">
<p class="MsoNormal"><strong><em><span style="font-size:10.5pt;font-family:Tahoma;color:black;">Tipo campo</span></em></strong><span style="font-size:10.5pt;font-family:Tahoma;color:black;"></span></p>
</td>
</tr>
<tr style="height:15.75pt;">
<td style="height:15.75pt;padding:3pt;">
<p class="MsoNormal"><em><span style="font-size:10.5pt;font-family:Tahoma;color:black;">Id</span></em><span style="font-size:10.5pt;font-family:Tahoma;color:black;"></span></p>
</td>
<td style="height:15.75pt;padding:3pt;">
<p class="MsoNormal"><em><span style="font-size:10.5pt;font-family:Tahoma;color:black;" lang="EN-GB">primary key</span></em><span style="font-size:10.5pt;font-family:Tahoma;color:black;" lang="EN-GB"></span></p>
</td>
</tr>
<tr style="height:15.75pt;">
<td style="height:15.75pt;padding:3pt;">
<p class="MsoNormal"><em><span style="font-size:10.5pt;font-family:Tahoma;color:black;" lang="EN-GB">Nome</span></em><span style="font-size:10.5pt;font-family:Tahoma;color:black;" lang="EN-GB"></span></p>
</td>
<td style="height:15.75pt;padding:3pt;">
<p class="MsoNormal"><em><span style="font-size:10.5pt;font-family:Tahoma;color:black;" lang="EN-GB">Text</span></em><span style="font-size:10.5pt;font-family:Tahoma;color:black;" lang="EN-GB"></span></p>
</td>
</tr>
<tr style="height:15.75pt;">
<td style="height:15.75pt;padding:3pt;">
<p class="MsoNormal"><em><span style="font-size:10.5pt;font-family:Tahoma;color:black;" lang="EN-GB">Cognome</span></em><span style="font-size:10.5pt;font-family:Tahoma;color:black;" lang="EN-GB"></span></p>
</td>
<td style="height:15.75pt;padding:3pt;">
<p class="MsoNormal"><em><span style="font-size:10.5pt;font-family:Tahoma;color:black;" lang="EN-GB">Text</span></em><span style="font-size:10.5pt;font-family:Tahoma;color:black;" lang="EN-GB"></span></p>
</td>
</tr>
<tr style="height:15.75pt;">
<td style="height:15.75pt;padding:3pt;">
<p class="MsoNormal"><em><span style="font-size:10.5pt;font-family:Tahoma;color:black;" lang="EN-GB">Login</span></em><span style="font-size:10.5pt;font-family:Tahoma;color:black;" lang="EN-GB"></span></p>
</td>
<td style="height:15.75pt;padding:3pt;">
<p class="MsoNormal"><em><span style="font-size:10.5pt;font-family:Tahoma;color:black;" lang="EN-GB">Text</span></em><span style="font-size:10.5pt;font-family:Tahoma;color:black;" lang="EN-GB"></span></p>
</td>
</tr>
<tr style="height:15.75pt;">
<td style="height:15.75pt;padding:3pt;">
<p class="MsoNormal"><em><span style="font-size:10.5pt;font-family:Tahoma;color:black;" lang="EN-GB">Password</span></em><span style="font-size:10.5pt;font-family:Tahoma;color:black;" lang="EN-GB"></span></p>
</td>
<td style="height:15.75pt;padding:3pt;">
<p class="MsoNormal"><em><span style="font-size:10.5pt;font-family:Tahoma;color:black;" lang="EN-GB">Text</span></em><span style="font-size:10.5pt;font-family:Tahoma;color:black;" lang="EN-GB"></span></p>
</td>
</tr>
</tbody>
</table>
</div>
<p>e adesso scriviamo il programma <em>Login.asp</em>.</p>
<p>Da ora in poi non strutturerò più il codice in quanto i programmi sono un po&#8217; troppo corti per farlo. Lo puoi far tu se vuoi, è una buona abitudine da prendere.</p>
<p>Siccome abbiamo già messo la nostra variabile Login nella <em>global.asa</em>, quando entriamo nel sito per la prima volta è già inizializzata come:</p>
<p style="text-align:center;" align="center"><em>login = false</em></p>
<p style="margin-bottom:12pt;">La logica, come sempre, è</p>
<p><em>Se clickato<br />
fai quello che devi fare<br />
se no<br />
mostra la form</em></p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;"><br />
&lt;%<br />
Option Explicit<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: Login<br />
&#8216;Date: 07 April 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
Response.Buffer = True</p>
<p>Dim objConn, strConn, objRs, strsql<br />
Dim submitted, login, password<br />
%&gt;</p>
<p>&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;Login&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body bgcolor=powderblue&gt;</p>
<p>&lt;%<br />
submitted = Request.Querystring(&#8220;submitted&#8221;)</p>
<p>If Submitted then</p>
<p>strConn = Application(&#8220;dbconn&#8221;)</p>
<p>login = Request.Form(&#8220;login&#8221;)<br />
password = Request.Form(&#8220;password&#8221;)</p>
<p>strsql = &#8220;Select id, login, password FROM tbl_login &#8220;<br />
strsql = strsql &amp; &#8220;WHERE login =&#8217;&#8221; &amp; login &amp; &#8220;&#8216;   AND password = &#8216;&#8221; &amp; password &amp; &#8220;&#8216;&#8221;</p>
<p>Set objConn = Server.CreateObject(&#8220;ADODB.Connection&#8221;)<br />
objConn.Open strConn<br />
set objRs = objConn.Execute(strsql)</p>
<p>If objRs.EOF then<br />
&#8216;Non è valido, mandalo indietro<br />
response.redirect &#8220;login.asp&#8221;<br />
Else<br />
&#8216;è valido, fallo entrare<br />
session(&#8220;login&#8221;) = True<br />
objRs.close<br />
Set objRs = Nothing<br />
response.redirect &#8220;ufficio.asp&#8221;<br />
end if<br />
else<br />
&#8216;mostra la form<br />
%&gt;</p>
<p>&lt;div align=&#8221;center&#8221;&gt;<br />
&lt;form action=&#8221;login.asp?submitted=true&#8221;   method=&#8221;post&#8221;&gt;<br />
&lt;table align=&#8221;center&#8221; cellspacing=&#8221;0&#8243;   cellpadding=&#8221;5&#8243; border=&#8221;1&#8243;   bordercolor=&#8221;midnightblue&#8221; bgcolor=&#8221;ivory&#8221;   width=&#8221;400&#8243;&gt;<br />
&lt;tr&gt;<br />
&lt;th&gt;&lt;font color=firebrick size=+2&gt;&lt;b&gt;Solo chi voglio   io!&lt;/b&gt;&lt;/font&gt;&lt;/th&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td align=&#8221;center&#8221; bgcolor=&#8221;azure&#8221;&gt;<br />
&lt;%<br />
if session(&#8220;login&#8221;) and Submitted then<br />
response.redirect &#8220;login.asp&#8221;<br />
else<br />
response.write &#8220;&lt;br&gt;&lt;br&gt; Per favore, inserisci   login/password. &lt;br&gt;&lt;br&gt;&#8221;<br />
end if<br />
%&gt;<br />
&lt;table&gt;<br />
&lt;tr&gt;<br />
&lt;td class=event&gt;Login:&lt;/td&gt;<br />
&lt;td&gt;&lt;input type=&#8221;text&#8221; name=&#8221;Login&#8221;   size=&#8221;10&#8243; maxlength=&#8221;30&#8243;&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td class=event&gt;Password:&lt;/td&gt;<br />
&lt;td&gt;&lt;input type=&#8221;password&#8221; name=&#8221;Password&#8221;   size=&#8221;10&#8243; maxlength=&#8221;12&#8243;&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;br&gt;<br />
&lt;input type=&#8221;submit&#8221; value=&#8221;Submit&#8221;&gt;<br />
&lt;input type=&#8221;reset&#8221; value=&#8221;Cancel&#8221;   Onclick=&#8221;Javascript:history.go(-1)&#8221;&gt;<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;/form&gt;<br />
&lt;/div&gt;</p>
<p>&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p>&lt;%<br />
end if</p>
<p>Response.end<br />
Response.Clear<br />
%&gt; </span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">I dati della form sono entrati in una query al database e se il recordset è vuoto vuol dire che non abbiamo trovato una valida combinazione di login/password quindi rimandiamo al login.asp per riprovare.</p>
<p>Qui potresti contare fino a 3 per esempio e poi far scomparire il login.<br />
Se il recordset contiene dati, vuol dire che la combinazione esiste e quindi:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;% Session(&#8220;login&#8221;) =   true %&gt;</span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">
che ci permette di entrare dentro al nostro sito in un area che controlliamo solo noi.</p>
<p>Se tu volessi adoperare questa tecnica per fare entrare i tuoi clienti in un area privata sarebbe comodo mantenere informazioni sul tuo utente. Informazioni che ti possono servire per comunicare con esso durante il tempo che spende con te nel tuo sito. Siccome abbiamo guardato al suo record tanto vale che teniamo le informazioni. Cose come:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
Session(&#8220;id&#8221;) = objRs(&#8220;id&#8221;)<br />
Session(&#8220;nome&#8221;) = objRs(&#8220;nome&#8221;)<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal"><a href="#Indice"><span style="font-size:10.5pt;font-family:Tahoma;">Torna a indice</span></a></p>
<p><span style="font-size:12pt;font-family:&quot;"><br /> </span></p>
<p class="MsoNormal"><a name="sedicesimo"><strong><span style="font-size:15pt;font-family:Tahoma;color:black;">Il pannello di controllo</span></strong></a><span style="font-size:15pt;font-family:Tahoma;color:black;"></span></p>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:Tahoma;color:black;"><!--[if gte vml 1]&gt;  &lt;![endif]--><!--[if !vml]--><img src="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" border="0" alt="" vspace="2" width="800" height="1" /><!--[endif]--><br />
</span>La pagina <em>Login.asp</em> che abbiamo appena costruito è un po&#8217; come la chiave dell&#8217;ufficio. Virtuale, naturalmente, e raggiungibile direttamente dal letto. Il nostro ufficio però è piuttosto vuoto e sarà meglio che cominciamo a riempirlo con le cose di cui abbiamo bisogno per lavorare.</p>
<p>Il file a cui ci manda il <em>login.asp</em> si chiama <em>ufficio.asp</em> per una ragione.</p>
<p>Questo qui sotto, per esempio, è uno dei miei. Di solito ne costruisco uno per ogni sito ma adesso che ci penso dovrei costruirmene uno solo che funziona per tutti i siti. Ah!, si impara sempre in questo lavoro&#8230;</p>
<p><span lang="EN-GB">eCalcx Home<br />
Latest Stats<br />
Daily<br />
Weekly<br />
Monthly<br />
Menu Administration<br />
Add new Tool<br />
Change Tool Status<br />
View/Edit /Delete Tool<br />
Add admin<br />
Add New Ad<br />
Maintain Ad Campaign<br />
View Ad Reports<br />
Mailing<br />
Maintain Maling list<br />
Send email to list<br />
Add subscriber<br />
Subscribe/Unsubscribe from list<br />
Feedback<br />
CRM tool<br />
Distribute<br />
Analysis<br />
Archive<br />
Manage remote staff<br />
Links<br />
Edit/Delete links<br />
Approve links<br />
Workshop<br />
Manage remote developers</p>
<p>Ognuna di queste entrate è un piccolo programma che mi permette di lavorare a letto. </span>Beh, non proprio dal letto ma certo che non ho bisogno di essere in ufficio per mantenere questo sito.</p>
<p>Cominciamo allora a costruire il nostro <em>ufficio.asp</em>.<br />
Il file è una semplice tabella dove possiamo continuare a metterci entrate ogni volta che costruiamo qualcosa di nuovo. Al momento ho paura che le news sono l&#8217;unica cosa che possiamo fare, ma di sicuro tu stai già pensando a un mucchio di altre cose.</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
If session(&#8220;login&#8221;) then<br />
%&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;Ufficio&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;div align=&#8221;center&#8221;&gt;<br />
&lt;table width=&#8221;60%&#8221; border=&#8221;0&#8243;   cellspacing=&#8221;4&#8243; cellpadding=&#8221;4&#8243;   align=&#8221;center&#8221;&gt;<br />
&lt;tr&gt;<br />
&lt;th colspan=2&gt;<br />
&lt;font size=+2 color=&#8221;firebrick&#8221;&gt;Ufficio Virtuale o   Letto?&lt;/font&gt;<br />
&lt;hr size=&#8221;1&#8243; color=&#8221;firebrick&#8221; width=&#8221;80%&#8221;   align=&#8221;center&#8221;&gt;<br />
&lt;/th&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td width=&#8221;40&#8243;&gt;&lt;img src=&#8221;news1.gif&#8221;   width=&#8221;35&#8243; height=&#8221;35&#8243; alt=&#8221;"   border=&#8221;0&#8243;&gt;&lt;/td&gt;<br />
&lt;td width=&#8221;100%&#8221;&gt;<br />
&lt;a href=&#8221;news.asp&#8221;&gt;&lt;font   color=&#8221;teal&#8221;&gt;Inserisci una nuova News&lt;/font&gt;&lt;/a&gt;<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;/div&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
&lt;%<br />
else<br />
response.write &#8220;Mi dispiace ma questo è il mio ufficio e tu non hai la   chiave&#8230;&#8221;<br />
end if<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p>Come vedi tutto quello che facciamo qui è controllare che la chiave ci sia altrimenti mandiamo un messaggio e rifiutiamo l&#8217;ingresso. Prova a incollare http://dovehaimessoquesta/ufficio.asp nell&#8217;area di indirizzo del browser e vedrai che non ti fa entrare.<br />
Ora che hai aperto il tuo ufficio virtuale cominciamo a sistemarlo per bene.</p>
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal"><a href="#Indice"><span style="font-size:10.5pt;font-family:Tahoma;">Torna a indice</span></a></p>
<p><span style="font-size:12pt;font-family:&quot;"><br /> </span></p>
<p class="MsoNormal"><a name="diciassettesimo"><strong><span style="font-size:15pt;font-family:Tahoma;color:black;">Come mantenere i nostri dati</span></strong></a><span style="font-size:15pt;font-family:Tahoma;color:black;"></span></p>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:Tahoma;color:black;"><!--[if gte vml 1]&gt;  &lt;![endif]--><!--[if !vml]--><img src="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" border="0" alt="" vspace="2" width="800" height="1" /><!--[endif]--><br />
</span>Torniamo al programma <em>News.asp</em>. Ok, ci permette di inserire una nuova notizia ma cos&#8217;altro?<br />
Bisognerebbe anche averne uno che ci permette di modificarla. Diciamo che siamo a letto e guardando il sito vediamo che abbiamo fatto un errore in un News, come lo accomodiamo?<br />
Vediamo di modificare questa News e farla un po&#8217; più utile. Bisognerebbe essere in grado di</p>
<p><em>aggiungere una nuova &#8211; lo facciamo già<br />
cambiare una esistente<br />
cancellare una esistente</em></p>
<p>Tutto qui? Tu forse ne sai più di me adesso ma io, al momento, non riesco a pensare ad altro.</p>
<p>Facciamolo in una maniera semplice. Creiamo un&#8217;altra entrata nel nostro ufficio:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;a   href=&#8221;mantieni_news.asp&#8221;&gt;&lt;font   color=&#8221;teal&#8221;&gt;Mantieni le News&lt;/font&gt;&lt;/a&gt;</span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">e una fila chiamata <em>mantieni_news.asp</em>:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
Option Explicit<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: mostra le news per cambiarle<br />
&#8216;Date: 7 Aprile 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
%&gt;<br />
&lt;!&#8211;#include file=&#8221;adovbs.inc&#8221;&#8211;&gt;<br />
&lt;%<br />
Dim objConn, strConn, objRs, strsql</p>
<p>&#8216;abbiamo le chiavi?<br />
If Session(&#8220;login&#8221;) then</p>
<p>strConn = Application(&#8220;dbconn&#8221;)<br />
strsql = &#8220;Select * from tbl_news order by data_morto Asc&#8221;</p>
<p>Set objConn = Server.CreateObject(&#8220;ADODB.Connection&#8221;)<br />
objConn.Open strConn<br />
Set objRs = Server.CreateObject(&#8220;ADODB.Recordset&#8221;)</p>
<p>set objRs = objConn.Execute(strsql)<br />
&#8216;controla per errori da solo</p>
<p>response.write &#8220;&lt;div align=center&gt;&#8221;<br />
response.write &#8220;&lt;table border=&#8217;1&#8242; width=&#8217;80%&#8217; cellpadding=&#8217;4&#8242;   cellspacing=&#8217;4&#8242; bgcolor=&#8217;bisquè&gt;&#8221;<br />
response.write &#8220;&lt;tr&gt;&lt;th colspan=&#8217;4&#8242; align=&#8217;center&#8217;&gt;&lt;font   size=&#8217;+2&#8242; color=&#8217;firebrick&#8217;&gt;Mantieni le   News&lt;/font&gt;&lt;/th&lt;/tr&gt;&#8221;<br />
&#8216;ricordati di passare l&#8217;id del record nella querystring<br />
Do while Not objRs.EOF<br />
%&gt;<br />
&lt;tr&gt;<br />
&lt;td width=&#8221;5%&#8221;&gt;&lt;font color=&#8217;teal&#8217;&gt;&lt;%=   objRs(&#8220;id&#8221;) %&gt;&lt;/font&gt;&lt;/td&gt;<br />
&lt;td width=&#8221;75%&#8221;&gt;&lt;font color=&#8217;teal&#8217;&gt;&lt;%=   objRs(&#8220;titolo&#8221;) %&gt;&lt;/font&gt;&lt;/td&gt;<br />
&lt;td width=&#8221;10%&#8221;&gt;&lt;a href=&#8221;cambia_news.asp?id=&lt;%=   objRs(&#8220;id&#8221;) %&gt;&#8221;&gt;cambia&lt;/a&gt;&lt;/td&gt;<br />
&lt;td width=&#8221;10%&#8221;&gt;&lt;a href=&#8221;cancella_news.asp?id=&lt;%=   objRs(&#8220;id&#8221;) %&gt;&#8221;&gt;cancella&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;%<br />
objRs.MoveNext<br />
Loop<br />
Response.write &#8220;&lt;/table&gt;&lt;/div&gt;&#8221;<br />
else<br />
&#8216;quando hai tempo, metti queste linee in un .inc e formattale con un bel   messaggio<br />
&#8216;poi la puoi mettere dappertutto nell&#8217;ufficio<br />
response.write &#8220;Mi dispiace ma questo è il mio ufficio e tu non hai la chiave&#8230;&#8221;<br />
end if<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Con questa file vediamo tutte le nostre news, un titolo alla volta. Poi ad ogni titolo mettiamo un option per cambiare o cancellare quella specifica entrata.<br />
Quando clicchiamo su &#8220;cambia&#8221; chiamiamo un&#8217;altra fila <em>cambia_news.asp</em> che ci permette di farlo.<br />
Come? così:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
Option Explicit<br />
Dim strConn, objConn, objRs, strsql, submitted<br />
Dim id, titolo, sottotitolo, testo, vivo, morto,url</p>
<p>&#8216;abbiamo le chiavi per l&#8217;ufficio?<br />
</span><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB">If   Session(&#8220;login&#8221;) then</p>
<p>strConn = Application(&#8220;dbconn&#8221;)<br />
submitted = Request.QueryString(&#8220;submitted&#8221;)</p>
<p>&#8217;si, ma è clickata la Form?<br />
If submitted then<br />
&#8217;si, è clickata quindi cambiamo i dati</p>
<p>id = Request.QueryString(&#8220;id&#8221;)</p>
<p>&#8216;raccogliamo I dati dall nostra form<br />
titolo = Request.Form(&#8220;titolo&#8221;)<br />
sottotitolo = Request.Form(&#8220;sottotitolo&#8221;)<br />
testo = Request.Form(&#8220;testo&#8221;)<br />
vivo = Request.Form(&#8220;vivo&#8221;)<br />
morto = Request.Form(&#8220;morto&#8221;)<br />
url = Request.Form(&#8220;url&#8221;)</p>
<p>&#8216;costruiamo la query<br />
strsql = &#8220;Update tbl_news &#8220;<br />
strsql = strsql &amp; &#8221; SET (&#8220;<br />
strsql = strsql &amp; &#8220;titolo = &#8216;&#8221; &amp; titolo &amp;   &#8220;&#8216;,&#8221;<br />
strsql = strsql &amp; &#8220;sottotitolo = &#8216;&#8221; &amp; sottotitolo &amp;   &#8220;&#8216;,&#8221;<br />
strsql = strsql &amp; &#8220;testo = &#8216;&#8221; &amp; testo &amp; &#8220;&#8216;,&#8221;<br />
strsql = strsql &amp; &#8220;data_vivo = #&#8221; &amp; vivo &amp;   &#8220;#,&#8221;<br />
strsql = strsql &amp; &#8220;data_morto = #&#8221; &amp; morto &amp;   &#8220;#,&#8221;<br />
strsql = strsql &amp; &#8220;url = &#8216;&#8221; &amp; url &amp; &#8220;&#8216;) &#8220;<br />
strsql = strsql &amp; &#8220;Where id = &#8221; &amp; id</p>
<p>Set objConn = Server.CreateObject(&#8220;ADODB.Connection&#8221;)<br />
objConn.Open strConn<br />
Set objRs = Server.CreateObject(&#8220;ADODB.Recordset&#8221;)</p>
<p>set objRs = objConn.Execute(strsql)<br />
&#8216;guarda per errori da solo, come abbiamo già fatto</p>
<p>objConn.Close<br />
Set objConn = Nothing</p>
<p>else<br />
&#8216;ancora non abbiamo clickato niente e vogliamo solo vedere<br />
id = Request.QueryString(&#8220;id&#8221;)</p>
<p>strsql = &#8220;Select * from tbl_news where id = &#8221; &amp; id</p>
<p>Set objConn = Server.CreateObject(&#8220;ADODB.Connection&#8221;)<br />
objConn.Open strConn<br />
Set objRs = Serve</span><span style="font-size:10.5pt;font-family:&quot;color:#064987;">r.CreateObject(&#8220;ADODB.Recordset&#8221;)</p>
<p>set objRs = objConn.Execute(strsql)</p>
<p>&#8216;vendemmia il recorset<br />
titolo = objRs(&#8220;titolo&#8221;)<br />
sottotitolo = objRs(&#8220;sottotitolo&#8221;)<br />
testo = objRs(&#8220;testo&#8221;)<br />
morto = objRs(&#8220;data_morto&#8221;)<br />
vivo = objRs(&#8220;data_vivo&#8221;)<br />
url = objRs(&#8220;url&#8221;)<br />
%&gt;<br />
&#8216;mostra la forma con I valori che sono nelil database<br />
&lt;FORM ACTION=&#8221;cambia_news.asp?submitted=true&amp;id=&lt;%= id   %&gt;&#8221; METHOD=&#8221;post&#8221;&gt;<br />
&lt;div align=&#8221;center&#8221;&gt;<br />
&lt;table border=&#8221;0&#8243; width=&#8221;95%&#8221; celpadding=&#8221;2&#8243;   cellspacing=&#8221;2&#8243;&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;&lt;h1&gt;Cambia quello che vuoi&#8230;&lt;hr align=&#8221;LEFT&#8221;   size=&#8221;1&#8243; width=&#8221;100%&#8221;   color=&#8221;navy&#8221;&gt;&lt;/h1&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;td align=&#8221;center&#8221;&gt;&lt;br&gt;&lt;br&gt;<br />
&lt;table width=&#8221;80%&#8221; border=&#8221;0&#8243; celpadding=&#8221;2&#8243;   cellspacing=&#8221;2&#8243;&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;Titolo&lt;/td&gt;<br />
&lt;td&gt;&lt;INPUT NAME=&#8221;titolo&#8221; TYPE=&#8221;TEXT&#8221;   Value=&#8221;&lt;%= titolo %&gt;&#8221; size=&#8221;80&#8243;   MAXLENGTH=&#8221;80&#8243;&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;Sottotitolo&lt;/td&gt;<br />
&lt;td valign=&#8221;top&#8221;&gt;&lt;TEXTAREA NAME=&#8221;sottotitolo&#8221;   ROWS=&#8221;3&#8243; COLS=&#8221;60&#8243;&gt;&lt;%= sottotitolo   %&gt;&lt;/TEXTAREA&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;tr&gt;<br />
&lt;td valign=&#8221;top&#8221;&gt;News&lt;/td&gt;<br />
&lt;td valign=&#8221;top&#8221;&gt;&lt;TEXTAREA NAME=&#8221;testo&#8221;   ROWS=&#8221;10&#8243; COLS=&#8221;60&#8243;&gt;&lt;%= testo %&gt;&lt;/TEXTAREA&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td nowrap&gt;Data di entrata&lt;/td&gt;<br />
&lt;td valign=&#8221;top&#8221;&gt;&lt;INPUT NAME=&#8221;vivo&#8221;   TYPE=&#8221;TEXT&#8221; Value=&#8221;&lt;%= vivo %&gt;&#8221; size=&#8221;24&#8243;   MAXLENGTH=&#8221;24&#8243;&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td nowrap&gt;Data di scadenza&lt;/td&gt;<br />
&lt;td valign=&#8221;top&#8221;&gt;&lt;INPUT NAME=&#8221;morto&#8221;   TYPE=&#8221;TEXT&#8221; Value=&#8221;&lt;%= morto %&gt;&#8221;   size=&#8221;24&#8243; MAXLENGTH=&#8221;24&#8243;&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td nowrap&gt;URL&lt;/td&gt;<br />
&lt;td valign=&#8221;top&#8221;&gt;&lt;INPUT NAME=&#8221;url&#8221;   TYPE=&#8221;TEXT&#8221; Value=&#8221;&lt;%= url %&gt;&#8221; size=&#8221;24&#8243;   MAXLENGTH=&#8221;100&#8243;&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td valign=&#8221;top&#8221;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/td&gt;<br />
&lt;td&gt;<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td colspan=&#8221;2&#8243; align=&#8221;center&#8221;&gt;<br />
&lt;table width=&#8221;40%&#8221; border=&#8221;0&#8243; celpadding=&#8221;6&#8243;   cellspacing=&#8221;2&#8243;&gt;<br />
&lt;tr&gt;<br />
&lt;td align=&#8221;right&#8221;&gt;&lt;INPUT TYPE=&#8221;submit&#8221;   NAME=&#8221;submit&#8221; VALUE=&#8221;Entra&#8221;&gt;&lt;/td&gt;<br />
&lt;td align=&#8221;left&#8221;&gt;&lt;INPUT TYPE=&#8221;reset&#8221;   NAME=&#8221;Reset&#8221; VALUE=&#8221;Reset&#8221;&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;/div&gt;<br />
&lt;/FORM&gt;<br />
&lt;%<br />
end if</p>
<p>end if<br />
%&gt; </span></td>
</tr>
</tbody>
</table>
<p>Tutto qui. Adesso possiamo cambiare quello che vogliamo, quando vogliamo e da dove vogliamo.<br />
Nella stessa maniera puoi implementare il bottone che cancella, con un file <em>cancella_new.asp</em>. Questa è ancora più semplice. Tutto quello che devi fare è attivare una <strong>Delete</strong> query quando il bottone è cliccato.</p>
<p>Qui abbiamo usato una soluzione molto semplice ma si potrebbe/dovrebbe fare un po&#8217; più elegante e con meno file. Queste sono questioni di preferenza. Avremmo potuto usare lo stesso file con un <strong>Select</strong> statement. La logica diventa un po&#8217; più complicata ma di sicuro lo sapresti fare adesso.</p>
<p>Finisci questa applicazione da solo e vedrai che la troverai utile. Una volta che hai imparato a fare:</p>
<p>Insert<br />
Select<br />
Update</p>
<p>hai imparato a fare tutto ;o) Il resto è questione di pazienza, di stile, di sintassi. Non si finisce mai di imparare. In più come ti ho detto, ci sono molte maniere per spellare un gatto, molto più efficienti di quello che ti ho fatto vedere. Di sicuro troverai le tue.</p>
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal"><a href="#Indice"><span style="font-size:10.5pt;font-family:Tahoma;">Torna a indice</span></a></p>
<p><span style="font-size:12pt;font-family:&quot;"><br /> </span></p>
<p class="MsoNormal"><a name="diciottesimo"><strong><span style="font-size:15pt;font-family:Tahoma;color:black;">Le News non bastano</span></strong></a><span style="font-size:15pt;font-family:Tahoma;color:black;"></span></p>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:Tahoma;color:black;"><!--[if gte vml 1]&gt;  &lt;![endif]--><!--[if !vml]--><img src="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" border="0" alt="" vspace="2" width="800" height="1" /><!--[endif]--><br />
</span>Adesso che hai visto come si fa presto a lavorare senza dover essere in ufficio comincia a pianificare le tue prossime vacanze in Australia (è bello qui, sai?). Prima di partire sarà meglio che ci costruiamo un po&#8217; più di attrezzi per il nostro sito altrimenti chi paga il mangiare?</p>
<p>Per esempio adesso che abbiamo un servizio di news efficiente e da poter cambiare tutti i giorni certamente le visite al nostro sito cresceranno e con quelle anche la comunicazione con i nostri clienti crescerà di volume. I nostri clienti ci faranno più domande (il che naturalmente vuol dire più business ;o) ed è importantissimo che noi gli rispondiamo il più presto possibile.</p>
<p>Se ti ricordi, nella lezione 9 abbiamo scritto una piccola applicazione che mostra una feedback form, e quando è inviata, ci manda un email. Troppo indietro? Beh, ormai fai prima a riscriverla. Però se la riscrivi tanto vale che la migliori allo stesso tempo. Cambiamola in modo che compia queste azioni:</p>
<p><em>Mostra la form<br />
quando e submitted<br />
mandaci una email<br />
entra I dati nelil database </em></p>
<p>Trova il code vecchio così che ne ricicliamo dei pezzi. È vero che adesso ne sappiamo molto di più ma forse avevamo già fatto qualcosa di utile anche allora.</p>
<p>E infatti:</p>
<p><em>feedback.asp</em> è la form, trovala e cambiamo solo la linea:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB">&lt;FORM   ACTION=&#8221;manda_feedback.asp&#8221; METHOD=&#8221;post&#8221;&gt;</span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">apriamo un file nuovo e chiamiamolo <em>feedback_extra.asp</em> così poi lavoriamo tutto in un unico file. Io preferisco sempre meno file che più.</p>
<p>Allora la linea diventa:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB">&lt;FORM   ACTION=&#8221;feedback_extra.asp?clickato=true&#8221; METHOD=&#8221;post&#8221;   onSubmit=&#8221;return submitIt(this)&#8221;&gt;</span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Oh, in più stavolta facciamo la verifica dei dati nella form sul cliente. Usiamo una semplice funzione in Javascript che controlla se l&#8217;email è vuota. Se non hai familiarità con Javascript prova a mandare la form senza email e vedi subito cosa succede.</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB">&lt;script   language=&#8221;JavaScript&#8221;&gt;<br />
&lt;!&#8211;<br />
function submitIt(theform) {<br />
if (theform.email.value == &#8220;&#8221;) {<br />
alert(&#8220;Per favore, entra il tuo email&#8230;&#8221;)<br />
theform.email.focus()<br />
return false<br />
}<br />
}<br />
&#8211;&gt;<br />
&lt;/script&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Se il cliente non inserisce l&#8217;email facciamo aprire una piccola dialog window in cui chiediamo il suo l&#8217;indirizzo. Poi, quando torniamo alla form, collochiamo il cursore sull&#8217;email text box, per rendere tutto più facile.<br />
E sempre meglio essere gentili, no?</p>
<p><em>Feedback_extra.asp</em> comincia così, come al solito.</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB">&lt;%<br />
If clickato then<br />
&#8216;facciamo tutto qui<br />
else<br />
%&gt;<br />
&lt;!&#8211;#include file=&#8217;feedback.asp&#8217;&#8211;&gt;<br />
&lt;%<br />
end if<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Il &#8216;facciamo tutto qui&#8217; segue in dettagli:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
Option Explicit<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: Raccoglie il feedback dal sito e lo entra nella CRM database<br />
&#8216;Date: 13 Aprile 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
%&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;Raccogliere il Feedback&lt;/title&gt;</p>
<p>&lt;script language=&#8221;JavaScript&#8221;&gt;<br />
&lt;!&#8211;<br />
function submitIt(theform) {<br />
if (theform.email.value == &#8220;&#8221;) {<br />
alert(&#8220;Per favore, entra il tuo email&#8230;&#8221;)<br />
theform.email.focus()<br />
return false<br />
}<br />
}<br />
&#8211;&gt;<br />
&lt;/script&gt;</p>
<p>&lt;/head&gt;<br />
&lt;body&gt;</p>
<p>&lt;%<br />
Dim form, clickato<br />
Dim nome, email, commenti</p>
<p>call Main()</p>
<p>Sub Main()<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: la logica dell&#8217;applicazione<br />
&#8216;Date: 13 April 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
clickato = Request.QueryString(&#8220;clickato&#8221;)</p>
<p>If clickato then<br />
call vendemmia(form)<br />
call metti_dentro(nome,email,commenti)<br />
call manda_grazie(email)<br />
call mostra_grazie()</p>
<p>else<br />
%&gt;<br />
&lt;!&#8211;#include file=&#8217;feedback.asp&#8217;&#8211;&gt;<br />
&lt;%<br />
end if<br />
End sub</p>
<p>&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
Sub vendemmia(form)<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: raccoglie i dati della form<br />
&#8216;Date: 10 March 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>nome = Request.Form(&#8220;nome&#8221;)<br />
email = Request.Form(&#8220;email&#8221;)<br />
commenti = Request.Form(&#8220;commenti&#8221;)</p>
<p>end sub</p>
<p>&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
Sub metti_dentro(a,b,c)<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: entra i dati nelil database<br />
&#8216;Date: 10 March 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
Dim strsql, objConn, strConn, objRs</p>
<p>strConn = Application(&#8220;dbconn&#8221;)</p>
<p>strsql = &#8220;INSERT INTO tbl_feedback ( nome, email, commenti)&#8221;<br />
strsql = strsql &amp; &#8221; Values(&#8216;&#8221;<br />
strsql = strsql &amp; a &amp; &#8220;&#8216;,&#8217;&#8221;<br />
strsql = strsql &amp; b &amp; &#8220;&#8216;,&#8217;&#8221;<br />
strsql = strsql &amp; c &amp; &#8220;&#8216;)&#8221;</p>
<p>Set objConn = Server.CreateObject(&#8220;ADODB.Connection&#8221;)<br />
objConn.Open strConn<br />
set objRs = objConn.Execute(strsql)</p>
<p>objConn.Close<br />
set objConn = Nothing<br />
end sub</p>
<p>&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
Sub manda_grazie(achi)<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: manda la email<br />
&#8216;Date: 10 March 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
Dim objMail, messaggio</p>
<p>messaggio = &#8220;Molte grazie per il feedback&#8221; &amp; VBcrlf<br />
messaggio = messaggio &amp; &#8220;Rispondo in 24 ore max&#8230;&#8221;</p>
<p>Set objMail = Server.CreateObject(&#8220;CDONTS.NewMail&#8221;)<br />
objMail.From = &#8220;ilmioemail@ilmioprovider.etc&#8221;<br />
objMail.To = achi<br />
objMail.Subject = &#8220;Molte grazie da ilnomedelmiosito&#8221;<br />
objMail.Body = messaggio</p>
<p>objMail.importance = 0<br />
objMail.Send<br />
Set objMail = Nothing<br />
end sub</p>
<p>Sub mostra_grazie()<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: apri una pagina per ringraziare<br />
&#8216;Date: 13 Aprile 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
response.write &#8220;&lt;div align=&#8217;center&#8217;&gt;&#8221;<br />
response.write &#8220;&lt;table border=&#8217;0&#8242; width=&#8217;80%&#8217; cellspadding=&#8217;4&#8242;   cellspacing=&#8217;4&#8242;&gt;&#8221;<br />
response.write &#8220;&lt;tr&gt;&lt;td&gt;Molte grazie per il tuo   feedback&#8230;.&lt;/td&gt;&lt;/tr&gt;&#8221;<br />
response.write &#8220;&lt;tr&gt;&lt;td align=&#8217;middlè&gt;&#8221;<br />
response.write &#8220;&lt;a href=&#8217;Javascript:history.go(-2)&#8217;&gt;Vai   Indietro&lt;/a&gt;&#8221;<br />
response.write &#8220;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&#8221;<br />
End Sub</p>
<p>%&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</span></td>
</tr>
</tbody>
</table>
<p>Facile no? Adesso che abbiamo la nostra email in un database possiamo disegnarci e costruire una applicazione simile alla gestione delle news che ci permette di rispondere alla email con comodo e dal database. Questa applicazione deve:</p>
<p>· mostrarci il feedback &#8220;non risposto&#8221;<br />
· permetterci di scrivere una risposta<br />
· mandare la risposta all&#8217;utente<br />
· inserire la nostra risposta nel database insieme al suo feedback</p>
<p>sarebbe anche bello se potesse mostrarci, se lo abbiamo, il feeedback precedente dallo stesso cliente. Per esempio, in caso che il feedback sia parte di una conversazione che ci siamo dimenticati, o se abbiamo più di una persona che risponde al feedback come lavoro quotidiano.</p>
<p>Proviamo?</p>
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal"><a href="#Indice"><span style="font-size:10.5pt;font-family:Tahoma;">Torna a indice</span></a></p>
<p><span style="font-size:12pt;font-family:&quot;"><br /> </span></p>
<p class="MsoNormal"><a name="diciannovesimo"><strong><span style="font-size:15pt;font-family:Tahoma;color:black;">E poi possiamo partire per l&#8217;Australia</span></strong></a><span><span style="font-size:15pt;font-family:Tahoma;color:black;"></span></span></p>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:Tahoma;color:black;"><!--[if gte vml 1]&gt;  &lt;![endif]--><!--[if !vml]--><img src="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" border="0" alt="" vspace="2" width="800" height="1" /><!--[endif]--><br />
</span>Come sempre la logica viene per prima.<br />
Qui siamo in ufficio così subito controlliamo se hai le chiavi.</p>
<p>si<br />
Do<br />
Finché ce n&#8217;è<br />
prendi tutto il feedback che ancora non ha avuto risposta<br />
mostralo<br />
scegli quello a cui vuoi rispondere<br />
dammi un area per la risposta<br />
hai bisogno della conversazione precedente?<br />
se si<br />
mostrala in una nuova window<br />
manda la risposta al cliente<br />
entra la risposta nelil database<br />
loop<br />
no<br />
messaggio &#8220;Fuori dal mio ufficio…!&#8221;</p>
<p>Guardando alla logica mi sembra che non possiamo proprio fare tutto senza fare un piccolo cambiamento al file della lezione precedente. Poiché vogliamo vedere solo il feedback cui non è stato risposto abbiamo bisogno di un campo nel database che ci indica lo stato di quel particolare feedback. Diciamo tre stati diversi, oppure come vuoi tu, ma almeno due sono necessari.</p>
<p>Quindi inseriamo un campo in <strong>tbl_feedback</strong> chiamato &#8220;status&#8221; e nel nostro codice inseriamo un controllo per questi tre stati. Vedi subito che puoi aggiungerne altri senza dover cambiare il database.</p>
<p>1. attivo<br />
2. risposto<br />
3. cancellato</p>
<p>La nostra <strong>Sub</strong> <em>metti_dentro(a,b,c)</em> in <em>feedback_extra</em> cambia così per tenere conto dello stato.<br />
Naturalmente ho anche inserito il campo nella <strong>tbl_feedback</strong> in <em>CRM.mdb</em>:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
Sub metti_dentro(a,b,c)<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: inserisci i dati nel database<br />
&#8216;Date: 10 March 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
Dim strsql, objConn, strConn, objRs<br />
Dim status</p>
<p>strConn = Application(&#8220;dbconn&#8221;)<br />
status = &#8220;attivo&#8221;</p>
<p>strsql = &#8220;INSERT INTO tbl_feedback ( nome, email, commenti,   status)&#8221;<br />
strsql = strsql &amp; &#8221; Values(&#8216;&#8221;<br />
strsql = strsql &amp; a &amp; &#8220;&#8216;,&#8217;&#8221;<br />
strsql = strsql &amp; b &amp; &#8220;&#8216;,&#8217;&#8221;<br />
strsql = strsql &amp; c &amp; &#8220;&#8216;,&#8217;&#8221;<br />
strsql = strsql &amp; status &amp; &#8220;&#8216;)&#8221;</p>
<p>Set objConn = Server.CreateObject(&#8220;ADODB.Connection&#8221;)<br />
objConn.Open strConn<br />
set objRs = objConn.Execute(strsql)</p>
<p>objConn.Close<br />
set objConn = Nothing<br />
end sub<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Adesso che abbiamo il campo status possiamo estrarre facilmente i nostri feedback non risposti con una query che abbia queste istruzioni:</p>
<p>select * from tbl_feedback where status=&#8217;attivo&#8217;<br />
Allora via senza perder tempo. facciamo<br />
feedback_mostra che ce li lista tutti<br />
feedback_rispondi &#8211; ci permette di rispondere quello che scegliamo<br />
feedback_manda &#8211; che manda l&#8217;email e entra la risposta nelil database/</p>
<p>Ecco <em>feedback_mostra.asp</em>:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
come sempre usiamo per dichiarare tutte le variabile e per aiutarci nel   trovare errori<br />
Option Explicit<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: mostra tutto il feedback non risposto (attivo)<br />
&#8216;Date: 13 Aprile 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
%&gt;<br />
includiamo le costanti di ADO<br />
&lt;!&#8211;#include file=&#8221;adovbs.inc&#8221;&#8211;&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;Mostra il Feedback attivo&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;%<br />
Dim objConn, strconn, strsql, objRs<br />
Dim id, nome, email, commenti, status, ricevuto</p>
<p>If Session(&#8220;login&#8221;) then</p>
<p>strconn= Application(&#8220;dbconn&#8221;) </span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Nella nostra query, ordiniamo l&#8217;output così che la più vecchia viene fuori per prima, siccome non vogliamo fare aspettare I nostri clienti per troppo tempo.</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;% strsql = &#8220;Select * from   tbl_feedback where status = &#8216;attivo&#8217; order by ricevuto&#8221;<br />
Set objConn = Server.CreateObject(&#8220;ADODB.Connection&#8221;)<br />
objConn.Open strConn<br />
Set objRs = Server.CreateObject(&#8220;ADODB.Recordset&#8221;)<br />
set objRs = objConn.Execute(strsql)</p>
<p>Response.write &#8220;&lt;table border=&#8217;0&#8242; width=&#8217;80%&#8217; cellpadding=&#8217;2&#8242;   cellspacing=&#8217;2&#8242;&gt;&#8221;<br />
Do While NOT objRs.EOF<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">
Quando un oggetto è richiesto come in questo caso il Request, è sempre più efficiente estrarre il suo contenuto tutto in una volta. Nell&#8217;aprire un oggetto ci sono sempre dei costi e raccogliendo tutti i dati che ci servono in una volta li minimizziamo.<br />
Avremmo anche potuto fare:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB">&lt;%   Response.write &#8220;&lt;td width=&#8217;5%&#8217;&gt;&lt;font color=red&gt;&#8221; &amp;   objRs(&#8220;id&#8221;) &amp; &#8220;&lt;/font&gt;&lt;/td&gt;&#8221; %&gt;</span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">ma l&#8217;oggetto si sarebbe riaperto e chiuso per ogni linea di codice<br />
<!--[if !supportLineBreakNewLine]--><br />
<!--[endif]--></p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
id = objRs(&#8220;id&#8221;)<br />
nome = objRs(&#8220;nome&#8221;)<br />
email = objRs(&#8220;email&#8221;)<br />
commenti = objRs(&#8220;commenti&#8221;)<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">E&#8217; per questo che io adopero funzioni come vendemmia(form) e raccolgo i dati dall&#8217;oggetto tutti in una volta. Questo concetto è valido per qualunque oggetto in ASP.</p>
<p>Questa è un funzione di VBScript per formattare una data in modo da non scrivere l&#8217;ora e i minuti ecc.</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">ricevuto =   formatdatetime(objRs(&#8220;ricevuto&#8221;),VBShortdate)<br />
status = objRs(&#8220;status&#8221;)<br />
Response.write &#8220;&lt;tr bgcolor=&#8217;#f5deb3&#8242;&gt;&lt;td width=&#8217;40&#8242;&gt;&#8221;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Qui abbiamo messo una immagine come un ancora. Quando vi clicchiamo sopra chiamiamo la pagina per rispondere e passandogli l&#8217;id del feedback che abbiamo scelto</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">Response.write &#8220;&lt;a   href=&#8217;feedback_rispondi.asp?id=id&#8217;&gt;&#8221;<br />
Response.write &#8220;&lt;img src=&#8217;folder.gif&#8217; width=&#8217;32&#8242; height=&#8217;30&#8242; alt=&#8221;   border=&#8217;0&#8242;&gt;&#8221;<br />
Response.write &#8220;&lt;/a&gt;&lt;/td&gt;&#8221;</p>
<p>Response.write &#8220;&lt;td width=&#8217;5%&#8217;&gt;&lt;font color=red&gt;&#8221; &amp;   id &amp; &#8220;&lt;/font&gt;&lt;/td&gt;&#8221;<br />
Response.write &#8220;&lt;td width=&#8217;40%&#8217;&gt;&lt;font   color=midnightblue&gt;&#8221; &amp; nome &amp;   &#8220;&lt;/font&gt;&lt;/td&gt;&#8221;<br />
Response.write &#8220;&lt;td width=&#8217;40%&#8217;&gt;&lt;font   color=midnightblue&gt;&#8221; &amp; email &amp;   &#8220;&lt;/font&gt;&lt;/td&gt;&#8221;<br />
Response.write &#8220;&lt;td width=&#8217;100%&#8217; align=right&gt;&lt;font   color=red&gt;&#8221; &amp; ricevuto &amp; &#8220;&lt;/font&gt;&lt;/td&gt;&#8221;<br />
Response.write &#8220;&lt;/tr&gt;&#8221;<br />
Response.write &#8220;&lt;tr bgcolor=&#8217;#f8bf87&#8242;&gt;&#8221;<br />
Response.write &#8220;&lt;td colspan=&#8217;5&#8242;&gt;&#8221;<br />
Response.write &#8220;&lt;font   color=&#8217;firebrick&#8217;&gt;&lt;b&gt;Commenti:&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&#8221;   &amp; commenti &amp; &#8220;&lt;/td&gt;&lt;/tr&gt;&#8221;</p>
<p>objRs.MoveNext<br />
Loop</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">per quando abbiamo finito o vogliamo interrompere il nostro lavoro</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">Response.write   &#8220;&lt;tr&gt;&lt;td&gt;&lt;a href=&#8217;Javascript:history.back()&gt;Torna   indietro&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&#8221;<br />
Response.write &#8220;&lt;/table&gt;&#8221;</p>
<p>else<br />
call niente_chiave()<br />
end if</p>
<p>Sub niente_chiave()<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: mostra un messaggio ben format<br />
&#8216;Date: 13 April 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
Response.write &#8220;&lt;table border=&#8217;0&#8242; width=&#8217;80%&#8217; cellpadding=&#8217;2&#8242;   cellspacing=&#8217;2&#8242;&gt;&#8221;<br />
Response.write &#8220;&lt;tr&gt;&lt;td&gt;&#8221;<br />
Response.write &#8220;Mi dispiace ma questo è il mio ufficio.&lt;br&gt;&#8221;<br />
Response.write &#8220;Costruisciti il tuo!&lt;br&gt;&#8221;<br />
Response.write &#8220;&lt;/td&gt;&lt;/tr&gt;&#8221;<br />
Response.write &#8220;&lt;tr&gt;&lt;td&gt;&lt;a   href=&#8217;Javascript:history.back()&gt;Torna   indietro&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&#8221;<br />
Response.write &#8220;&lt;/table&gt;&#8221;</p>
<p>end sub<br />
%&gt;</p>
<p>&lt;/body&gt;<br />
&lt;/html&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Nessun problema finora? Allora avanti.<br />
Adesso il file feedback_rispondi deve solo prendere l&#8217;Id che abbiamo passato nella collezione QueryString dell&#8217;oggetto Request e eseguire una query al database con quello. Poi deve mostrarci un&#8217;interfaccia che ci permetta di rispondere al nostro feedback. Per la nostra risposta possiamo entrare una textarea che ci permette di scrivere. Ecco tutto il programma</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
Option Explicit<br />
&#8216;Response.buffer = true<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: mostra un singolo feedback<br />
&#8216;Date: 13 Aprile 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
%&gt;</p>
<p>&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;Rispondi un Feedback&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;%<br />
Dim objConn, strconn, strsql, objRs<br />
Dim id, nome, email, commenti, ricevuto, risposta</p>
<p>If Session(&#8220;login&#8221;) then</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Allora prendiamo subito l&#8217;id di cui abbiamo bisogno per trovare il feedback che vogliamo</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">id =   Request.QueryString(&#8220;id&#8221;)<br />
poi la connessione al database<br />
strconn= Application(&#8220;dbconn&#8221;)</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">
e l&#8217;id lo adoperiamo qui:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">strsql = &#8220;Select * from   tbl_feedback where id = &#8221; &amp; id<br />
Set objConn = Server.CreateObject(&#8220;ADODB.Connection&#8221;)<br />
objConn.Open strConn<br />
Set objRs = Server.CreateObject(&#8220;ADODB.Recordset&#8221;)<br />
set objRs = objConn.Execute(strsql)<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">tutto fatto, ora formattiamo l&#8217;output così che lo vediamo e come vogliamo noi. Se tu vuoi puoi naturalmente usare del&#8217;HTML normale. Io mi sono abituato così&#8217; e sono ormai troppo vecchio per cambiare ;o)</p>
<p>Anche qui vedi, apriamo l&#8217;oggetto objRs una volta sola e lo vuotiamo di tutto</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
id = objRs(&#8220;id&#8221;)<br />
nome = objRs(&#8220;nome&#8221;)<br />
email = objRs(&#8220;email&#8221;)<br />
commenti = objRs(&#8220;commenti&#8221;)<br />
ricevuto = formatdatetime(objRs(&#8220;ricevuto&#8221;),VBShortdate)<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Ricordati che anche se rimaniamo nella stessa pagina il server la tratta come una pagina nuova. Quando il cliente clicca su Invia esegue una richiesta al server per questa pagina e il server la manda indietro. È solo la nostra logica che le fa fare cose diverse. Quindi dobbiamo passare l&#8217;id ancora per inviare la nostra risposta nel feedback giusto del database e in più abbiamo bisogno dell&#8217;email per mandargli la risposta:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">Response.write &#8220;&lt;form   action=&#8217;feedback_manda.asp?id=&#8217;&#8221; &amp; id &amp; &#8220;&amp;email=&#8221;   &amp; email &amp; &#8221; method=&#8217;post&#8217;&gt;&#8221;</p>
<p>Response.write &#8220;&lt;table border=&#8217;1&#8242; width=&#8217;95%&#8217; cellpadding=&#8217;2&#8242;   cellspacing=&#8217;1&#8242; bgcolor=&#8217;#f5deb3&#8242;&gt;&#8221;<br />
Response.write &#8220;&lt;tr&gt;&#8221;<br />
Response.write &#8220;&lt;td width=&#8217;5%&#8217;&gt;&lt;font color=red&gt;&#8221; &amp;   id &amp; &#8220;&lt;/font&gt;&lt;/td&gt;&#8221;<br />
Response.write &#8220;&lt;td width=&#8217;30%&#8217;&gt;&lt;font   color=midnightblue&gt;&#8221; &amp; nome &amp;   &#8220;&lt;/font&gt;&lt;/td&gt;&#8221;<br />
Response.write &#8220;&lt;td width=&#8217;30%&#8217;&gt;&lt;font   color=midnightblue&gt;&#8221; &amp; email &amp;   &#8220;&lt;/font&gt;&lt;/td&gt;&#8221;<br />
Response.write &#8220;&lt;td width=&#8217;100%&#8217; align=right&gt;&lt;font   color=red&gt;&#8221; &amp; ricevuto &amp; &#8220;&lt;/font&gt;&lt;/td&gt;&#8221;<br />
Response.write &#8220;&lt;/tr&gt;&#8221;<br />
Response.write &#8220;&lt;tr&gt;&#8221;<br />
Response.write &#8220;&lt;td colspan=&#8217;4&#8242;&gt;&lt;font   color=midnightblue&gt;&#8221; &amp; commenti &amp;   &#8220;&lt;/font&gt;&lt;/td&gt;&#8221;<br />
Response.write &#8220;&lt;/tr&gt;&#8221;<br />
Response.write &#8220;&lt;tr&gt;&#8221;<br />
Response.write &#8220;&lt;td colspan=&#8217;4&#8242; align=&#8217;center&#8217;&gt;&#8221;<br />
Response.write &#8220;&lt;table border=&#8217;1&#8242; width=&#8217;100%&#8217; cellpadding=&#8217;2&#8242;   cellspacing=&#8217;1&#8242; bgcolor=&#8217;#f8bf87&#8242;&gt;&#8221;<br />
Response.write &#8220;&lt;tr&gt;&lt;td&gt;&lt;textarea cols=&#8217;90&#8242; rows=&#8217;20&#8242;   name=&#8217;risposta&#8217;&gt;&lt;/textarea&gt;&lt;/td&gt;&lt;/tr&gt;&#8221;<br />
Response.write &#8220;&lt;tr&gt;&lt;td&gt;&lt;input type=&#8217;submit&#8217;   name=&#8217;submit&#8217; value=&#8217;Rispondi&#8217;&gt;&#8221;<br />
Response.write &#8220;&lt;input type=&#8217;Reset&#8217; name=&#8217;submit&#8217;   value=&#8217;Cancella&#8217;&gt;&lt;/td&gt;&lt;/tr&gt;&#8221;<br />
Response.write &#8220;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#8221;<br />
Response.write &#8220;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#8221;<br />
Response.write &#8220;&lt;/form&gt;&#8221;<br />
else<br />
call niente_chiave()<br />
end if<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">E adesso tutto quello che ci è rimasto da fare è mettere la nostra riposta.<br />
Oh, mi sono dimenticato! Non abbiamo un campo risposta nella nostro database o sì? Non mi ricordo, vado a controllare.<br />
Non c&#8217;è. Mettiamolo e, già che ci siamo, mettiamo anche un campo per la data in cui abbiamo inviato la nostra risposta. Poi quando abbiamo usato questo programma per un po&#8217; e abbiamo un mucchio di dati, possiamo fare delle analisi per vedere quanto siamo efficienti nel rispondere ai nostri clienti. Per esempio:</p>
<p>&#8220;trovami il numero dei feedback in cui la differenza ( ricevuto, mandato) &gt; 24 ore&#8221;</p>
<p>Ho messo due campi in <strong>tbl_feedback</strong>:<br />
<em>risposta &#8211; memo<br />
mandata &#8211; date/time</em></p>
<p>allora la file <em>feedback_manda.asp</em> diventa così:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
Option Explicit</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">L&#8217;oggetto response deve essere dichiarato per primo se vogliamo usarlo nella pagina. Poche dichiarazioni come</p>
<p>Option explicit<br />
Language…</p>
<p>riescono a stargli davanti. Tutto ciò riguarda il fatto che l&#8217;oggetto <strong>response</strong> deve inserire delle informazioni nell&#8217;header HTTP, quindi se è già scritta lui non può farlo.<br />
Comunque te ne accorgerai subito perché il motore di ASP ti restituirà un brutto errore.</p>
<p>Se vuoi vedere queste cose, semplicemente commenta la prossima linea e poi vedi cosa succede. La prossima volta che ti succede non ti devi rompere la testa inutilmente poiché quell&#8217;errore lo sai già</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">Response.buffer = true</p>
<p>&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: manda il feedback che abbiamo riposto<br />
&#8216; entra la risposta e la data nelil database<br />
&#8216; cambia lo status to &#8216;risposto&#8217;<br />
&#8216;Date: 13 Aprile 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
%&gt;</p>
<p>&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;Manda una risposta&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;%<br />
Dim objConn, strconn, strsql, objRs<br />
Dim id, risposta, mandata, email</p>
<p>&#8216;If Session(&#8220;login&#8221;) then</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">prendiamo tutto il contenuto della querystring</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB">id =   Request.QueryString(&#8220;id&#8221;)<br />
email = Request.QueryString(&#8220;email&#8221;)</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">e della form:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">risposta =   Request.Form(&#8220;risposta&#8221;)</span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">il vecchio problema delle &amp;quot; più che altro per MS SQL credo…</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">risposta =   Replace(risposta,&#8221;&#8216;&#8221;,&#8221;&#8221;&#8221;)</span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">usiamo la funzione date per ottenere la data di oggi</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">mandata = Date()</p>
<p>strconn= Application(&#8220;dbconn&#8221;)<br />
strsql = &#8220;Update tbl_feedback &#8220;<br />
strsql = strsql &amp; &#8221; Set &#8220;<br />
strsql = strsql &amp; &#8221; risposta = &#8216;&#8221; &amp; risposta &amp;   &#8220;&#8216;,&#8221;<br />
strsql = strsql &amp; &#8221; mandata = #&#8221; &amp; mandata &amp;   &#8220;#,&#8221;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">e naturalmente cambiamo lo status del feedback così che non torna più:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">strsql = strsql &amp; &#8221;   status = &#8216;risposto&#8217;&#8221;<br />
strsql = strsql &amp; &#8221; where id = &#8221; &amp; id</p>
<p>Set objConn = Server.CreateObject(&#8220;ADODB.Connection&#8221;)<br />
objConn.Open strConn<br />
Set objRs = Server.CreateObject(&#8220;ADODB.Recordset&#8221;)<br />
set objRs = objConn.Execute(strsql)</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">questa lo presa da una lezioni di prima e l&#8217;ho leggermente modificata:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">call manda_posta(email, risposta)</span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">e adesso che abbiamo fatto tutto, il response.redirect ci rimanda al nostro file che ci mostra tutti i feedback e, se tutto ha funzionato al meglio, quello che abbiamo appena risposto non dovrebbe apparire più.</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">response.redirect   &#8220;feedback_mostra.asp&#8221;</p>
<p>else<br />
call niente_chiave()<br />
end if</p>
<p>&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
Sub manda_posta(email,risposta)<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: manda la email<br />
&#8216;Date: 10 March 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
Dim objMail</p>
<p>Set objMail = Server.CreateObject(&#8220;CDONTS.NewMail&#8221;)</p>
<p>objMail.From = &#8220;ilnostroindirizzo&#8221;<br />
objMail.To = email<br />
objMail.Subject = &#8220;Ilmiosito risponde&#8221;<br />
objMail.Body = risposta</p>
<p>objMail.importance = 0<br />
objMail.Send</p>
<p>Set objMail = Nothing<br />
end sub<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Tutto qui. Non c&#8217;è male per un paio d&#8217;ore di lavoro, no? Adesso comincia a tenere il tuo portatile sul comodino così, quando ti svegli alla mattina, rispondi subito ai tuoi clienti che sono venuti durante la notte. Quindi, comincia pure a pianificare il tuo viaggio che ormai il sito te lo mantieni da dove vuoi.</p>
<p>Ho messo anche un campo al feedback nel mio <em>ufficio.asp</em> e siccome ci comincio a lavorare dentro l&#8217;ho fatto anche un po&#8217; più bello ;o)</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB">&lt;%<br />
Option Explicit</p>
<p>If session(&#8220;login&#8221;) then<br />
%&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;Ufficio&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;table width=&#8221;95%&#8221; border=&#8221;0&#8243;   cellspacing=&#8221;4&#8243; cellpadding=&#8221;4&#8243;&gt;<br />
&lt;tr&gt;</p>
<p>&lt;th align=&#8221;left&#8221; width=&#8221;170&#8243;&gt;&lt;img   src=&#8221;NFM.GIF&#8221; width=&#8221;158&#8243; height=&#8221;100&#8243;   alt=&#8221;" border=&#8221;0&#8243;&gt;&lt;/th&gt;<br />
&lt;th align=&#8221;left&#8221; width=&#8221;100%&#8221;&gt;&lt;font size=+2   color=&#8221;firebrick&#8221;&gt;Il Mio Ufficio Virtuale &#8221; o Letto?   &#8220;&lt;/font&gt;<br />
&lt;hr size=&#8221;1&#8243; color=&#8221;firebrick&#8221;   width=&#8221;100%&#8221;&gt;&lt;/th&gt;<br />
&lt;/tr&gt;<br />
&lt;td&gt;&lt;/td&gt;<br />
&lt;td&gt;<br />
&lt;!&#8212;&#8212;&#8212;&#8211;comincia News&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-&gt;<br />
&lt;table width=&#8221;60%&#8221; border=&#8221;0&#8243;   cellspacing=&#8221;1&#8243; cellpadding=&#8221;0&#8243;   bgcolor=&#8221;red&#8221;&gt;&lt;tr&gt;&lt;td&gt;<br />
&lt;!&#8211;tanto per fare un border rosso&#8211;&gt;<br />
&lt;table width=&#8221;100%&#8221; border=&#8221;0&#8243;   cellspacing=&#8221;0&#8243; cellpadding=&#8221;4&#8243;   bgcolor=&#8221;white&#8221;&gt;<br />
&lt;th align=&#8221;left&#8221; bgcolor=&#8221;red&#8221;   colspan=&#8221;2&#8243;&gt;&lt;font   color=&#8221;white&#8221;&gt;News&lt;/font&gt;&lt;/th&gt;<br />
&lt;tr&gt;<br />
&lt;td width=&#8221;40&#8243;&gt;&lt;img src=&#8221;news1.gif&#8221;   width=&#8221;35&#8243; height=&#8221;35&#8243; alt=&#8221;"   border=&#8221;0&#8243;&gt;&lt;/td&gt;<br />
&lt;td width=&#8221;100%&#8221;&gt;&lt;a href=&#8221;news.asp&#8221;&gt;&lt;font   color=&#8221;red&#8221;&gt;Entra un nuovo articolo nelle   News&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td width=&#8221;40&#8243;&gt;&lt;img src=&#8221;chemistry.gif&#8221;   width=&#8221;30&#8243; height=&#8221;32&#8243; alt=&#8221;"   border=&#8221;0&#8243;&gt;&lt;/td&gt;<br />
&lt;td width=&#8221;100%&#8221;&gt;&lt;a   href=&#8221;mantieni_news.asp&#8221;&gt;&lt;font   color=&#8221;red&#8221;&gt;Cambia o cancella un articolo nelle   News&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;</p>
<p>&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;<br />
&lt;!&#8212;&#8212;&#8212;&#8211;finisce News&#8212;&#8212;&#8212;&#8212;&#8211;&gt;</p>
<p>&lt;!&#8212;&#8212;&#8212;&#8211;comincia CRM&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-&gt;<br />
&lt;table width=&#8221;60%&#8221; border=&#8221;0&#8243;   cellspacing=&#8221;1&#8243; cellpadding=&#8221;0&#8243; bgcolor=&#8221;green&#8221;&gt;&lt;tr&gt;&lt;td&gt;<br />
&lt;!&#8211;tanto per fare un border verde&#8211;&gt;<br />
&lt;table width=&#8221;100%&#8221; border=&#8221;0&#8243;   cellspacing=&#8221;0&#8243; cellpadding=&#8221;4&#8243;   bgcolor=&#8221;white&#8221;&gt;<br />
&lt;th align=&#8221;left&#8221; bgcolor=&#8221;green&#8221;   colspan=&#8221;2&#8243;&gt;&lt;font   color=&#8221;white&#8221;&gt;CRM&lt;/font&gt;&lt;/th&gt;<br />
&lt;tr&gt;<br />
&lt;td width=&#8221;40&#8243;&gt;&lt;img src=&#8221;news1.gif&#8221; width=&#8221;35&#8243;   height=&#8221;35&#8243; alt=&#8221;" border=&#8221;0&#8243;&gt;&lt;/td&gt;<br />
&lt;td width=&#8221;100%&#8221;&gt;&lt;a   href=&#8221;feedback_mostra.asp&#8221;&gt;&lt;font   color=&#8221;green&#8221;&gt;Rispondi al   feedback&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;</p>
<p>&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;<br />
&lt;!&#8212;&#8212;&#8212;&#8211;finisce CRM&#8212;&#8212;&#8212;&#8212;&#8211;&gt;<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
&lt;%<br />
else<br />
response.redirect &#8220;login.asp&#8221;<br />
end if<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p class="MsoNormal"><span lang="EN-GB"> </span></p>
<p class="MsoNormal"><span lang="EN-GB"> </span></p>
<p class="MsoNormal"><span lang="EN-GB"> </span></p>
<p class="MsoNormal"><span lang="EN-GB"> </span></p>
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal"><a href="#Indice"><span style="font-size:10.5pt;font-family:Tahoma;">Torna a indice</span></a></p>
<p><span style="font-size:12pt;font-family:&quot;"><br /> </span></p>
<p class="MsoNormal"><a name="ventesimo"><strong><span style="font-size:15pt;font-family:Tahoma;color:black;">Vogliamo degli altri in Ufficio?</span></strong></a><span style="font-size:15pt;font-family:Tahoma;color:black;"></span></p>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:Tahoma;color:black;"><!--[if gte vml 1]&gt;  &lt;![endif]--><!--[if !vml]--><img src="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" border="0" alt="" vspace="2" width="800" height="1" /><!--[endif]--><br />
</span>Adesso abbiamo le News e il Feedback. Il concetto delle News lo possiamo applicare in molte maniere. Potremmo permettere, ad esempio, che i nostri utenti le inseriscano da soli. Diciamo che invece di news sono degli avvenimenti pubblici ed è nell&#8217;interesse del cliente mantenerli in regola. Credi di saperlo fare questo?<br />
Cosa bisogna fare?</p>
<p>1. costruire una form per l&#8217;applicazione del cliente<br />
2. entrare I dati del cliente nelil database<br />
3. generare la password e mandargliela per email<br />
4. provvedere il cliente con un attrezzo per mantenere le sue pagini (solo le sue)</p>
<p>Ecco la form che non presenta nessun problema</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: Raccogli i dati del cliente<br />
&#8216;Date: 7 Aprile 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
%&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;Dati del cliente&lt;/title&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Qui adoperiamo Javascript per validare il contenuto della form. Fare queste cose sul browser è molto più logico che dover fare un altro salto sul server</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;script   language=&#8221;JavaScript&#8221;&gt;<br />
&lt;!&#8211;<br />
function submitIt(theform) {</p>
<p>if (theform.nome.value == &#8220;&#8221;) {<br />
alert(&#8220;Per favore entra il tuo nome&#8230;&#8221;)<br />
theform.nome.focus()<br />
}<br />
if (theform.cognome.value == &#8220;&#8221;) {<br />
alert(&#8220;Per favore entra il tuo cognome&#8230;&#8221;)<br />
theform.cognome.focus()<br />
return false<br />
}<br />
if (theform.email.value == &#8220;&#8221;) {<br />
alert(&#8220;Per favore entra il tuo email&#8230;&#8221;)<br />
</span><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB">theform.email.focus()<br />
return false<br />
}<br />
}<br />
&#8211;&gt;<br />
&lt;/script&gt;<br />
&lt;/head&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">e qui mettiamo semplicemente il focus sulla prima text box, ossia il nome</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;body   OnLoad=&#8221;Javascript:document.frm_client.nome.focus();&#8221;&gt;<br />
&lt;div align=&#8221;center&#8221;&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Quando viene attivato l&#8217;evento <strong>OnSubmit</strong> chiamiamo la routine in Javascript che controllo se le text boxes che vogliamo noi sono state riempite o no.</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;form   ACTION=&#8221;metti_aggiungi_cliente.asp&#8221; name=&#8221;frm_cliente&#8221; method=&#8221;post&#8221;   OnSubmit=&#8221;return submitIt(this)&#8221;&gt;<br />
&lt;table width=&#8221;60%&#8221; border=&#8221;0&#8243;   cellpadding=&#8221;6&#8243; cellspacing=&#8221;0&#8243;   bgcolor=&#8221;darkorange&#8221;&gt;<br />
&lt;tr&gt;<br />
&lt;th align=left&gt;&lt;font color=&#8221;white&#8221;&gt;Per favore entra i   necessari dati:&lt;/font&gt;&lt;/th&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td align=center&gt;<br />
&lt;table width=&#8221;100%&#8221; border=&#8221;0&#8243;   cellpadding=&#8221;6&#8243; cellspacing=&#8221;6&#8243;   bgcolor=&#8221;#ffcc99&#8243;&gt;<br />
&lt;tr&gt;<br />
&lt;td align=&#8221;right&#8221;&gt;Nome:&lt;/td&gt;<br />
&lt;td&gt;&lt;input type=&#8221;text&#8221; name=&#8221;nome&#8221;   size=20&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td align=&#8221;right&#8221;&gt;Cognome:&lt;/td&gt;<br />
&lt;td&gt;&lt;input type=&#8221;text&#8221; name=&#8221;cognome&#8221;   size=20&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td align=&#8221;right&#8221;&gt;Your email:&lt;/td&gt;<br />
&lt;td&gt;&lt;INPUT TYPE=&#8221;Text&#8221; name=&#8221;email&#8221;   size=40&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td align=&#8221;center&#8221;&gt;&lt;INPUT TYPE=&#8221;Submit&#8221;   name=&#8221;submit&#8221; value=&#8221;Manda&#8221;&gt;<br />
&lt;input type=&#8221;Reset&#8221; value=&#8221;Cancella&#8221;&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;/form&gt;<br />
&lt;/div&gt;</p>
<p>&lt;/body&gt;<br />
&lt;/html&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Ed ecco <em>metti_aggiungi_cliente.asp</em> che<br />
1) raccoglie i dati<br />
2) genera la password<br />
3) inserisce i dati nel database<br />
4) manda un email al cliente</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
Option Explicit<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
&#8216;Description : raccoglie i dati del cliente<br />
&#8216;Comments :<br />
&#8216;Date Built : 7 Aprile 2001<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
Dim nome, cognome, email, password, data_ricevuto<br />
Dim strConn, objConn, objRs, strsql<br />
%&gt;<br />
&lt;!&#8211;#include file=&#8221;adovbs.inc&#8221;&#8211;&gt;<br />
&lt;%<br />
&#8216;costruisci password<br />
password = genera_pwd()</p>
<p>&#8216;vendemmia la form<br />
nome = Request.Form(&#8220;nome&#8221;)<br />
cognome = Request.Form(&#8220;cognome&#8221;)<br />
email = Request.Form(&#8220;email&#8221;)<br />
data_ricevuto = Date()</p>
<p>&#8216;metti dentro al database<br />
strConn = Application(&#8220;dbconn&#8221;)</p>
<p>strsql = &#8220;INSERT INTO tbl_login (nome, cognome, login1, password1,   data_ricevuto, email)&#8221;<br />
strsql = strsql &amp; &#8221; Values(&#8216;&#8221;<br />
strsql = strsql &amp; nome &amp; &#8220;&#8216;,&#8217;&#8221;<br />
strsql = strsql &amp; cognome &amp; &#8220;&#8216;,&#8217;&#8221;<br />
strsql = strsql &amp; nome &amp; &#8220;&#8216;,&#8217;&#8221;<br />
strsql = strsql &amp; password &amp; &#8220;&#8216;,#&#8221;<br />
strsql = strsql &amp; data_ricevuto &amp; &#8220;#,&#8217;&#8221;<br />
strsql = strsql &amp; email &amp; &#8220;&#8216;)&#8221;<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Non so se hai notato che ho dovuto cambiare il nome del login e password nella <strong>tbl_login</strong>. Li ho semplicemente cambiati con un 1. Il perché? Quando ho usato questa pagina mi ha data un errore nella query ma la sintassi era giusta. Cosi ho fatto un <em>&lt;% response.write strsql %&gt;</em> ho guardato alla query, l&#8217;ho inserita nel motore query di Access e mi ha funzionato alla perfezione. Deve avere a che fare con parole riservate. È sempre meglio usare notazioni giuste per le variabili.</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;"><br />
&lt;%<br />
Set objConn = Server.CreateObject(&#8220;ADODB.Connection&#8221;)<br />
objConn.Open strConn</p>
<p>Set objRs = objConn.Execute(strsql)</p>
<p>objConn.close<br />
set objConn = Nothing</p>
<p>&#8216;molte grazie&#8230;<br />
Response.write &#8220;&lt;div align=center&gt;&#8221;<br />
Response.write   &#8220;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&#8221;<br />
Response.write &#8220;&lt;font size=+1 color=midnightblue   face=verdana&gt;&#8221;<br />
Response.write &#8220;Il tuo nome è stato aggiunto al nostro   database.&lt;br&gt;&#8221;<br />
Response.write &#8220;La password ti arrivera&#8217; in un minuto&#8230; via email.   &lt;br&gt;&#8221;<br />
Response.write &#8220;Grazie per l&#8217;aiuto.&#8221;<br />
Response.write &#8220;&lt;/font&gt;&lt;/div&gt;&#8221;</p>
<p>&#8216;e via la posta<br />
call manda_posta(nome,password,email)</p>
<p>&#8216;pulisci e chiudi<br />
objRs.close<br />
Set objRs = Nothing</p>
<p>&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
Function genera_pwd()<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
&#8216; Description : Generates a password<br />
&#8216; Date Created : 11-04-2001<br />
&#8216; Comment :<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
Dim i, x<br />
Dim chars(36)<br />
Dim pwd(8)</p>
<p>x = 0<br />
&#8216;a-z<br />
for i = 97 to 122<br />
chars(x) = chr(i)<br />
x = x + 1<br />
next<br />
&#8216;0-9<br />
for i = 48 to 57<br />
chars(x) = chr(i)<br />
x = x + 1<br />
next<br />
password = &#8220;&#8221;<br />
For i = 1 to 8<br />
Randomize<br />
password = password &amp; chars(Int(UBound(chars) &#8211; LBound(chars) + 1) * Rnd   + LBound(chars))<br />
next<br />
genera_pwd = password<br />
end Function<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>Sub manda_posta(nome,password,email)<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
&#8216;Purpose: manda la email<br />
&#8216;Date: 10 March 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>Dim objMail, messaggio</p>
<p>messaggio = &#8220;Grazie per &#8230;&#8230;&#8221;<br />
messaggio = messaggio &amp; VBcrlf &amp; &#8220;login = &#8221; &amp;   nome<br />
messaggio = messaggio &amp; VBcrlf &amp; &#8220;password = &#8221; &amp;   password</p>
<p>Set objMail = Server.CreateObject(&#8220;CDONTS.NewMail&#8221;)</p>
<p>objMail.From = &#8220;latuaemail&#8221;<br />
objMail.To = email<br />
objMail.Subject = &#8220;Grazie per&#8230;&#8221;<br />
objMail.Body = messaggio</p>
<p>objMail.importance = 0<br />
objMail.Send</p>
<p>Set objMail = Nothing<br />
end sub<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p>L&#8217;unica cosa da fare qui è costruire le pagine che permettono ai tuoi utenti di mantenere i loro dati.<br />
Di sicuro questo ormai lo puoi fare anche da solo. In pratica è quasi uguale alle news. L&#8217;unica cosa è che devi organizzare le query con (<em>where id = id</em>) così che ogni cliente ha accesso alla sua area soltanto. Forse è sempre meglio se passi questo valore nell&#8217;oggetto <strong>Request.QueryString</strong> da una pagina all&#8217;altra.</p>
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal"><a href="#Indice"><span style="font-size:10.5pt;font-family:Tahoma;">Torna a indice</span></a></p>
<p><span style="font-size:12pt;font-family:&quot;"><br /> </span></p>
<p class="MsoNormal"><a name="ventunesimo"><strong><span style="font-size:15pt;font-family:Tahoma;color:black;">Allora diamogli le chiavi e facciamoli lavorare</span></strong></a><span style="font-size:15pt;font-family:Tahoma;color:black;"></span></p>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:Tahoma;color:black;"><!--[if gte vml 1]&gt;  &lt;![endif]--><!--[if !vml]--><img src="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" border="0" alt="" vspace="2" width="800" height="1" /><!--[endif]--><br />
</span>Tanto per finire questo tutorial e per essere sicuro che mi hai seguito fino a qui, facciamo anche questo piccolo programma. Cosa vogliamo fare? Adesso che abbiamo degli impiegati virtuali, dobbiamo dargli accesso al nostro ufficio virtuale.</p>
<p>Questo è facile, abbiamo già il nostro login e dobbiamo solo presentarlo all&#8217;utente. Poiché i suoi dati sono già inseriti dovrebbe essere in grado di eseguire il login senza problemi.</p>
<p>Prima però bisognerebbe considerare questo problema. Non tutti i nostri impiegati virtuali sono uguali quindi bisogna che li classifichiamo in modo da dargli gli strumenti di cui hanno bisogno per lavorare.</p>
<p>Mettiamo un nuovo campo in <strong>tbl_login</strong> e chiamiamolo permesso. Io l&#8217;ho reso numerico in modo da ottenere:</p>
<p style="text-align:center;" align="center"><em>0 = permetti tutto<br />
1 = permetti solo le news</em></p>
<p style="margin-bottom:12pt;">Se vuoi lo puoi rendere anche testuale specialmente se dovessi aver bisogno più di 2 livelli.</p>
<p>Ora cambiamo il necessario in <em>Login.asp</em>:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB">&lt;%   strsql = &#8220;Select id, login, password FROM tbl_login&#8221; %&gt;</span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">questa linea deve cambiare. Adesso abbiamo bisogno di sapere non solo id, login, password ma anche che tipo di permesso ha l&#8217;utente. In più possiamo anche prendere tutti i dettagli in modo da poterlo chiamare per nome. Ad esempio:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;% strsql = &#8221; Select *   FROM tbl_login&#8221; %&gt;</span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">poi <em>login.asp </em>cambia così:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
If objRs.EOF then<br />
&#8216;Non è valido, mandalo indietro<br />
response.redirect &#8220;login.asp&#8221;<br />
Else<br />
&#8216;è valido, fallo entrare<br />
session(&#8220;login&#8221;) = True</p>
<p>&#8216;raccogli tuttle le variabili di cui abbiamo bisogno<br />
id = objRs(&#8220;id&#8221;)<br />
nome = objRs(&#8220;nome&#8221;)<br />
cognome = objRs(&#8220;cognome&#8221;)<br />
email = objRs(&#8220;email&#8221;)<br />
permesso = objRs(&#8220;permesso&#8221;)</p>
<p>objRs.close<br />
Set objRs = Nothing<br />
response.redirect &#8220;ufficio.asp&#8221;<br />
end if<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">A questo punto vediamo un paio di scelte che dipendono dal tipo di sito con cui lavoriamo.<br />
Siccome vogliamo mantenere queste variabili durante tutto il tempo che il nostro impiegato rimane nel nostro ufficio virtuale, sarebbe molto comodo se rendessimo le sessioni variabili così che le possiamo chiamare da qualunque pagina:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
session(&#8220;id&#8221;) = id<br />
session(&#8220;nome&#8221;) = nome<br />
session(&#8220;cognome&#8221;) = cognome<br />
session(&#8220;email&#8221;) = email<br />
session(&#8220;permesso&#8221;) = permesso<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Se prendiamo questa strada, ci rendiamo la vita molto più semplice ma, poiché IIS mantiene uno spazio di memoria per ogni sessione che apre i costi per mantenere queste variabili crescono proporzionalmente con il numero di sessioni che apriamo o, per dirlo in un&#8217;altra maniera, il numero di utenti che adoperano il nostro sito.</p>
<p>Ne segue che se diventiamo vittime del nostro successo, che spesso capita con siti scritti bene e apprezzati dal pubblico, saremmo forzati a cambiare questo programma per tenere conto delle risorse sulla memoria del nostro server.</p>
<p>Questo problema si risolve facilmente usando la collezione <strong>QueryString</strong> dell&#8217;oggetto <strong>Request</strong> cambiando la linea seguente:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;% response.redirect   &#8220;ufficio.asp?id=&#8221; &amp; id &amp; &#8220;&amp;nome=&#8221; &amp; nome   &amp; &#8220;&amp;email=&#8221; &amp; email &amp; &#8220;&amp;permesso=&#8221;   &amp; permesso &amp; &#8220;&#8221;"  %&gt;</span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">così ci passiamo da pagina a pagina le variabili di cui abbiamo bisogno e le richiamiamo quando vogliamo. C&#8217;è un po&#8217; più da scrivere ma in questo modo non stressiamo la memoria del nostro IIS.</p>
<p>Allora ecco tutto il nostro <em>login.asp</em> coi cambiamenti che abbiamo fatto:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
Option Explicit<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: Login<br />
&#8216;Date: 07 April 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
Response.Buffer = True<br />
%&gt;<br />
&lt;!&#8211;#include file=&#8221;adovbs.inc&#8221;&#8211;&gt;<br />
&lt;%<br />
Dim objConn, strConn, objRs, strsql<br />
Dim submitted, login, password<br />
Dim id, nome, cognome, email, permesso<br />
%&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;Login&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body bgcolor=powderblue&gt;<br />
&lt;%<br />
submitted = Request.Querystring(&#8220;submitted&#8221;)</p>
<p>If Submitted then</p>
<p>strConn = Application(&#8220;dbconn&#8221;)</p>
<p>login = Request.Form(&#8220;login&#8221;)<br />
password = Request.Form(&#8220;password&#8221;)</p>
<p>strsql = &#8220;Select * FROM tbl_login &#8220;<br />
strsql = strsql &amp; &#8220;WHERE login1 =&#8217;&#8221; &amp; login &amp; &#8220;&#8216;   AND password1 = &#8216;&#8221; &amp; password &amp; &#8220;&#8216;&#8221;</p>
<p>response.write strsql &amp; &#8220;&lt;br&gt;&#8221;</p>
<p>Set objConn = Server.CreateObject(&#8220;ADODB.Connection&#8221;)<br />
objConn.Open strConn<br />
set objRs = objConn.Execute(strsql)</p>
<p>If objRs.EOF then<br />
&#8216;Non è valido, mandalo indietro<br />
response.redirect &#8220;login.asp&#8221;<br />
Else<br />
&#8216;è valido, fallo entrare<br />
session(&#8220;login&#8221;) = True<br />
&#8216;raccogli tuttle le variabili di cui abbiamo bisogno<br />
id = objRs(&#8220;id&#8221;)<br />
nome = objRs(&#8220;nome&#8221;)<br />
cognome = objRs(&#8220;cognome&#8221;)<br />
email = objRs(&#8220;email&#8221;)<br />
permesso = objRs(&#8220;permesso&#8221;)</p>
<p>objRs.close<br />
Set objRs = Nothing<br />
response.redirect &#8220;ufficio.asp?id=&#8221; &amp; id &amp;   &#8220;&amp;nome=&#8221; &amp; nome &amp; &#8220;&amp;email=&#8221; &amp; email   &amp; &#8220;&amp;permesso=&#8221; &amp; permesso<br />
end if<br />
else<br />
&#8217;show the form<br />
%&gt;</p>
<p>&lt;div align=&#8221;center&#8221;&gt;<br />
&lt;form action=&#8221;login.asp?submitted=true&#8221;   method=&#8221;post&#8221;&gt;<br />
&lt;table align=&#8221;center&#8221; cellspacing=&#8221;0&#8243;   cellpadding=&#8221;5&#8243; border=&#8221;1&#8243;   bordercolor=&#8221;midnightblue&#8221; bgcolor=&#8221;ivory&#8221;   width=&#8221;400&#8243;&gt;<br />
&lt;tr&gt;<br />
&lt;th&gt;&lt;font color=firebrick size=+2&gt;&lt;b&gt;Solo chi voglio   io!&lt;/b&gt;&lt;/font&gt;&lt;/th&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td align=&#8221;center&#8221; bgcolor=&#8221;azure&#8221;&gt;<br />
&lt;%<br />
if session(&#8220;login&#8221;) and Submitted then<br />
response.redirect &#8220;login.asp&#8221;<br />
else<br />
response.write &#8220;&lt;br&gt;&lt;br&gt; Per favore, entra login/password.   &lt;br&gt;&lt;br&gt;&#8221;<br />
end if<br />
%&gt;<br />
&lt;table&gt;<br />
&lt;tr&gt;<br />
&lt;td class=event&gt;Login:&lt;/td&gt;<br />
&lt;td&gt;&lt;input type=&#8221;text&#8221; name=&#8221;Login&#8221; size=&#8221;10&#8243;   maxlength=&#8221;30&#8243;&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td class=event&gt;Password:&lt;/td&gt;<br />
&lt;td&gt;&lt;input type=&#8221;password&#8221; name=&#8221;Password&#8221;   size=&#8221;10&#8243; maxlength=&#8221;12&#8243;&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;br&gt;<br />
&lt;input type=&#8221;submit&#8221; value=&#8221;Submit&#8221;&gt;<br />
&lt;input type=&#8221;reset&#8221; value=&#8221;Cancel&#8221;   Onclick=&#8221;Javascript:history.go(-1)&#8221;&gt;<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;/form&gt;<br />
&lt;/div&gt;</p>
<p>&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p>&lt;%<br />
end if</p>
<p>Response.end<br />
Response.Clear<br />
%&gt; </span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Ed ecco anche il nuovo <em>ufficio.asp</em> che tiene conto del permesso dell&#8217;utente così che mostriamo gli attrezzi disponibili nel nostro ufficio in accordo col permesso del cliente. Per esempio nel mio database ho inserito un utente col permesso 1 e lo lascio lavorare con le news ma non con il feedback che non è il suo lavoro.</p>
<p>Ed ecco il nuovo<em> ufficio.asp</em>:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
Option Explicit<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: Il nostro ufficio virtuale<br />
&#8216;Date: 07 April 2001<br />
&#8216;Commenti: aggiunto &#8220;permesso&#8221; per cliente<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
response.buffer = True</p>
<p>&#8216;dichiariamo le variabili nuove<br />
dim id, nome, cognome, email, permesso<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Qui cambiamo leggermente così che possiamo usare l&#8217;ufficio come porta di entrata. Per esempio, oltre a mettere un click sulla nostra pagina per lasciare accesso ai nostri clienti potremmo anche comunicargli: vieni direttamente a questo URL. Se non ha effettuato il login chiederemo di inserire i dati di autenticazione.</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
If NOT session(&#8220;login&#8221;) then<br />
response.redirect &#8220;login.asp&#8221;<br />
else<br />
&#8216;raccogliamo I dati sul cliente<br />
id = Request.QueryString(&#8220;id&#8221;)<br />
nome = Request.QueryString(&#8220;nome&#8221;)<br />
cognome = Request.QueryString(&#8220;cognome&#8221;)<br />
email = Request.QueryString(&#8220;email&#8221;)<br />
permesso = Request.QueryString(&#8220;permesso&#8221;)<br />
%&gt;</p>
<p>&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;Ufficio&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;table width=&#8221;95%&#8221; border=&#8221;0&#8243;   cellspacing=&#8221;4&#8243; cellpadding=&#8221;4&#8243;&gt;<br />
&lt;tr&gt;</p>
<p>&lt;th align=&#8221;left&#8221; width=&#8221;170&#8243;&gt;&lt;img   src=&#8221;NFM.GIF&#8221; width=&#8221;158&#8243; height=&#8221;100&#8243;   alt=&#8221;" border=&#8221;0&#8243;&gt;&lt;/th&gt;<br />
&lt;th align=&#8221;left&#8221; width=&#8221;100%&#8221;&gt;&lt;font size=+2   color=&#8221;firebrick&#8221;&gt;Il Nostro Ufficio Virtuale&lt;/font&gt;<br />
&lt;hr size=&#8221;1&#8243; color=&#8221;firebrick&#8221;   width=&#8221;100%&#8221;&gt;&lt;/th&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td valign=&#8221;top&#8221; bgcolor=&#8221;#ffcc99&#8243;&gt;&lt;font   color=&#8221;firebrick&#8221;&gt;<br />
Ciao &lt;%= nome %&gt; ,&lt;br&gt;sei venuto a lavorare?&lt;br&gt;Se hai   bisogno, chiama.<br />
&lt;/font&gt;&lt;/td&gt;<br />
&lt;td&gt;<br />
&lt;%<br />
&#8216;e qui naturalmente non facciamo altro che controllare se l&#8217;utente ha proprio   bisogno di questo strumento<br />
if permesso &lt;= 1 then<br />
%&gt;<br />
&lt;!&#8212;&#8212;&#8212;&#8211;comincia News&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-&gt;<br />
&lt;table width=&#8221;60%&#8221; border=&#8221;0&#8243;   cellspacing=&#8221;1&#8243; cellpadding=&#8221;0&#8243;   bgcolor=&#8221;red&#8221;&gt;&lt;tr&gt;&lt;td&gt;<br />
&lt;!&#8211;tanto per fare un border rosso&#8211;&gt;<br />
&lt;table width=&#8221;100%&#8221; border=&#8221;0&#8243;   cellspacing=&#8221;0&#8243; cellpadding=&#8221;4&#8243;   bgcolor=&#8221;white&#8221;&gt;<br />
&lt;th align=&#8221;left&#8221; bgcolor=&#8221;red&#8221;   colspan=&#8221;2&#8243;&gt;&lt;font   color=&#8221;white&#8221;&gt;News&lt;/font&gt;&lt;/th&gt;<br />
&lt;tr&gt;<br />
&lt;td width=&#8221;40&#8243;&gt;<br />
&lt;img src=&#8221;news1.gif&#8221; width=&#8221;35&#8243; height=&#8221;35&#8243;   alt=&#8221;" border=&#8221;0&#8243;&gt;&lt;/td&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">
naturalmente dobbiamo passare l&#8217;id alla news.asp in modo da sapere chi è che ha inserito questa news nel database e nel sito. In più bisogna mettere un campo in più nella tbl_news per sapere chi è responsabile per quel specifico pezzo. Io lo chiamo &#8220;responsabile&#8221;:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;td width=&#8221;100&gt;<br />
&lt;a href=&#8221;news.asp?id=&lt;%=id%&gt;&amp;nome=&lt;%=nome%&gt;&#8221;&gt;<br />
&lt;font color=&#8221;red&#8221;&gt;Entra un nuovo articolo nelle   News&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td width=&#8221;40&#8243;&gt;&lt;img src=&#8221;chemistry.gif&#8221;   width=&#8221;30&#8243; height=&#8221;32&#8243; alt=&#8221;"   border=&#8221;0&#8243;&gt;&lt;/td&gt;<br />
&lt;td width=&#8221;100%&#8221;&gt;<br />
&lt;a href=&#8221;mantieni_news.asp&lt;%= id   %&gt;&amp;nome=&lt;%=nome%&gt;&#8221;&gt;<br />
&lt;font color=&#8221;red&#8221;&gt;Cambia o cancella un articolo nelle   News&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;</p>
<p>&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;<br />
&lt;!&#8212;&#8212;&#8212;&#8211;finisce News&#8212;&#8212;&#8212;&#8212;&#8211;&gt;<br />
&lt;%<br />
end if<br />
If permesso = 0 then<br />
%&gt;<br />
&lt;!&#8212;&#8212;&#8212;&#8211;comincia CRM&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-&gt;<br />
&lt;table width=&#8221;60%&#8221; border=&#8221;0&#8243;   cellspacing=&#8221;1&#8243; cellpadding=&#8221;0&#8243;   bgcolor=&#8221;green&#8221;&gt;&lt;tr&gt;&lt;td&gt;<br />
&lt;!&#8211;tanto per fare un border verde&#8211;&gt;<br />
&lt;table width=&#8221;100%&#8221; border=&#8221;0&#8243;   cellspacing=&#8221;0&#8243; cellpadding=&#8221;4&#8243;   bgcolor=&#8221;white&#8221;&gt;<br />
&lt;th align=&#8221;left&#8221; bgcolor=&#8221;green&#8221;   colspan=&#8221;2&#8243;&gt;&lt;font color=&#8221;white&#8221;&gt;CRM&lt;/font&gt;&lt;/th&gt;<br />
&lt;tr&gt;<br />
&lt;td width=&#8221;40&#8243;&gt;&lt;img src=&#8221;news1.gif&#8221;   width=&#8221;35&#8243; height=&#8221;35&#8243; alt=&#8221;"   border=&#8221;0&#8243;&gt;&lt;/td&gt;<br />
&lt;td width=&#8221;100%&#8221;&gt;&lt;a   href=&#8221;feedback_mostra.asp&#8221;&gt;&lt;font   color=&#8221;green&#8221;&gt;Rispondi al   feedback&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
ma &lt;/table&gt;</p>
<p>&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;<br />
&lt;!&#8212;&#8212;&#8212;&#8211;finisce CRM&#8212;&#8212;&#8212;&#8212;&#8211;&gt;<br />
&lt;%<br />
end if<br />
%&gt;<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
&lt;%<br />
end if<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Adesso tutto quello che c&#8217;è rimasto da fare è modificare le news in modo che ognuno è solo responsabile per i suoi pezzi. Penso che in sostanza dovrebbe tutto rimanere come prima con la piccola differenza che quando costruiamo le nostre query dobbiamo tenere conto dell&#8217;id dell&#8217;utente.</p>
<p>Cambiamo questa linea ed è tutto fatto:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB">&lt;%   strsql =&#8221;Select * from tbl_news where id = &#8221; &amp; id &amp;   &#8220;,&#8221; &amp; &#8220;data_morto &gt;= #&#8221; &amp; oggi &amp;   &#8220;#&#8221; %&gt;</span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">adesso il cliente vede solo le sue notizie che è esattamente quello che volevamo fare.</p>
<p>Segue <em>news.asp</em> con diversi piccoli cambiamenti, ma di sicuro tu li vedi subito.</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
Option Explicit<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: applicazione per le news<br />
&#8216;Date: 30 March 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
%&gt;<br />
&lt;!&#8211; la mia è nella stessa folder &#8211;&gt;<br />
&lt;!&#8211; #include file=&#8221;attrezzi_db.asp&#8221; &#8211;&gt;<br />
&lt;%<br />
Dim strConn, message<br />
dichiare le nuove variabili id e nome<br />
Dim titolo, sottotitolo, testo, vivo, morto, id, nome</p>
<p>call Main()</p>
<p>Sub Main()<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: la logica dell&#8217;applicazione<br />
&#8216;Date: 29 March 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
Dim submitted, query, form<br />
submitted = Request.QueryString(&#8220;submitted&#8221;)<br />
raccogli anche queste<br />
id = Request.QueryString(&#8220;id&#8221;)<br />
nome = Request.QueryString(&#8220;nome&#8221;)</p>
<p>response.write id<br />
If submitted then<br />
call vendemmia(form)</p>
<p>&#8216;bisogna passargli anche l&#8217;id e spero che tutit sia ricordato di entrare il   campo nell tbl_news</p>
<p>query = costruisci_query(titolo,sottotitolo,testo,vivo,morto,id)<br />
strConn = Application(&#8220;dbconn&#8221;)<br />
&#8216;questa è in attrezzi_db.inc, ti ricordi? quindi ce l&#8217;abbiamo<br />
call fai_query(strConn, query)<br />
call quale_risultato(message)<br />
else<br />
%&gt;<br />
&lt;!&#8211; mettiamo la form qui &#8211;&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">cambiato il nome. Poiché ho messo delle variabili nella vecchia <em>news_inc</em> ora bisogna chiamarla <em>news_in.asp</em></p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;!&#8211; #include   file=&#8221;news_in.asp&#8221;&#8211;&gt;<br />
&lt;%<br />
end if<br />
end Sub</p>
<p>Sub vendemmia(form)<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: raccogli i dati dalla form<br />
&#8216;Date: 29 March 2001<br />
&#8216;Commenti: corregge il problema di &amp;quot;<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;questo Replace lo facciamo per il carattere &#8220;&amp;quot;&#8221;<br />
&#8216;altrimenti la Database   si confonde<br />
titolo =   Replace(Request.Form(&#8220;titolo&#8221;),&#8221;&#8216;&#8221;,&#8221;&#8221;&#8221;)<br />
sottotitolo =   Replace(Request.Form(&#8220;sottotitolo&#8221;),&#8221;&#8216;&#8221;,&#8221;&#8221;&#8221;)<br />
testo = Replace(Request.Form(&#8220;testo&#8221;),&#8221;&#8216;&#8221;,&#8221;&#8221;&#8221;)<br />
vivo = Request.Form(&#8220;vivo&#8221;)</p>
<p>morto = Request.Form(&#8220;morto&#8221;)<br />
se non inseriamo una data di scadenza allora la facciamo durare solo un   giorno<br />
if morto = &#8220;&#8221; then<br />
morto = vivo<br />
end if<br />
end sub</p>
<p>&#8216;abbiamo una nuova variabile<br />
Function costruisci_query(titolo,sottotitolo,news,vivo,morto,id)<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: costruisce la query<br />
&#8216;Date: 29 March 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
response.write &#8220;hellO=&#8221; &amp; id<br />
Dim strsql<br />
strsql = &#8220;INSERT INTO tbl_news ( titolo, sottotitolo, testo, data_vivo,   data_morto, responsabile)&#8221;<br />
strsql = strsql &amp; &#8221; Values(&#8216;&#8221;<br />
strsql = strsql &amp; titolo &amp; &#8220;&#8216;,&#8217;&#8221;<br />
strsql = strsql &amp; sottotitolo &amp; &#8220;&#8216;,&#8217;&#8221;<br />
strsql = strsql &amp; testo &amp; &#8220;&#8216;,#&#8221;<br />
strsql = strsql &amp; vivo &amp; &#8220;#,#&#8221;<br />
strsql = strsql &amp; morto &amp; &#8220;#,&#8217;&#8221;<br />
strsql = strsql &amp; id &amp; &#8220;&#8216;)&#8221;</p>
<p>&#8217;se hai dei guai costruendo questa, metti un<br />
Response.Write strsql &amp; &#8220;&lt;br&gt;&#8221;<br />
&#8216;così la vedi e la puoi accomodare<br />
costruisci_query = strsql<br />
End Function</p>
<p>Sub quale_risultato(message)<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: cronaca il risultato dell query e format una risposta<br />
&#8216;Date: 29 March 2001<br />
&#8216;Commenti:<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
Select case message<br />
case &#8220;ok&#8221;<br />
response.write &#8220;Tutto è andato bene, &lt;br&gt; e grazie per il   pesce.&#8221;<br />
</span><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB">response.write   &#8220;&lt;br&gt;&lt;br&gt;&lt;div align=&#8217;center&#8217;&gt;&lt;a   href=&#8217;JavaScript:history.back()&#8217;&gt;Click to go   back&lt;/a&gt;&lt;/div&gt;&#8221;<br />
case &#8220;not ok&#8221;<br />
response.write &#8220;È un grosso disastro! </span><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;br&gt;   Chissa cosa è successo?&#8221;<br />
response.write &#8220;Prova a scrivere la query e altre variabili per vedere   se riesci a risolvere il problema.&#8221;<br />
response.write &#8220;&lt;br&gt;Anche la professione del falegname è onorevole   ;o)&#8221;<br />
response.write &#8220;&lt;br&gt;&lt;br&gt;&lt;div align=&#8217;center&#8217;&gt;&lt;a   href=&#8217;JavaScript:history.back()&#8217;&gt;Click to go   back&lt;/a&gt;&lt;/div&gt;&#8221;<br />
case else<br />
response.write &#8220;Se sei qui è metafisica pura&#8221;<br />
end select</p>
<p>end sub<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">poi viene la form normale in cui ho solo messo il nome dell&#8217;utente.<br />
<em><span lang="EN-GB">News_in.asp</span></em><span lang="EN-GB">:</span></p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;" lang="EN-GB">&lt;HTML&gt;<br />
&lt;HEAD&gt;<br />
&lt;TITLE&gt;News Input&lt;/TITLE&gt;<br />
&lt;/head&gt;<br />
&lt;/HEAD&gt;</p>
<p>&lt;BODY&gt;<br />
&lt;FORM ACTION=&#8221;news.asp?submitted=true&amp;id=&lt;%=id%&gt;&amp;nome=&lt;%=nome%&gt;&#8221;   METHOD=&#8221;post&#8221;&gt;<br />
&lt;div align=&#8221;center&#8221;&gt;<br />
&lt;table border=&#8221;0&#8243; width=&#8221;95%&#8221; celpadding=&#8221;2&#8243;   cellspacing=&#8221;2&#8243;&gt;<br />
&lt;tr&gt;</p>
<p>&lt;td&gt;&lt;h1&gt;&lt;%= nome %&gt;, entra le news per oggi qui&#8230;&lt;hr   align=&#8221;LEFT&#8221; size=&#8221;1&#8243; width=&#8221;100%&#8221;   color=&#8221;navy&#8221;&gt;&lt;/h1&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;td align=&#8221;center&#8221;&gt;&lt;br&gt;&lt;br&gt;<br />
&lt;table width=&#8221;80%&#8221; border=&#8221;0&#8243; celpadding=&#8221;2&#8243;   cellspacing=&#8221;2&#8243;&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;Titolo&lt;/td&gt;<br />
&lt;td&gt;&lt;INPUT NAME=&#8221;titolo&#8221; TYPE=&#8221;TEXT&#8221;   size=&#8221;80&#8243; MAXLENGTH=&#8221;80&#8243;&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;Sottotitolo&lt;/td&gt;<br />
&lt;td valign=&#8221;top&#8221;&gt;&lt;TEXTAREA NAME=&#8221;sottotitolo&#8221;   ROWS=&#8221;3&#8243; COLS=&#8221;60&#8243;&gt;&lt;/TEXTAREA&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;tr&gt;<br />
&lt;td valign=&#8221;top&#8221;&gt;News&lt;/td&gt;<br />
&lt;td valign=&#8221;top&#8221;&gt;&lt;TEXTAREA NAME=&#8221;testo&#8221;   ROWS=&#8221;10&#8243; COLS=&#8221;60&#8243;&gt;&lt;/TEXTAREA&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td nowrap&gt;Data di entrata&lt;/td&gt;<br />
&lt;td valign=&#8221;top&#8221;&gt;&lt;INPUT NAME=&#8221;vivo&#8221;   TYPE=&#8221;TEXT&#8221; Value=&#8221;&lt;%= Now() %&gt;&#8221;   size=&#8221;24&#8243; MAXLENGTH=&#8221;24&#8243;&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td nowrap&gt;Data di scadenza&lt;/td&gt;<br />
&lt;td valign=&#8221;top&#8221;&gt;&lt;INPUT NAME=&#8221;morto&#8221;   TYPE=&#8221;TEXT&#8221; size=&#8221;24&#8243;   MAXLENGTH=&#8221;24&#8243;&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td nowrap&gt;URL&lt;/td&gt;<br />
&lt;td valign=&#8221;top&#8221;&gt;&lt;INPUT NAME=&#8221;url&#8221;   TYPE=&#8221;TEXT&#8221; size=&#8221;24&#8243;   MAXLENGTH=&#8221;100&#8243;&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td valign=&#8221;top&#8221;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/td&gt;<br />
&lt;td&gt;<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td colspan=&#8221;2&#8243; align=&#8221;center&#8221;&gt;<br />
&lt;table width=&#8221;40%&#8221; border=&#8221;0&#8243; celpadding=&#8221;6&#8243;   cellspacing=&#8221;2&#8243;&gt;<br />
&lt;tr&gt;<br />
&lt;td align=&#8221;right&#8221;&gt;&lt;INPUT TYPE=&#8221;submit&#8221;   NAME=&#8221;submit&#8221; VALUE=&#8221;Entra&#8221;&gt;&lt;/td&gt;<br />
&lt;td align=&#8221;left&#8221;&gt;&lt;INPUT TYPE=&#8221;reset&#8221;   NAME=&#8221;Reset&#8221; VALUE=&#8221;Reset&#8221;&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;/div&gt;<br />
&lt;/FORM&gt;</p>
<p>&lt;/BODY&gt;<br />
&lt;/HTML&gt;</span></td>
</tr>
</tbody>
</table>
<p style="margin-bottom:12pt;">Adesso che il nostro utente può entrare nelle News con un suo id, le possiamo anche estrarre alla stessa maniera quando vuole mantenere i suoi dati. Prendiamo il nostro vecchio file mantieni_new.asp e modifichiamolo:</p>
<table class="MsoNormalTable" style="width:100%;" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td style="background:#edf7ff none repeat scroll 0;padding:3pt;">
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:&quot;color:#064987;">&lt;%<br />
Option Explicit<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
&#8216;Purpose: mostra le news per cambiarle<br />
&#8216;Date: 7 Aprile 2001<br />
&#8216;Commenti: adattata per clienti con ID<br />
&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
%&gt;<br />
&lt;!&#8211;#include file=&#8221;adovbs.inc&#8221;&#8211;&gt;<br />
&lt;%<br />
Dim objConn, strConn, objRs, strsql<br />
dobiamo dichiararle e raccoglierle<br />
Dim id, nome</p>
<p>id = Request.QueryString(&#8220;id&#8221;)<br />
nome = Request.QueryString(&#8220;nome&#8221;)</p>
<p>If Session(&#8220;login&#8221;) then<br />
strConn = Application(&#8220;dbconn&#8221;)</p>
<p>&#8216;come vedi cambiamo la query con la clausola id</p>
<p>strsql = &#8220;Select * from tbl_news where responsabile= &#8221; &amp; id   &amp; &#8221; order by data_morto Asc&#8221;</p>
<p>Set objConn = Server.CreateObject(&#8220;ADODB.Connection&#8221;)<br />
objConn.Open strConn<br />
Set objRs = Server.CreateObject(&#8220;ADODB.Recordset&#8221;)</p>
<p>objRs.CursorLocation = adUseClient<br />
set objRs = objConn.Execute(strsql)</p>
<p>response.write &#8220;&lt;div align=center&gt;&#8221;<br />
response.write &#8220;&lt;table border=&#8217;1&#8242; width=&#8217;80%&#8217; cellpadding=&#8217;4&#8242;   cellspacing=&#8217;4&#8242; bgcolor=&#8217;bisquè&gt;&#8221;<br />
response.write &#8220;&lt;tr&gt;&lt;th colspan=&#8217;4&#8242; align=&#8217;center&#8217;&gt;&lt;font   size=&#8217;+2&#8242; color=&#8217;firebrick&#8217;&gt;Mantieni le   News&lt;/font&gt;&lt;/th&lt;/tr&gt;&#8221;</p>
<p>Do while Not objRs.EOF<br />
%&gt;<br />
&lt;tr&gt;<br />
&lt;td width=&#8221;5%&#8221;&gt;&lt;font color=&#8217;teal&#8217;&gt;&lt;%=   objRs(&#8220;id&#8221;) %&gt;&lt;/font&gt;&lt;/td&gt;<br />
&lt;td width=&#8221;75%&#8221;&gt;&lt;font color=&#8217;teal&#8217;&gt;&lt;%=   objRs(&#8220;titolo&#8221;) %&gt;&lt;/font&gt;&lt;/td&gt;<br />
&lt;td width=&#8221;10%&#8221;&gt;&lt;a href=&#8221;cambia_news.asp?id=&lt;%=   objRs(&#8220;id&#8221;) %&gt;&#8221;&gt;cambia&lt;/a&gt;&lt;/td&gt;<br />
&lt;td width=&#8221;10%&#8221;&gt;&lt;a href=&#8221;cancella_news.asp?id=&lt;%=   objRs(&#8220;id&#8221;) %&gt;&#8221;&gt;cancella&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;%<br />
objRs.MoveNext<br />
Loop<br />
Response.write &#8220;&lt;/table&gt;&lt;/div&gt;&#8221;</p>
<p>&#8216;quando hai tempo, metti questa in un .inc e formatala con un bel messaggio<br />
&#8216;poi la puoi mettere dappertutto nell&#8217;ufficio<br />
else<br />
response.write &#8220;Mi dispiace ma questo è il mio ufficio e tu non hai la   chiave&#8230;&#8221;<br />
end if<br />
%&gt;</span></td>
</tr>
</tbody>
</table>
<p>E adesso basta. Chiudiamo questo benedetto ufficio e andiamo a farci una pensata sopra.</p>
<p class="MsoNormal">
<p class="MsoNormal">
<p><a href="#Indice"><span style="font-size:12pt;font-family:&quot;">Torna a indice</span></a></p>
<p><span style="font-size:10.5pt;font-family:Tahoma;color:black;"><br /> </span></p>
<p><a name="ventiduesimo"><strong><span style="font-size:15pt;">Conclusione</span></strong></a><strong><span style="font-size:15pt;"></span></strong></p>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:Tahoma;color:black;"><!--[if gte vml 1]&gt;  &lt;![endif]--><!--[if !vml]--><img src="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" border="0" alt="" vspace="2" width="800" height="1" /><!--[endif]--><br />
</span>Ok, io penso di fermarmi qui. Spero che tu adesso abbia appreso abbastanza per continuare a lavorare e per imparare ad adoperare questa tecnologia. In più spero che tu adesso sia in grado di identificare, disegnare e costruire gli strumenti di cui hai bisogno per il tuo lavoro.</p>
<p>Le regole sono semplici come hai visto. Scrivi il pseudocodice in lingua normale e poi segui con il codice.</p>
<p>Durante questo tutorial io ho preso molte scorciatoie. L&#8217;ho fatto più che altro per semplificare le lezioni e cercare di rimanere sul percorso di ASP. Ho persino adoperato alcuni tag HTML che sono già abolite come &lt;font&gt; ma, hey! non volevo cominciare a parlare di fogli di stile (CSS).</p>
<p>Ugualmente con l&#8217;arrivo di ASP3 ci sono molti più strumenti per connettersi con databases e per presentare il display sulla macchina del cliente.</p>
<p>Non li ho analizzati di proposito perché penso che è sempre meglio cominciare dal semplice. Adopera e analizza questi piccoli programmi che abbiamo scritto insieme. Vedrai che formeranno le basi di un mucchio di aggeggi che troverai utili e divertenti da costruire. E quando hai finito buttali via perché tanto il nostro lavoro è sempre così. Quello che fai oggi, domani è già obsoleto e devi ricominciare dal principio. Impara i concetti non la sintassi. La sintassi cambia ma i principi di queste tecnologie sono sempre gli stessi e quando hai imparato ASP le prossime tecnologie diventano molto più facili da usare. L&#8217;intelligenza è nascosta nei database, quando sai come mettere dentro dati, ritirarli e modificarli non c&#8217;è più limite a quello che puoi fare.<br />
Ricordati, il database è il tuo amico.<br />
Buon divertimento e Auguroni.</p>
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal"><a href="#Indice"><span style="font-size:10.5pt;font-family:Tahoma;">Torna a indice</span></a></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/progettistamultimediale.wordpress.com/35/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/progettistamultimediale.wordpress.com/35/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/progettistamultimediale.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/progettistamultimediale.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/progettistamultimediale.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/progettistamultimediale.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/progettistamultimediale.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/progettistamultimediale.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/progettistamultimediale.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/progettistamultimediale.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/progettistamultimediale.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/progettistamultimediale.wordpress.com/35/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=progettistamultimediale.wordpress.com&blog=4169703&post=35&subd=progettistamultimediale&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://progettistamultimediale.wordpress.com/2008/07/09/manuale-asp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/32899e130d85c12989fd68f0a31735bc?s=96&#38;d=identicon" medium="image">
			<media:title type="html">progettistamultimediale</media:title>
		</media:content>

		<media:content url="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" medium="image" />

		<media:content url="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" medium="image" />

		<media:content url="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" medium="image" />

		<media:content url="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" medium="image" />

		<media:content url="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" medium="image" />

		<media:content url="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" medium="image" />

		<media:content url="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" medium="image" />

		<media:content url="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" medium="image" />

		<media:content url="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" medium="image" />

		<media:content url="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" medium="image" />

		<media:content url="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" medium="image" />

		<media:content url="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" medium="image" />

		<media:content url="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" medium="image" />

		<media:content url="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" medium="image" />

		<media:content url="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" medium="image" />

		<media:content url="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" medium="image" />

		<media:content url="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" medium="image" />

		<media:content url="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" medium="image" />

		<media:content url="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" medium="image" />

		<media:content url="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" medium="image" />

		<media:content url="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" medium="image" />

		<media:content url="/DOCUME~1/Davide/IMPOST~1/Temp/msohtml1/01/clip_image002.jpg" medium="image" />
	</item>
	</channel>
</rss>