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

<channel>
	<title># ivirtual networks &#187; captcha</title>
	<atom:link href="http://www.informaticavirtual.us/tag/captcha/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.informaticavirtual.us</link>
	<description>w3: informaticavirtual us</description>
	<lastBuildDate>Fri, 05 Mar 2010 03:19:59 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Como hacer un formulario de contacto con PHP utilizando captcha</title>
		<link>http://www.informaticavirtual.us/2009/12/20/como-hacer-un-formulario-de-contacto-con-php-utilizando-captcha/</link>
		<comments>http://www.informaticavirtual.us/2009/12/20/como-hacer-un-formulario-de-contacto-con-php-utilizando-captcha/#comments</comments>
		<pubDate>Sun, 20 Dec 2009 07:00:19 +0000</pubDate>
		<dc:creator>Bony</dc:creator>
				<category><![CDATA[Programacion web]]></category>
		<category><![CDATA[Webmasters]]></category>
		<category><![CDATA[captcha]]></category>
		<category><![CDATA[Contacto]]></category>
		<category><![CDATA[Formulario]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.informaticavirtual.us/?p=77</guid>
		<description><![CDATA[Luego del post de mnosh, se me vino a la cabeza postear un formulario de contacto en PHP que yo tenia, empleando su captcha, para asi ya de paso, dar un ejemplo de como incorporarlo a un formulario, y usarlo correctamente.
En la carpeta &#8220;contacto&#8221; tenemos los siguientes archivos:

bauhs93.ttf
contacto.php
captcha.php (archivo de este post)

Vamos a usar una [...]]]></description>
			<content:encoded><![CDATA[<p>Luego del post de mnosh, se me vino a la cabeza postear un formulario de contacto en PHP que yo tenia, empleando su captcha, para asi ya de paso, dar un ejemplo de como incorporarlo a un formulario, y usarlo correctamente.</p>
<p>En la carpeta &#8220;contacto&#8221; tenemos los siguientes archivos:</p>
<ul>
<li>bauhs93.ttf</li>
<li>contacto.php</li>
<li>captcha.php (archivo de <a href="http://www.informaticavirtual.us/2009/12/14/creando-un-sistema-simple-para-manejo-de-captcha-en-php/">este</a> post)</li>
</ul>
<p>Vamos a usar una fuente nueva para nuestro captcha, asi que ya tenemos una linea que modificar en captcha.php.</p>
<p>Pero primero, vamos a ir con el codigo de contacto.php:<br />
<span id="more-77"></span></p>
<div class="codecolorer-container php vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #666666; font-style: italic;">//iniciamos session para poder acceder a ella a la hora de comprobar el codigo del captcha</span><br />
<a href="http://www.php.net/session_start"><span style="color: #990000;">session_start</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">// $errores comienza en 0, se incrementaria si algo no va bien.</span><br />
<span style="color: #000088;">$errores</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;">// preparamos mensaje de salida como un string vacio, iremos agregando lineas a medida que vayamos encontrando errores.</span><br />
<span style="color: #000088;">$errMessage</span><span style="color: #339933;">=</span><span style="color: #0000ff;">''</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">//Chequeamos si se ha enviado el formulario.</span><br />
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><a href="http://www.php.net/isset"><span style="color: #990000;">isset</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'enviar'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
<br />
<span style="color: #666666; font-style: italic;">//iniciamos y formateamos variables</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$nombre</span><span style="color: #339933;">=</span><a href="http://www.php.net/isset"><span style="color: #990000;">isset</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'nombre'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>? <a href="http://www.php.net/ucwords"><span style="color: #990000;">ucwords</span></a><span style="color: #009900;">&#40;</span><a href="http://www.php.net/strtolower"><span style="color: #990000;">strtolower</span></a><span style="color: #009900;">&#40;</span><a href="http://www.php.net/trim"><span style="color: #990000;">trim</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'nombre'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$email</span><span style="color: #339933;">=</span><a href="http://www.php.net/isset"><span style="color: #990000;">isset</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'email'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>? <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'email'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$texto</span><span style="color: #339933;">=</span><a href="http://www.php.net/isset"><span style="color: #990000;">isset</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'texto'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>? <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'texto'</span><span style="color: #009900;">&#93;</span> &nbsp;<span style="color: #339933;">:</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$captcha</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/isset"><span style="color: #990000;">isset</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'captcha'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>? <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'captcha'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// usamos el filtro para validar emails</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><a href="http://www.php.net/filter_var"><span style="color: #990000;">filter_var</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$email</span><span style="color: #339933;">,</span> FILTER_VALIDATE_EMAIL<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// si no es valido, sumamos 1 a la cantidad de errores, y le agregamos a errMessage</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// el error.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$errores</span><span style="color: #339933;">++;</span> &nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$errMessage</span><span style="color: #339933;">.=</span><span style="color: #0000ff;">'el mail no parece valido&lt;br /&gt;'</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// comprobamos que el nombre contenga solo letras</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><a href="http://www.php.net/ereg"><span style="color: #990000;">ereg</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'^[a-zA-Z]{3,40}$'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$nombre</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$errores</span><span style="color: #339933;">++;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$errMessage</span><span style="color: #339933;">.=</span><span style="color: #0000ff;">'a escrito un nombre incorrecto&lt;br /&gt;'</span><span style="color: #339933;">;</span> &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// si el largo de la variable texto es mayor a 200...</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><a href="http://www.php.net/strlen"><span style="color: #990000;">strlen</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$texto</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&gt;</span><span style="color: #cc66cc;">200</span> <span style="color: #339933;">||</span> <a href="http://www.php.net/empty"><span style="color: #990000;">empty</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$texto</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// sumamos 1 a la cantidad de errores, y le agregamos a errMessage el error.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$errores</span><span style="color: #339933;">++;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$errMessage</span><span style="color: #339933;">.=</span><span style="color: #0000ff;">'comentario demasiado largo&lt;br /&gt;'</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$captcha</span> <span style="color: #339933;">!=</span> <span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'cache_string'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// sumamos 1 a la cantidad de errores y agregamos el tipo de error a errMessage</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$errores</span><span style="color: #339933;">++;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$errMessage</span><span style="color: #339933;">.=</span><span style="color: #0000ff;">'captcha ingresado invalido &lt;br /&gt;'</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// si no hay errores, entonces procedemos a armar, y enviar el mail..</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$errores</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #666666; font-style: italic;">// armamos los headers del mensaje... el from, y etc..</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #000088;">$headers</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;From: &quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$email</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot; &quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$nombre</span><span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot; &lt;&quot;</span> <span style="color: #339933;">.</span><span style="color: #000088;">$email</span><span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;&gt;&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #666666; font-style: italic;">//armamos el cuerpo del mensaje</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #000088;">$mensaje</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Administrador, han mandado un mail desde la web XXXXXXXX, el nombre del visitante es: <span style="color: #006699; font-weight: bold;">{$nombre}</span>, su email es: <span style="color: #006699; font-weight: bold;">{$email}</span> y el mensaje es el siguiente: <span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\n</span> <span style="color: #006699; font-weight: bold;">{$texto}</span>&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// @mail(...), devuelve true si la funcion no tiro ningun error (o sea, se mando el mail)</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// si tu hosting no tiene smpt, te dara el error del else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">@</span><a href="http://www.php.net/mail"><span style="color: #990000;">mail</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;matias.a18@gmail.com&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;Asunto de nuestro mensaje&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$mensaje</span><span style="color: #339933;">,</span> <span style="color: #000088;">$headers</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;div class=&quot;sinerrores&quot;&gt;Mensaje enviado satisfactoriamente&lt;/div&gt;'</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// el mensaje no ha podido ser enviado, mostramos el texto en la clase error de la css</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// las razones por las que puede aparecer este mensaje es porque el puerto smpt no esta abierto</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// en el servidor.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;div class=&quot;error&quot;&gt;El mensaje no ha podido ser enviado&lt;/div&gt;'</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #666666; font-style: italic;">// como hubieron errores, los mostramos en la clase (definida en la .css) error.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;div class=&quot;error&quot;&gt;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$errMessage</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;/div&gt;'</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span><br />
<br />
&lt;div align=&quot;center&quot;&gt;<br />
<br />
&lt;form method=&quot;POST&quot; action=&quot;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'REQUEST_URI'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&quot;&gt;<br />
&lt;p&gt;Nombre:&lt;/p&gt;<br />
&lt;p&gt;&lt;input type=&quot;text&quot; name=&quot;nombre&quot; id=&quot;nombre&quot;/&gt;&lt;/p&gt;<br />
&lt;p&gt;Email:&lt;/p&gt;<br />
&lt;p&gt;&lt;input type=&quot;text&quot; name=&quot;email&quot; id=&quot;email&quot;/&gt;&lt;/p&gt;<br />
&lt;p&gt;Mensaje:&lt;/p&gt;<br />
&lt;p&gt;&lt;textarea name=&quot;texto&quot; id=&quot;texto&quot; rows=&quot;10&quot; cols=&quot;30&quot;&gt;&lt;/textarea&gt;&lt;/p&gt;<br />
&lt;p&gt;Introduzca la siguiente cadena de texto: &lt;/p&gt;<br />
&lt;p&gt;&lt;img src=&quot;captcha.php&quot; /&gt;&lt;/p&gt;<br />
&lt;p&gt;&lt;input size=&quot;5&quot; type=&quot;text&quot; name=&quot;captcha&quot;/&gt;&lt;/p&gt;<br />
&lt;p&gt;&lt;input type=&quot;submit&quot; value=&quot;Enviar&quot; id=&quot;enviar&quot; name=&quot;enviar&quot;/&gt;&lt;/p&gt;<br />
<br />
<br />
<br />
<br />
&lt;/form&gt;<br />
&lt;/div&gt;</div></td></tr></tbody></table></div>
<p>Como podran ver, usamos el archivo <a href="http://www.informaticavirtual.us/2009/12/14/creando-un-sistema-simple-para-manejo-de-captcha-en-php/">captcha.php</a>, aunque, le cambiamos algo del anterior codigo, en la linea 16, en vez de ponerle:</p>
<div class="codecolorer-container php vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000088;">$fontFile</span> <span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;my_special_font.ttf&quot;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Le ponemos:</p>
<div class="codecolorer-container php vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000088;">$fontFile</span> <span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;bauhs93.ttf&quot;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Y listo, si el mensaje ha sido enviado correctamente, deberiamos recibir esta notificacion:</p>
<p>&#8220;Mensaje enviado satisfactoriamente&#8221;</p>
<p>Si el SMTP de nuestro hosting no esta activado, nos deberia de mostrar este mensaje:</p>
<p>&#8220;El mensaje no ha podido ser enviado&#8221;</p>
<p>Y, si hubo algun error, podriamos recibir alguno de los siguientes mensajes:</p>
<p>&#8220;captcha ingresado invalido&#8221; y/o &#8220;comentario demasiado largo&#8221; y/o &#8220;a escrito un nombre incorrecto&#8221; y/o &#8220;el mail no parece valido&#8221;.</p>
<p>Y listo, tenemos nuestro formulario de contacto hecho.. y listo.</p>
<p>Cualquier duda, en los comentarios.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.informaticavirtual.us/2009/12/20/como-hacer-un-formulario-de-contacto-con-php-utilizando-captcha/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creando un sistema simple para manejo de captcha en php</title>
		<link>http://www.informaticavirtual.us/2009/12/14/creando-un-sistema-simple-para-manejo-de-captcha-en-php/</link>
		<comments>http://www.informaticavirtual.us/2009/12/14/creando-un-sistema-simple-para-manejo-de-captcha-en-php/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 05:31:05 +0000</pubDate>
		<dc:creator>mnosh</dc:creator>
				<category><![CDATA[Programacion web]]></category>
		<category><![CDATA[Webmasters]]></category>
		<category><![CDATA[captcha]]></category>
		<category><![CDATA[diseño]]></category>
		<category><![CDATA[gd]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programacion]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://www.informaticavirtual.us/?p=59</guid>
		<description><![CDATA[Un sistema de captcha (Completely Automated Public Turing test to tell Computers and Humans Apart) es la solución frecuente para evitar que robots spamers que visiten nuestro sitio puedan registrarse, enviar comentarios, participar en encuestas o cualquier yuyo en cuestión. Si bien esto no nos garantiza un 100% de efectividad , de seguro nos vale.
Supongamos [...]]]></description>
			<content:encoded><![CDATA[<p>Un sistema de captcha (Completely Automated Public Turing test to tell Computers and Humans Apart) es la solución frecuente para evitar que robots spamers que visiten nuestro sitio puedan registrarse, enviar comentarios, participar en encuestas o cualquier yuyo en cuestión. Si bien esto no nos garantiza un 100% de efectividad , de seguro nos vale.</p>
<p>Supongamos un sitio web desarrollado en php al cual queremos implementarle una solución para frenar bots spamers, bien entonces instalamos re-captcha  y listo, gracias por participar&#8230;</p>
<p>Ok, si bien nos sirve, quizás queramos saber cómo funciona y por ahí crear el  nuestro propio, así que de eso va este post&#8230; comencemos.</p>
<p>Para generar imágenes en php nos valemos de la librería GD el cual está presente en la mayoría de los web hosting. En caso de utilizar localhost, instalando wamp para Windows ya nos viene incluido, y desde Linux bastaría con compilar php con la opción de gd, así como las librerías de libpng y libjpeg ( ./configure &#8211;with-gd=/&#8230;  &#8211;with-png-dir=/&#8230;  &#8211;with-jpeg-dir=&#8230; ).</p>
<p><span id="more-59"></span><br />
Básicamente lo que necesitamos es generar una cadena de texto con letras y números al azar, almacenarlo en la sesión y luego comprobar con lo que el usuario inserto en la caja del formulario, en caso de coincidir se salto el captcha, caso contrario regresamos con un mensaje de error y con una nueva imagen para intentar.</p>
<div class="codecolorer-container php vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:800px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <br />
<span style="color: #009933; font-style: italic;">/** Archivo captcha.php **/</span><br />
<br />
<span style="color: #666666; font-style: italic;">//iniciamos session</span><br />
<a href="http://www.php.net/session_start"><span style="color: #990000;">session_start</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">// &nbsp;cantidad de letras en nuestro captcha</span><br />
<span style="color: #000088;">$passLength</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">4</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">// &nbsp;tamaño para la caja de captcha</span><br />
<span style="color: #000088;">$width</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">200</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$height</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">80</span><span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;">//&nbsp; tamaño para el texto en pixceles</span><br />
<span style="color: #000088;">$textSize</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">30</span><span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;">// &nbsp;archivo ttf que vamos a utilizar </span><br />
<span style="color: #666666; font-style: italic;">// &nbsp;para escribir el texto en cuestion.</span><br />
<span style="color: #000088;">$fontFile</span> <span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;my_special_font.ttf&quot;</span><span style="color: #339933;">;</span><br />
<br />
<br />
<span style="color: #009933; font-style: italic;">/**<br />
&nbsp;* Genera un string con la cantidad de caracteres pasado.<br />
&nbsp;* @param &nbsp; int $size &nbsp; cantidad de caracteres.<br />
&nbsp;* @return&nbsp; $string &nbsp; &nbsp; mayusculas y numeros<br />
&nbsp;*/</span><br />
<span style="color: #000000; font-weight: bold;">function</span> randomCH<span style="color: #009900;">&#40;</span><span style="color: #000088;">$size</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$i</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$keyString</span><span style="color: #339933;">=</span><span style="color: #0000ff;">''</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span> <span style="color: #339933;">&lt;</span> <span style="color: #000088;">$size</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// AZ (65-90) 0-9 (48-57)</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$str</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/rand"><span style="color: #990000;">rand</span></a><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">48</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">90</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$str</span><span style="color: #339933;">&lt;</span><span style="color: #cc66cc;">65</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$str</span><span style="color: #339933;">&gt;</span><span style="color: #cc66cc;">57</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">continue</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$keyString</span> <span style="color: #339933;">.=</span> <a href="http://www.php.net/chr"><span style="color: #990000;">chr</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$str</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$i</span><span style="color: #339933;">++;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #000088;">$keyString</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #666666; font-style: italic;">//&nbsp; almacenamos un strign aleatorio</span><br />
<span style="color: #000088;">$cacheString</span><span style="color: #339933;">=</span>randomCH<span style="color: #009900;">&#40;</span><span style="color: #000088;">$passLength</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">//&nbsp; almacenamos en la session la frase de la imagen</span><br />
<span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'cache_string'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #000088;">$cacheString</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">//&nbsp; creamos una imagen utilizando las medidas setteadas</span><br />
<span style="color: #000088;">$imgCaptcha</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/imagecreatetruecolor"><span style="color: #990000;">imagecreatetruecolor</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$width</span><span style="color: #339933;">,</span> <span style="color: #000088;">$height</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">//&nbsp; definimos algunos colores </span><br />
<span style="color: #666666; font-style: italic;">//(esto debe hacerse luego de generar la imagen ya que debemos pasarle el recurso).</span><br />
<span style="color: #000088;">$blue</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/imagecolorallocate"><span style="color: #990000;">imagecolorallocate</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$imgCaptcha</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">80</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$black</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/imagecolorallocate"><span style="color: #990000;">imagecolorallocate</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$imgCaptcha</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$white</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/imagecolorallocate"><span style="color: #990000;">imagecolorallocate</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$imgCaptcha</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">255</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">255</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">255</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$grey</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/imagecolorallocate"><span style="color: #990000;">imagecolorallocate</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$imgCaptcha</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">100</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">100</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">100</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> &nbsp;<br />
<br />
<span style="color: #666666; font-style: italic;">// creamos un par de rectangulos para simular un borde azul</span><br />
<a href="http://www.php.net/imagefilledrectangle"><span style="color: #990000;">imagefilledrectangle</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$imgCaptcha</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">,</span> <span style="color: #000088;">$width</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">10</span><span style="color: #339933;">,</span> <span style="color: #000088;">$height</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">10</span><span style="color: #339933;">,</span> <span style="color: #000088;">$blue</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<a href="http://www.php.net/imagefilledrectangle"><span style="color: #990000;">imagefilledrectangle</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$imgCaptcha</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">20</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">20</span><span style="color: #339933;">,</span> <span style="color: #000088;">$width</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">20</span><span style="color: #339933;">,</span> <span style="color: #000088;">$height</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">20</span><span style="color: #339933;">,</span> <span style="color: #000088;">$black</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">// cada texto se inclinara algunos pixceles de forma aleatoria</span><br />
<span style="color: #000088;">$rotationLetter</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/rand"><span style="color: #990000;">rand</span></a><span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">10</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">// escribimos en las canvas utilizando como parametros nuestra imagen, el tamaño de texto</span><br />
<span style="color: #666666; font-style: italic;">// la rotacion aleatoria, posicion x, posicion y, color, archivo ttf y por ultimo el string</span><br />
<span style="color: #666666; font-style: italic;">// utilizamos 2 textos para simular una sombra en gris por encima de las letras blancas </span><br />
<a href="http://www.php.net/imagettftext"><span style="color: #990000;">imagettftext</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$imgCaptcha</span><span style="color: #339933;">,</span> <span style="color: #000088;">$textSize</span><span style="color: #339933;">,</span> <span style="color: #000088;">$rotationLetter</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">50</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">55</span><span style="color: #339933;">,</span> <span style="color: #000088;">$grey</span><span style="color: #339933;">,</span> <span style="color: #000088;">$fontFile</span><span style="color: #339933;">,</span> <span style="color: #000088;">$cacheString</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<a href="http://www.php.net/imagettftext"><span style="color: #990000;">imagettftext</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$imgCaptcha</span><span style="color: #339933;">,</span> <span style="color: #000088;">$textSize</span><span style="color: #339933;">,</span> <span style="color: #000088;">$rotationLetter</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">52</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">57</span><span style="color: #339933;">,</span> <span style="color: #000088;">$white</span><span style="color: #339933;">,</span> <span style="color: #000088;">$fontFile</span><span style="color: #339933;">,</span> <span style="color: #000088;">$cacheString</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<br />
<span style="color: #666666; font-style: italic;">//&nbsp; enviar cabezeras (para que no se cachee la imagen y el navegador siempre pida una nueva)</span><br />
<a href="http://www.php.net/header"><span style="color: #990000;">header</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Expires: Tue, 20 Jul 2001 17:00:00 GMT&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<a href="http://www.php.net/header"><span style="color: #990000;">header</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Last-Modified: &quot;</span> <span style="color: #339933;">.</span> <a href="http://www.php.net/gmdate"><span style="color: #990000;">gmdate</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;D, d M Y H:i:s&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot; GMT&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<a href="http://www.php.net/header"><span style="color: #990000;">header</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Cache-Control: no-store, no-cache, must-revalidate&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<a href="http://www.php.net/header"><span style="color: #990000;">header</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Cache-Control: post-check=0, pre-check=0&quot;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<a href="http://www.php.net/header"><span style="color: #990000;">header</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Pragma: no-cache&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">//&nbsp; enviar cabezera de imagen</span><br />
<a href="http://www.php.net/header"><span style="color: #990000;">header</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Content-Type: image/png&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">// utilizando imagejpeg o imagepng enviamos la imagen generada dinamicamente.</span><br />
<span style="color: #666666; font-style: italic;">//imagejpeg($imgCaptcha);</span><br />
<a href="http://www.php.net/imagepng"><span style="color: #990000;">imagepng</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$imgCaptcha</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">// luego liberamos recursos en el sistema.</span><br />
<a href="http://www.php.net/imagedestroy"><span style="color: #990000;">imagedestroy</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$imgCaptcha</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></td></tr></tbody></table></div>
<p>Bien, leyendo los comentarios en el código se puede ir siguiendo paso a paso.<br />
Ahora solo nos resta crear un formulario y llamar a la imagen como lo haríamos con una imagen estática desde HTML</p>
<div class="codecolorer-container php vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #009933; font-style: italic;">/** Archivo form.php **/</span><br />
<span style="color: #666666; font-style: italic;">// iniciamos session</span><br />
<a href="http://www.php.net/session_start"><span style="color: #990000;">session_start</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">// comprobamos si se envio el formulario y si lo que se envio coincide con el string guardado en session</span><br />
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><a href="http://www.php.net/isset"><span style="color: #990000;">isset</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;captcha&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$_REQUEST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;captcha&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'cache_string'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;los caracteres ingresados son correctos..&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;error al ingresar los caracteres.&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <a href="http://www.php.net/exit"><span style="color: #990000;">exit</span></a><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span><br />
&lt;p&gt;&lt;img src=&quot;captcha.php&quot;&gt;&lt;/p&gt;<br />
&lt;p&gt;&lt;form action=&quot;form.php&quot; method=&quot;POST&quot;&gt;<br />
&lt;input type=&quot;text&quot; name=&quot;captcha&quot; size=5 /&gt;<br />
&lt;input type=&quot;submit&quot; value=&quot;enviar&quot; /&gt;<br />
&lt;/form&gt;&lt;/p&gt;</div></td></tr></tbody></table></div>
<p>Bien, con eso ya estaríamos, y bastaría adaptarlo a nuestras necesidades.<br />
Como comentarios finales, hay que prestar atención a algún par de cosirijillas, como por ejemplo:<br />
1. debe iniciarse session en ambos archivos, (si el cliente no acepta cookies no nos servirá).</p>
<p>2. las cabeceras para evitar que la imagen sea cacheada por el navegador, y las cabeceras para decirle al navegador que es una imagen lo que debe esperar deben ser enviadas antes que nada, es decir que no nos vale generar ningún tipo de salida y luego intentar enviar cabeceras, esto produciría un error. </p>
<p>3. hay que revisar las rutas, pueden utilizar __FILE__ para referirse al path absoluto donde se encuentra en el servidor  y luego concatenar rutas para encontrar el archivo de fuente, imágenes que quieran utilizar para complicar un poco más el texto, etc. En este caso tenemos todos los archivos en la misma carpeta (captcha.php, form.php y font.ttf).</p>
<p>4. al final del código utilicé la función imagepng($imagen), y también valdría utilizar imagejpeg($imagen), con una diferencia en calidad, sobre todo si utilizan imágenes externas con degrado, y por supuesto una saca en pantalla una imagen png, mientras que la otra una jpg.</p>
<p>5. el tipo de fuente es Bauhaus (la pueden buscar en su directorio de fuentes) o utilizar cualquier otra, claro está que deberían de chechear que sea legible por humanos.</p>
<p>Resultado final:<br />
<img src="http://i45.tinypic.com/2qmdpqx.jpg" alt="resultado de captcha" /></p>
<p>Para mas información sobre como manipular imágenes en php, pueden consultar el siguiente enlace:</p>
<p><a href="http://php.net/manual/en/book.image.php">http://php.net/manual/en/book.image.php</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.informaticavirtual.us/2009/12/14/creando-un-sistema-simple-para-manejo-de-captcha-en-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
