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

<channel>
	<title>Maestros del Web &#187; Jorge Luis Martinez M</title>
	<atom:link href="http://www.maestrosdelweb.com/author/jorge-martinez/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.maestrosdelweb.com</link>
	<description>Un espacio para los entusiastas del web</description>
	<pubDate>Fri, 05 Sep 2008 14:24:12 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Registro y reconocimiento de usuarios con PHP</title>
		<link>http://www.maestrosdelweb.com/editorial/phpreusr/</link>
		<comments>http://www.maestrosdelweb.com/editorial/phpreusr/#comments</comments>
		<pubDate>Sat, 03 Aug 2002 00:00:00 +0000</pubDate>
		<dc:creator>Jorge Luis Martinez M</dc:creator>
		
		<category><![CDATA[Editorial]]></category>

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

		<guid isPermaLink="false"></guid>
		<description><![CDATA[En esta oportunidad crearemos un sistema de registro de usuarios utilizando a PHP.
¿En que consiste? y ¿para que sirve? muy sencillo, en algunas webs como
    por ejemplo esta, queremos interactuar con los usuarios, deseamos que estos
    puedan enviar scripts al sistema para ayudar a crecer la coleccion de scripts
 [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">En esta oportunidad crearemos un sistema de registro de usuarios utilizando a PHP.</span><span id="more-136"></span></p>
<p>¿En que consiste? y ¿para que sirve? muy sencillo, en algunas webs como<br />
    por ejemplo esta, queremos interactuar con los usuarios, deseamos que estos<br />
    puedan enviar scripts al sistema para ayudar a crecer la coleccion de scripts<br />
    que disponemos, pero deseamos llevar un control sobre los autores de los scripts<br />
    asi que no cualquiera puede enviar scripts, para hacerlo tienes que registrarte<br />
    y hacer el respectivo &quot;ingreso&quot; para que el sistema te reconosca<br />
    y te deje enviar scripts, archivos y articulos como este, de otra manera no<br />
    puedes hacer ninguna de estas acciones.</p>
<p>¿Pero como se logra esto?, se hace teniendo en una base de datos una tabla de usuarios(Podria<br />
  hacerse con archivos, aunque seria un poco inseguro) y por medio de archivos<br />
  PHP y manejo de sesiones(session) o por &quot;cukis&quot;(cookies).</p>
<p>En este articulo explicare como crear un sistema de registro y reconocimiento de usuarios teniendo<br />
  una tabla en una base de datos MySql y por medio de &quot;cukis&quot;(COOKIES)<br />
  para nuestra web de una manera sencilla.</p>
<p>A la hora de crear un sistema de registro de usuarios siempre pensamos en lo mismo: </p>
<p>registro + login<br />
  + reconocimiento</p>
<p>Queremos que los usuarios se registren dejando sus datos y puedan acceder a algunas zonas<br />
  de la pagina y sea reconocido por nuestra pagina(por ejemplo &quot;bienvenido<br />
  jlmm&quot; o &quot;bienvenido visitante&quot; en caso de no estar ingresado<br />
  (o registrado) en el sistema).</p>
<p>Muchos piensan en crear un sistema de usuarios por que les parece &quot;bonito&quot;, pero hay<br />
  pocos que realmente lo necesitan(lo digo por experiencia con dichas personas),<br />
  y cuando les haces las dos preguntas:</p>
<p>1- ¿que beneficios tienen los usuarios registrados con respecto a los demas? </p>
<p> 2- ¿que zonas de tu web quieres que sean de acceso restringido y PORQUE? </p>
<p>La mayoria no es capaz de responder la primera pregunta, y es que antes de aventurarnos a crear<br />
  un sistema de usuarios para nuestra web debemos de pensar si realmente vale<br />
  la pena, ya que las tematicas de la web y sus contenidos no siempre son adecuados<br />
  para tener un sistema de registro de usuarios.</p>
<p>Para ello respondemos las 2 preguntas, en el caso de misCODIGOS.com serian:</p>
<p>1- ¿que beneficios tienen los usuarios registrados con respecto a los demas?</p>
<p>  <em>R://Posibilidad de enviar scripts, articulos y archivos al sistema, al igual<br />
  que disponibilidad de un panel de control entre otros. </em></p>
<p>2- ¿que zonas de tu web quieres que sean de acceso restringido y PORQUE?</p>
<p>  <em>R://Quiero que solo los usuarios que esten registrados puedan enviar scripts/articulos/archivos,<br />
  ya que asi puedo llevar un mejor cotrol sobre los mismos y prevenir el envio<br />
  indiscriminado de scripts/articulos/archivos al sistema por parte de los usuarios.  </em></p>
<p >Ya tenemos nuestras razones para crear nuestro sistema de registro de usuarios, claro que pueden<br />
  haber muchas razones dependiendo del tipo de web, podrian ser por ejemplo para<br />
  que solo usuarios registrados puedan bajar software/musica/videos/etc, para<br />
  restringir el acceso a ciertas zonas de la web &quot;obligando&quot; al usuario<br />
  a registrarse para poder &quot;ver&quot; dicha zona, etc&#8230;</p>
<p >Siempre teniendo en cuenta que las razones sean validas y que no molesten al usuario,<br />
  ya que en mi caso hace algunos meses me encontre con una web de &quot;scripts&quot;<br />
  la cual para poder ver los &quot;scripts&quot; tenias que registrarte, obviamente<br />
  lo que hice fue salir de esa web y olvidarla (por ello no les puedo dar la direccion),<br />
  tenemos que tener muy en cuenta que zonas restringir a usuarios registrados<br />
  ya que el usuario en general prefiere la comodidad y en este caso que les comento<br />
  de webs con recursos y scripts para webmasters hay muchas (pero ninguna como<br />
  esta :-P) y hay que buscar siempre la comodidad de los usuarios.</p>
<p >Ahora a lo que vinimos, crearemos nuestro sistema de registro de usuario, lo primero que debemos pensar<br />
  es que datos debera introducir el usuario para registrarse, como siempre deberan<br />
  de haber aunque sea dos campos basicos:</p>
<ul>
<li>nick</li>
<li>password</li>
</ul>
<p>Lo mas común para identificar a los usuarios es por medio de nick/password,<br />
  aunque también podria ser email/password, para este articulo utilizare<br />
  el primero(nick/password).</p>
<p >Ya sabemos que nuestra tabla de &quot;usuarios&quot; tendra esos dos campos:</p>
<div class="codigo">
<pre>CREATE TABLE usuarios (
      id bigint(7) NOT NULL auto_increment,
      nick char(100) NOT NULL,
      password char(100) NOT NULL,
      KEY id (id))</pre>
</div>
<p >¿Pero<br />
  son suficientes?, tambien seria bueno tener el email de los usuarios en caso<br />
  de querer enviar informacion a los usuarios registrados y tener el nombre de<br />
  dichos usuarios para personalizar dichos emails o mensajes que le demos al usuario<br />
  en la pagina(ejemplo &quot;hola jorge luis&quot;), entonces nuestra tabla creceria<br />
  un poco: </p>
<div class="codigo">
<pre>CREATE TABLE usuarios (
      id bigint(7) NOT NULL auto_increment,
      nick char(100) NOT NULL,
      password char(100) NOT NULL,
      nombre char(255) default NULL,
      email char(100) default NULL,
      KEY id (id))
</pre>
</div>
<p >Listo, ya tenemos la estructura de nuestra tabla de usuarios, es pequeña y sencilla<br />
  pero para efectos prácticos y de aprendizaje es perfecta (eso depende<br />
  de ti, según lo que desees saber de tus usuarios). </p>
<p >Ahora viene lo sencillo,<br />
  crear el sistema de registro de usuarios, un formulario y una aplicacion que<br />
  agregue al nuevo usuario a la base de datos, para ello crearemos un formulario<br />
  del tipo: </p>
<div class="codigo">
<pre>FORM ACTION=&quot;registrar.php&quot; METHOD=&quot;post&quot;&gt;
      Nick : &lt;INPUT TYPE=&quot;text&quot; NAME=&quot;nick&quot; SIZE=20 MAXLENGTH=20&gt;
      &lt;BR&gt;
      Email: &lt;INPUT TYPE=&quot;text&quot; NAME=&quot;email&quot; SIZE=28 MAXLENGTH=100&gt;
      &lt;BR&gt;
      Password: &lt;INPUT TYPE=&quot;password&quot; NAME=&quot;password&quot;
      SIZE=28 MAXLENGTH=20&gt;
      &lt;BR&gt;
      Nombre: &lt;INPUT TYPE=&quot;text&quot; NAME=&quot;nombre&quot; SIZE=28
      MAXLENGTH=255&gt;
      &lt;BR&gt;
      &lt;INPUT TYPE=&quot;submit&quot; CLASS=&quot;boton&quot; VALUE=&quot;Registrar&quot;&gt;
      &lt;/FORM&gt;</pre>
</div>
<p >Y ahora necesitamos una aplicacion que lo procese (registrar.php), por motivos<br />
  practicos haremos algo sencillo sin demasiadas comprobaciones (dependera de<br />
  ti mejorarlo si quieres algo mas personalizado), primero el codigo luego la<br />
  explicacion: </p>
<div class="codigo">
<pre>&lt;?php
//AQUI CONEXION O include() DE ARCHIVO DE CONEXION CON BASE DE DATOS.
function quitar($mensaje)
{
$mensaje = str_replace(&quot;&lt;&quot;,&quot;&lt;&quot;,$mensaje);
$mensaje = str_replace(&quot;&gt;&quot;,&quot;&gt;&quot;,$mensaje);
$mensaje = str_replace(&quot;\'&quot;,&quot;&#39;&quot;,$mensaje);
$mensaje = str_replace('\&quot;',&quot;&quot;&quot;,$mensaje);
$mensaje = str_replace(&quot;\\\\&quot;,&quot;&#92;&quot;,$mensaje);
return $mensaje;
}

if(trim($HTTP_POST_VARS[&quot;nick&quot;]) != &quot;&quot; &amp;&amp; trim($HTTP_POST_VARS[&quot;email&quot;]) != &quot;&quot;)
{
$sql = &quot;SELECT id FROM usuarios WHERE nick=&#8217;&quot;.quitar($HTTP_POST_VARS[&quot;nick&quot;]).&quot;&#8217;&quot;;
$result = mysql_query($sql);
if($row = mysql_fetch_array($result))
{
echo &quot;Error, nick escogido por otro usuario&quot;;
}
else
{
$sql = &quot;INSERT INTO usuarios (nick,password,nombre,email) VALUES (&quot;;
$sql .= &quot;&#8217;&quot;.quitar($HTTP_POST_VARS[&quot;nick&quot;]).&quot;&#8217;&quot;;
$sql .= &quot;,&#8217;&quot;.quitar($HTTP_POST_VARS[&quot;password&quot;]).&quot;&#8217;&quot;;
$sql .= &quot;,&#8217;&quot;.quitar($HTTP_POST_VARS[&quot;nombre&quot;]).&quot;&#8217;&quot;;
$sql .= &quot;,&#8217;&quot;.quitar($HTTP_POST_VARS[&quot;email&quot;]).&quot;&#8217;&quot;;
$sql .= &quot;)&quot;;
mysql_query($sql);
echo &quot;Registro exitoso!&quot;;
}
mysql_free_result($result);
}
else
{
echo &quot;Debe llenar como minimo los campos de email y password&quot;;
}
mysql_close();
?&gt;</pre>
</div>
<p >Al principio no he echo conexion con la base de datos pero he puesto el comentario &quot;//AQUI CONEXION O include() DE ARCHIVO DE CONEXION CON BASE DE DATOS.&quot;, ya que la conexion depende de ti, si no sabes como hacer una conexion te aconsejo<br />
  buscarte un manual antes de estar queriendo hacer un sistema como este. </p>
<p >Vemos que he declarado una funcion, llamada quitar($mensaje), la cual recibe el parametro &quot;mensaje&quot;,<br />
  esta funcion se encargara de deshabilitar el codigo html(&quot;&lt;&quot; y<br />
  &quot;&gt;&quot;) al reemplazarlos por su respectivo codigo(&quot;&lt;&quot;<br />
  y &quot;&gt;&quot;), ademas de reemplazar el apostrofe(&#8217;) y las comillas dobles(&quot;)<br />
  por sus respectivos codigos HTML, esto para no tener conflictos con la instruccion<br />
  sql, y al final retorna la cadena con las nuevas modificaciones en caso de haberlas: </p>
<div class="codigo">
<pre>function quitar($mensaje)
      {
      $mensaje = str_replace(&quot;&lt;&quot;,&quot;&lt;&quot;,$mensaje);
      $mensaje = str_replace(&quot;&gt;&quot;,&quot;&gt;&quot;,$mensaje);
      $mensaje = str_replace(&quot;\'&quot;,&quot;&#39;&quot;,$mensaje);
      $mensaje = str_replace('\&quot;',&quot;&quot;&quot;,$mensaje);
      $mensaje = str_replace(&quot;\\\\&quot;,&quot;&#92;&quot;,$mensaje);
      return $mensaje;
      } </pre>
</div>
<p >Ahora<br />
  comprobaremos que los campos de nick y password que seran los &quot;requeridos&quot;<br />
  como minimo para completar el registro no esten vacios, para ello utilizamos<br />
  la funcion &quot;trim()&quot; la cual quita los espacios al comienzo y al final<br />
  de la cadena, por lo que en caso de ser una cadena vacia o con solo espacios<br />
  en blanco retornara &quot;&quot;, en caso de ser valido continuamos con el registro,<br />
  de lo contrario retornamos un mensaje de error: </p>
<div class="codigo">
<pre>if(trim($HTTP_POST_VARS[&quot;nick&quot;]) != &quot;&quot;
      &amp;&amp; trim($HTTP_POST_VARS[&quot;password&quot;]) != &quot;&quot;)</pre>
</div>
<p >Ahora suponiendo que las cadenas estaban correctas comprobaremos que el nick seleccionado<br />
  por el usuario no exista en la base de datos, para ello hacemos una instruccion<br />
  sql para pedirle a la base de datos que nos retorne la fila donde el nick sea<br />
  igual al nick introducido con el usuario(quitandole el apostrofe, html y demas<br />
  con la funcion quitar()):   </p>
<div class="codigo">
<pre>$sql = &quot;SELECT id FROM usuarios WHERE nick='&quot;.quitar($HTTP_POST_VARS[&quot;nick&quot;].&quot;&#8217;&quot;;
      $result = mysql_query($sql);</pre>
</div>
<p >En caso de existir dicho nick, osea que nos devuelve una fila: </p>
<div class="codigo">
<pre>if($row = mysql_fetch_array($result))</pre>
</div>
<p >Mostraremos un mensaje de error al usuario informandole del &quot;incidente&quot;, de lo<br />
  contrario continuaremos con el proceso de registro. </p>
<p >Ahora<br />
  lo que hacemos es simplemente una instruccion sql donde insertamos en la tabla<br />
  usuarios el nick, password, nombre y email introducidos por el usuario en el<br />
  formulario, a todos estos les quitamos el html, apostrofe y demas haciendo uso<br />
  de nuestra instruccion &quot;quitar()&quot;, y mostramos un mensaje de &quot;exito&quot; al usuario: </p>
<div class="codigo">
<pre>$sql = "INSERT INTO usuarios (nick,password,nombre,email)
      VALUES (";
      $sql .= "'".quitar($HTTP_POST_VARS["nick"]).&#8221;&#8216;&#8221;;
      $sql .= &#8220;,&#8217;&#8221;.quitar($HTTP_POST_VARS["password"]).&#8221;&#8216;&#8221;;
      $sql .= &#8220;,&#8217;&#8221;.quitar($HTTP_POST_VARS["nombre"]).&#8221;&#8216;&#8221;;
      $sql .= &#8220;,&#8217;&#8221;.quitar($HTTP_POST_VARS["email"]).&#8221;&#8216;&#8221;;
      $sql .= &#8220;)&#8221;;
      mysql_query($sql);
      echo &#8220;Registro exitoso!&#8221;;</pre>
</div>
<p><b>Nota:</b>Por efectos practicos hemos echo esto muy sencillo, podrian agregar más<br />
comprobaciones como la del email o manejo de errores mysql. </p>
<p>Tambien podria hacerse más seguro mediante el uso de la funcion de encriptacion<br />
md5() para el password, aunque se esta haciendo lo mas sencillo posible ya que<br />
la finalidad de este articulo es la de enseñar como reconocer a los usuarios,<br />
de ustedes dependen estos &quot;detalles&quot; a la hora de &quot;depurar&quot; este codigo.</p>
<p >Bien, listo ya tenemos la aplicacion de registro, ¿pero y ahora que?, que hago<br />
  con todos esos usuarios, ahora necesitamos que los usuarios ingresen y sean<br />
  &quot;reconocidos&quot; y como lo dije lo haremos por medio de cookies. </p>
<p >Crearemos un formulario HTML para que los usuarios introduscan su nick y password al igual que deberemos<br />
  de realizar una aplicacion ingresar.php que sera la encargada de procesar si<br />
  el usuario es valido y darle &quot;ingreso&quot; al sistema por medio de una<br />
  cookie. </p>
<p >Es recomendable tener este archivo en la carpeta raiz de nuestra web, el formulario html seria algo<br />
  asi: </p>
<div class="codigo">
<pre>&lt;FORM ACTION="ingresar.php" METHOD="post">
      Nick : &lt;INPUT TYPE="text" NAME="nick" SIZE=20 MAXLENGTH=20>
      &lt;BR>
      Password: &lt;INPUT TYPE="password" NAME="password"
      SIZE=28 MAXLENGTH=20>
      &lt;BR>
      &lt;INPUT TYPE="submit" CLASS="boton" VALUE="Ingresar">
      &lt;/FORM></pre>
</div>
<p >Y<br />
  ahora el codigo de nuestra aplicacion ingresar.php, luego la explicacion: </p>
<div class="codigo">
<pre>

&lt;?php 

//AQUI CONEXION O include() DE ARCHIVO DE CONEXION CON BASE DE DATOS.

function quitar($mensaje)
{
$mensaje = str_replace("&lt;","&lt;",$mensaje);
$mensaje = str_replace(">","&gt;",$mensaje);
$mensaje = str_replace("\'","&#39;",$mensaje);
$mensaje = str_replace('\"',"&quot;",$mensaje);
$mensaje = str_replace("\\\\","&#92",$mensaje);
return $mensaje;
}

if(trim($HTTP_POST_VARS["nick"]) != &#8220;&#8221; &#038;&#038; trim($HTTP_POST_VARS["password"]) != &#8220;&#8221;)
{
$nickN = quitar($HTTP_POST_VARS["nick"]);
$passN = quitar($HTTP_POST_VARS["password"]);

$result = mysql_query(&#8221;SELECT password FROM usuarios WHERE nick=&#8217;$nickN&#8217;&#8221;);
if($row = mysql_fetch_array($result))
{
if($row["password"] == $passN)
{
//90 dias dura la cookie
setcookie(&#8221;usNick&#8221;,$nickN,time()+7776000);
setcookie(&#8221;usPass&#8221;,$passN,time()+7776000);
?>
Ingreso exitoso, ahora sera dirigido a la pagina principal.
&lt;SCRIPT LANGUAGE=&#8221;javascript&#8221;>
location.href = &#8220;index.php&#8221;;
&lt;/SCRIPT>
&lt;?
}
else
{
echo &#8220;Password incorrecto&#8221;;
}
}
else
{
echo &#8220;Usuario no existente en la base de datos&#8221;;
}
mysql_free_result($result);
}
else
{
echo &#8220;Debe especificar un nick y password&#8221;;
}
mysql_close();
?></pre>
</div>
<p >Bien, arriba ya explique que debes de realizar la conexion y explique el funcionamiento<br />
  de la funcion quitar($mensaje), asi que saltemos hasta el primer &quot;if&quot;. </p>
<p >Lo primero que hacemos es comprobar que los campos de &quot;nick&quot; y &quot;password&quot; para<br />
  que no esten vacios, ya sabemos para que sirve trim() asi que no lo repetire: </p>
<div class="codigo">
<pre>if(trim($HTTP_POST_VARS["nick"]) != &#8220;&#8221;
      &#038;&#038; trim($HTTP_POST_VARS["password"]) != &#8220;&#8221;)</pre>
</div>
<p >Asi que continuamos suponiendo que todo este bien, ahora lo que hacemos es quitarle<br />
  el html, apostrofe comillas y demas al nick y password enviados por el usuario<br />
  para su comprobacion con la base de datos, para ello utilizamos la funcion quitar($mensaje)<br />
  que explicamos antes, y guardamos las nuevas cadenas en dos nuevas variables: </p>
<div class="codigo">
<pre>nickN = quitar($HTTP_POST_VARS["nick"]);
      $passN = quitar($HTTP_POST_VARS["password"]);</pre>
</div>
<p >Ahora ejecutamos una instruccion sql, en la cual le pedimos a la base de datos que<br />
  de la tabla usuarios nos devuelva la fila cuyo nick corresponda por el enviado<br />
  por el usuario: </p>
<div class="codigo">
<pre>$result = mysql_query("SELECT password FROM usuarios
      WHERE nick='$nickN'");</pre>
</div>
<p >Si devuelve una columna quiere decir que el nick SI existe en la base de datos,<br />
  de lo contrario devolvemos un mensaje de error: </p>
<div class="codigo">
<pre>if($row = mysql_fetch_array($result))
      {
      ...
      }
      else
      {
      echo "Usuario no existente en la base de datos";
      }</pre>
</div>
<p >Ahora continuamos con el proceso suponiendo que el usuario exista en la base de datos<br />
  ahora debemos comprobar que el password sea correcto, para ello hacemos una<br />
  simple comparacion, si es correcto continuamos de lo contrario mostramos el<br />
  mensaje de password incorrecto: </p>
<div class="codigo">
<pre>if($row["password"] == $passN)
      {
      &#8230;
      }
      else
      {
      echo &#8220;Password incorrecto&#8221;;
      }</pre>
</div>
<p >Ahora suponiendo que el password es correcto continuamos y lo proximo a hacer es establecer<br />
  las cookies de nick y password (Las cuales nombramos &quot;usNick&quot;/&quot;usPass&quot; y contienen el nick y password respectivamente) en la maquina del usuario, informamos<br />
  que se ha realizado correctamente el login y lo enviamos a la pagina principal,<br />
  una vez mas recalco que estamos haciendo esto lo mas sencillo posible, de ti<br />
  depende personalizar y mejorar los mensajes : </p>
<div class="codigo">
<pre>setcookie("usNick",$nickN,time()+7776000);
      setcookie("usPass",$passN,time()+7776000);
      ?>
      &lt;SCRIPT LANGUAGE="javascript">
      alert("Ingreso exitoso");
      location.href = "index.php";
      &lt;/SCRIPT>
      &lt;?</pre>
</div>
<p >Listo, el usuario ya tiene las cookies en su sistema, ¿pero ahora que?, como<br />
  hacemos para comprobar en las paginas que queramos si el login es correcto,<br />
  osea que el usuario posee las cookies y son validas?. </p>
<p >Para ello crearemos un ultimo archivo, lo llamaremos login.php, este se encargara de leer las cookies<br />
  y decirnos si el usuario es un usuario registrado y que ha echo el respectivo &quot;ingreso&quot; al sistema, el contenido de dicho archivo seria el siguiente: </p>
<div class="codigo">
<pre>&lt;?php
      $loginCorrecto = false;
      $idUsuarioL;
      $nickUsuarioL;
      $emailUsuarioL;
      $nombreUsuarioL; 

if(isset($HTTP_COOKIE_VARS["usNick"]) &#038;&#038; isset($HTTP_COOKIE_VARS["usPass"]))
{
$result = mysql_query(&#8221;SELECT * FROM usuarios WHERE nick=&#8217;&#8221;.$HTTP_COOKIE_VARS["usNick"].&#8221;&#8216; AND password=&#8217;&#8221;.$HTTP_COOKIE_VARS["usPass"].&#8221;&#8216;&#8221;);

if($row = mysql_fetch_array($result))
{
setcookie(&#8221;usNick&#8221;,$HTTP_COOKIE_VARS["usNick"],time()+7776000);
setcookie(&#8221;usPass&#8221;,$HTTP_COOKIE_VARS["usPass"],time()+7776000);
$loginCorrecto = true;
$idUsuarioL = $row["id"];
$nickUsuarioL = $row["nick"];
$emailUsuarioL = $row["email"];
$nombreUsuarioL = $row["nombre"];
}
else
{
//Destruimos las cookies.
setcookie(&#8221;usNick&#8221;,&#8221;x&#8221;,time()-3600);
setcookie(&#8221;usPass&#8221;,&#8221;x&#8221;,time()-3600);
}
mysql_free_result($result);
}
?></pre>
</div>
<p >Lo primero que hacemos es declarar unas variables que utilizaremos para guardar<br />
  los datos del usuario en caso de tener las cookies en su sistema y de estas<br />
  ser correctas: </p>
<div class="codigo">
<pre>$loginCorrecto = false;
      $idUsuarioL;
      $nickUsuarioL;
      $emailUsuarioL;
      $nombreUsuarioL;</pre>
</div>
<p >Hay una variable boleana que tenemos que mirar de cerca y es la de $loginCorrecto<br />
  ya que esta sera la que utilizaremos para comprobar el login en nuestros archivos,<br />
  mas adelante veremos como. </p>
<p >Seguidamente lo que hacemos es comprobar que las cookies existan, si no existen pues no hay problema<br />
  simplemente no hay &quot;ingreso&quot; : </p>
<div class="codigo">
<pre>if(isset($HTTP_COOKIE_VARS["usNick"]) &#038;&#038;
      isset($HTTP_COOKIE_VARS["usPass"]))</pre>
</div>
<p >Ahora lo que hacemos es una sentencia sql, en la cual le pedimos a la base de datos<br />
  que nos devuelva la fila donde el nick y password correspondan al nick y password<br />
  guardado en las cookies: </p>
<div class="codigo">
<pre>$result = mysql_query("SELECT * FROM usuarios WHERE
      nick='".$HTTP_COOKIE_VARS["usNick"].&#8221;&#8216; AND password=&#8217;&#8221;.$HTTP_COOKIE_VARS["usPass"].&#8221;&#8216;&#8221;);</pre>
</div>
<p >Si ese nick y password corresponden a una fila en la base de datos esto quiere<br />
  decir que son correctos de lo contrario la informacion de las cookies esta mal<br />
  y debemos destruirlas: </p>
<div class="codigo">
<pre>if($row = mysql_fetch_array($result))
      {
      ...
      }
      else
      {
      //Destruimos las cookies.
      setcookie("usNick","x",time()-3600);
      setcookie("usPass","x",time()-3600);
      }</pre>
</div>
<p >Si la informacion es correcta procedemos con el ingreso, establecemos de nuevo<br />
  las cookies con lo que se actualiza el tiempo de destruccion a otros noventa<br />
  dias apartir de ahora: </p>
<div class="codigo">
<pre>setcookie("usNick",$HTTP_COOKIE_VARS["usNick"],time()+7776000);
      setcookie(&#8221;usPass&#8221;,$HTTP_COOKIE_VARS["usPass"],time()+7776000);</pre>
</div>
<p >Seguido de esto establecemos la variable $loginCorrecto a &quot;true&quot;, y las otras<br />
  variables las llenamos con la informacion del usuario: </p>
<div class="codigo">
<pre>$loginCorrecto = true;
      $idUsuarioL = $row["id"];
      $nickUsuarioL = $row["nick"];
      $emailUsuarioL = $row["email"];
      $nombreUsuarioL = $row["nombre"];</pre>
</div>
<p >Listo ya tenemos nuestro archivo &quot;login.php&quot;, ahora ¿como lo utilizamos?,<br />
  bien supongamos que queremos en nuestro &quot;index.php&quot; darle la bienvenida<br />
  al usuario en caso de estar ingresado en el sistema deseamos saludarlo por su<br />
  nick o nombre en caso contrario lo saludaremos como visitante, para ello tendriamos<br />
  que incluir el archivo &quot;login.php&quot; al comienzo de nuestro archivo<br />
  &quot;index.php&quot; asi: </p>
<p><b>Nota:</b>Antes de incluir el &quot;login.php&quot; debe recordar realizar la conexion con la base de datos,<br />
de lo contrario obtendra errores.</p>
<div class="codigo">
<pre>&lt;?php
      //AQUI CONEXION O include() DE ARCHIVO DE CONEXION CON BASE DE DATOS.
include("login.php");
...</pre>
</div>
<p >Con eso el &quot;login.php&quot; se encargara de realizar las acciones que vimos<br />
  arriba, ahora en nuestro &quot;index.php&quot; donde queramos saludar al visitante<br />
  ponemos lo siguiente: </p>
<div class="codigo">
<pre>... if($loginCorrecto)
{
echo "Estas identificado en el sistema como ".$nickUsuarioL;
}
else
{
echo "Bienvenido visitante, el sistema no te ha reconocido";
}
...</pre>
</div>
<p > Como ven, hicimos uso de la variable $loginCorrecto la cual sera &quot;true&quot;<br />
  en caso de que el usuario fuera reconocido por el sistema, de lo contrario sera<br />
  &quot;false&quot;. </p>
<p >Y asi podemos usarlo en muchas areas, supongamos que tenemos una seccion donde solo pueden accesar<br />
  los usuarios registrados, la llamaremos &quot;restringida.php&quot;, entonces lo que hariamos para prevenir que usuarios no registrados vean el contenido seria algo asi: </p>
<div class="codigo">
<pre>&lt;?php
      //AQUI CONEXION O include() DE ARCHIVO DE CONEXION CON BASE DE DATOS. 

include("login.php");

if($loginCorrecto)
{
echo "Aqui el contenido solo para usuarios registrados";
}
else
{
echo "El sistema no lo ha identificado, solo los usuarios registrados tienen acceso a esta area";
}
?></pre>
</div>
<p >Eso es todo, espero haya quedado claro. PD: Sobre el proceso de &quot;logout&quot;<br />
  o &quot;salir&quot; no lo explico ya que es algo muy sencillo, simplemente se<br />
  &quot;borran&quot; las cookies. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/phpreusr/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Creacion de un sistema de comentarios en PHP</title>
		<link>http://www.maestrosdelweb.com/editorial/comphp/</link>
		<comments>http://www.maestrosdelweb.com/editorial/comphp/#comments</comments>
		<pubDate>Tue, 18 Jun 2002 00:00:00 +0000</pubDate>
		<dc:creator>Jorge Luis Martinez M</dc:creator>
		
		<category><![CDATA[Editorial]]></category>

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

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Enseñaré como crear un sistema de comentarios, técnica que normalmente se utiliza para que los usuarios comenten sobre noticias de tu web, pero tambien se puede usar para otros casos.
Para
  el correcto aprendizaje supondremos una &#8220;situaci&#243;n&#8221;, supongamos que tienes
  un sistema de noticias, en el cual los usuarios pueden ver las noticias de [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">Enseñaré como crear un sistema de comentarios, técnica que normalmente se utiliza para que los usuarios comenten sobre noticias de tu web, pero tambien se puede usar para otros casos.</span><span id="more-125"></span></p>
<p>Para<br />
  el correcto aprendizaje supondremos una &#8220;situaci&oacute;n&#8221;, supongamos que tienes<br />
  un sistema de noticias, en el cual los usuarios pueden ver las noticias de la<br />
  forma <b>noticia.php?id=1</b>, entonces queremos que los usuarios dejen sus<br />
  comentarios sobre cada noticia. </p>
<p><b>Nota:  </b>La explicaci&oacute;n la hago suponiendo un conocimiento b&aacute;sico de<br />
  PHP y interacci&oacute;n con bases de datos (en este caso MySql) por parte del<br />
  lector.</p>
<p> Lo primero que tenemos que pensar es ¿que datos del usuario necesitamos?, bien,<br />
  supongamos que queremos que el usuario deje su comentario junto con un nick<br />
  (nombre, sobrenombre, alias), para ello crear&iacute;amos una tabla llamada <b>comentarios</b> con los campos: </p>
<p>id<br />
- Tipo Entero </p>
<p> nick - Tipo Caracter </p>
<p> comentario - Tipo Caracter </p>
<p>La<br />
  instrucci&oacute;n para su creaci&oacute;n seria:</p>
<div class="codigo">
<pre>CREATE TABLE comentarios (
id bigint(7) default NULL,
nick char(20) default NULL,
comentario char(250) default NULL,
KEY id (id) )</pre>
</div>
<p>Bien,<br />
  pero aqu&iacute; viene el problema que se le presenta a muchas personas y es<br />
  ¿como reconocer que comentarios corresponden a una noticia determinada?, aunque<br />
  para algunos parezca sencillo les digo (por experiencia con esas personas) que<br />
  puede ser un dilema para muchos que no lo &#8220;ven&#8221;. </p>
<p>Muchos<br />
  piensan que se hace desde la noticia, reconociendo los comentarios, pero es<br />
  al contrario, son los comentarios quienes tienen que saber a que noticia pertenecen,<br />
  para ello necesitamos otro campo en nuestra tabla de comentarios: </p>
<div class="codigo">
<pre>CREATE TABLE comentarios (
id bigint(7) default NULL,
id_noticia bigint(7) default NULL,
nick char(20) default NULL,
comentario char(250) default NULL,
KEY id (id) )</pre>
</div>
<p>El<br />
  campo de tipo entero <b>id_noticia</b>, el cual<br />
  contendr&aacute; el <b>id</b> de la noticia a que<br />
  corresponde.  </p>
<p><b>Nota:<br />
  </b>Recordemos que en este caso suponemos que las noticias se llaman de la forma<br />
  <b>noticia.php?id=234</b>, donde el id corresponde<br />
  al id de la noticia en la base de datos.  </p>
<p> Ahora debemos mostrar los comentarios, y tener un formulario de env&iacute;o<br />
  de comentarios en mi <b>noticia.php</b> y una aplicaci&oacute;n<br />
  que lo procese. </p>
<p><b>Nota:<br />
  </b>Solo voy a poner el c&oacute;digo que muestra los comentarios y el formulario<br />
  de env&iacute;o, ya que de eso es que trata este tutorial y se supone que ya<br />
  tienes tu sistema de noticias (o en lo que sea que lo vayas a implementar).  </p>
<p> Este<br />
    es el c&oacute;digo que muestra los comentarios de la noticia actual (despu&eacute;s<br />
    el c&oacute;digo para enviar los comentarios), recordemos que obtenemos el <b>id</b> de la noticia que lo hemos pasado por<br />
    medio de <b>noticia.php?id=123</b>, primero el<br />
    c&oacute;digo, luego la explicaci&oacute;n del c&oacute;digo: </p>
<div class="codigo">
<pre>&lt;CENTER>
&lt;TABLE CELLSPACING=1 CELLPADDING=1 WIDTH=300 BORDER=0 STYLE="border:1px solid black">
&lt;TR>
&lt;TD BGCOLOR="#FAFAFA">
&lt;CENTER>
&lt;SPAN STYLE="font-size:11px;font-family:Tahoma;color:black;font-weight:bold"> .Comentarios De Los Usuarios.
&lt;/SPAN>
&lt;/CENTER>
&lt;/TD>
&lt;/TR>

&lt;TR>
&lt;TD HEIGHT=1 BGCOLOR=black>
&lt;/TD>
&lt;/TR>

&lt;TR>
&lt;TD BGCOLOR="#FEFEFE">
&lt;SPAN STYLE="font-size:11px;font-family:Tahoma;color:black;">

&lt;?
$resultComen = mysql_query("SELECT * FROM comentarios WHERE id_noticia='$id' ORDER BY id ASC");
while($rowComen = mysql_fetch_array($resultComen))
{
?> ;
&lt; FONT COLOR=RED>
&lt; B>&lt;? echo $rowComen["nick"]; ?>&lt;/B>
&lt; /FONT>
:
&lt; ? echo $rowComen["comentario"]; ?>
&lt; BR>
&lt; ?
}
mysql_free_result($resultComen);
?>

&lt;/SPAN>
&lt;/TD>
&lt;/TR>
&lt;/TABLE>
&lt;/CENTER></pre>
</div>
<p>Aqu&iacute; lo importante es la lectura de nuestros comentarios, lo que debemos hacer primero<br />
  que todo es obtener los comentarios, pero solo queremos aquellos que correspondan<br />
  a la noticia actual, para ello pedimos aquellos cuyo campo <b>id_noticia</b><br />
  corresponda con el <b>id</b> de la noticia actual<br />
  (noticia.php?<b>id</b>=456): </p>
<div class="codigo">
<pre>$resultComen = mysql_query("SELECT * FROM comentarios
WHERE id_noticia='$id' ORDER BY id ASC");</pre>
</div>
<p>Y<br />
  el resto es sencillo, simplemente imprimir en pantalla cada comentario, con<br />
  su respectivo nick:</p>
<div class="codigo">
<pre>while($rowComen = mysql_fetch_array($resultComen))
{
?>
&lt;FONT COLOR=RED>
&lt;B>&lt;? echo $rowComen["nick"]; ?>&lt;/B>
&lt;/FONT>
:
&lt;? echo $rowComen["comentario"]; ?>
&lt;BR>
&lt;?
} </pre>
</div>
<p>Ahora<br />
  necesitamos una aplicaci&oacute;n que envi&eacute; los comentarios a la tabla<br />
  y un formulario de env&iacute;o, el cual en este caso estar&aacute; ubicado<br />
  en la pagina de la noticia (noticia.php), y pasara por medio de un campo oculto<br />
  el <b>id</b> de la noticia a la aplicaci&oacute;n<br />
  que se encargara de enviar el comentario.  </p>
<p>Primero<br />
  el c&oacute;digo del formulario, utilizaremos un campo de tipo <b>HIDDEN</b> para pasar el id de la noticia a la aplicaci&oacute;n que procesa el formulario<br />
  (despues el c&oacute;digo de dicha aplicaci&oacute;n, llamaremos a nuestra aplicaci&oacute;n<br />
  nuevoComentario.php), este c&oacute;digo debemos<br />
  ponerlo en <b>noticia.php</b>: </p>
<div class="codigo">
<pre>&lt;CENTER>
&lt;SPAN STYLE="font-size:11px;font-family:Tahoma;color:black;font-weight:bold">
.Enviar Comentario.
&lt;/SPAN>
&lt;/CENTER>
&lt;p>
&lt;FORM NAME="miFormu" ACTION="nuevoComentario.php"
METHOD="post">
&lt;INPUT TYPE="hidden" NAME="id" VALUE="&lt;?
echo $id; ?>">
Nick : &lt;INPUT TYPE="text" NAME="nick" SIZE=20 MAXLENGTH=20>
&lt;BR>
Comentario: &lt;INPUT TYPE="text" NAME="comentario"
SIZE=28 MAXLENGTH=250>
&lt;BR>
&lt;INPUT TYPE="submit" CLASS="boton" VALUE="Enviar
Comentario">
&lt;/FORM></pre>
</div>
<p>Aqu&iacute; cabe destacar el campo:
</p>
<div class="codigo">
<pre>&lt;INPUT TYPE="hidden" NAME="id"
VALUE="&lt;? echo $id; ?>"></pre>
</div>
<p>El<br />
  cual recibe como valor el id de la noticia, ahora necesitamos la aplicaci&oacute;n <b>nuevoComentario.php</b> que recibe el <b>id</b><br />
  que corresponde al id de la noticia y el <b>nick</b><br />
  y <b>comentario</b> correspondientes, solo pondr&eacute;<br />
  el c&oacute;digo de la parte que lee los datos y introduce el comentario en<br />
  la base de datos, de ti depende la conexi&oacute;n con la base de datos, dicho<br />
  c&oacute;digo es el siguiente:</p>
<div class="codigo">
<pre>if(isset($HTTP_POST_VARS["id"]) &#038;&#038; isset($HTTP_POST_VARS["nick"]) &#038;&#038; isset($HTTP_POST_VARS["comentario"])) {
if($HTTP_POST_VARS["comentario"] != &#8220;&#8221;)
{
if($HTTP_POST_VARS["nick"] == &#8220;&#8221;)
{
$nickNuevo = &#8220;anonimo&#8221;;
}
else
{
$nickNuevo = $HTTP_POST_VARS["nick"];
}
$resultCom2 = mysql_query(&#8221;SELECT id FROM comentarios ORDER BY id DESC LIMIT 0,1&#8243;);
$rowCom2 = mysql_fetch_array($resultCom2);
$con = $rowCom2["id"];
mysql_free_result($resultCom2);

$con++;
$idNoticia = $HTTP_POST_VARS["id"];
$comentarioNoticia = $HTTP_POST_VARS["comentario"];

mysql_query(&#8221;INSERT INTO comentarios VALUES
(&#8217;$con&#8217;,'$idNoticia&#8217;,'$nickNuevo&#8217;,'$comentarioNo ticia&#8217;)&#8221;);

echo &#8220;Comentario Enviado Con Exito.&lt;BR>Espere Unos Segundos&#8230;&lt;SCRIPT LANGUAGE=&#8221;javascript&#8221;>window.location.href = &#8220;&#8221;.getenv(&#8217;HTTP_REFERER&#8217;).&#8221;";&lt;/SCRIPT>&#8221;; }
else
{
echo &#8220;Debe Introducir Un Comentario.&#8221;;
}
}</pre>
</div>
<p>Creo<br />
  que no hay mucho que decir sobre este script, como ya dije estoy suponiendo<br />
  un conocimiento b&aacute;sico de php y interacci&oacute;n con bases de datos<br />
  por parte del lector.  </p>
<p><strong><em>Suerte<br />
  y hasta el pr&oacute;ximo tutorial! </em></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/comphp/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Creación de Thumbnails de imágenes con PHP</title>
		<link>http://www.maestrosdelweb.com/editorial/thumbphp/</link>
		<comments>http://www.maestrosdelweb.com/editorial/thumbphp/#comments</comments>
		<pubDate>Tue, 04 Jun 2002 00:00:00 +0000</pubDate>
		<dc:creator>Jorge Luis Martinez M</dc:creator>
		
		<category><![CDATA[Editorial]]></category>

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

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Para los que no estan familiarizados con el termino esto se refiere a previsualizaciones de menor tamaño de una imagen original lo cual se utiliza mucho para galerias, mostrando una copia de la imagen original pero de menor tamaño tanto en pixeles co
 Para el ejemplo utilizare una como formato de imagen
    [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">Para los que no estan familiarizados con el termino esto se refiere a previsualizaciones de menor tamaño de una imagen original lo cual se utiliza mucho para galerias, mostrando una copia de la imagen original pero de menor tamaño tanto en pixeles co</span><span id="more-117"></span></p>
<p> Para el ejemplo utilizare una como formato de imagen<br />
    el GIF, primero presentare el código y luego la explicación línea<br />
  por línea al igual que como hacerlo con diferentes formatos de imagen.  </p>
<p>
  Supongo que el nombre del archivo es <b>imagen.php</b></p>
<div class="codigo">
<pre>&lt;?php 

      //Una Creacion De Jorge Luis Martinez M 

      //http://misCodigos.jlmnetwork.com/ 

/*Este Archivo Recibe Los Parametros $ruta, Que Es La Ruta Interna De La Imagen En El Servidor, Y Los Parametros $ancho y $alto Que Se Refiere Al Alto Y Ancho De La Previsualizacion.*/

$fuente = @imagecreatefromgif($ruta);
$imgAncho = imagesx ($fuente);
$imgAlto =imagesy($fuente);
$imagen = ImageCreate($ancho,$alto);

ImageCopyResized($imagen,$fuente,0,0,0,0,$ancho,$alto,$imgAncho,$imgAlto);

Header("Content-type: image/gif");
imageGif($imagen);

?> </pre>
</div>
<p><b>Nota: </b> La explicación la hago suponiendo<br />
  un conocimiento básico de php por parte del lector.</p>
<p>Lo primero<br />
    es recordar que este archivo recibe los parámetros $ruta<br />
    que es la ruta interna de la imagen en el servidor, entonces si el fichero<br />
    imagen.php se encuentra en:  </p>
<p>
  http://www.servidor.com/cuenta/imagen.php </p>
<p>
  Y la imagen, en este caso supondremos el nombre &#8220;01.gif&#8221;,<br />
  se encuentra en:  </p>
<p>
  http://www.servidor.com/cuenta/galeria/01.gif </p>
<p> A imagen.php sólo le pasaremos <b>galeria/01.gif</b><br />
  como valor de ruta:  </p>
<p>
  http://www.servidor.com/cuenta/imagen.php?<b>ruta=galeria/01.gif</b> </p>
<p> Pero esto no es todo, recordemos que recibe otros dos parámetros, los<br />
  cuales son <b>alto</b> y <b>ancho</b>,<br />
  estos no se refieren al alto y ancho de la imagen original, se refieren al alto<br />
  y ancho que queremos la previsualización (Thumbnail), entonces si queremos<br />
  que nos devuelva la imagen <b>01.gif</b>, ubicada<br />
  en el directorio <b>galeria</b> y cuyo tamaño original<br />
  es de 400 píxeles de anchura y 300 píxeles de altura pero queremos<br />
  la previsualización de 200 píxeles de anchura y 150 píxeles<br />
  de altura tendriamos que llamarla de esta manera:  </p>
<p> http://www.servidor.com/cuenta/imagen.php?ruta=galeria/01.gif&#038;<b>ancho=200</b>&#038;<b>alto=150</b> </p>
<p><b>Nota:<br />
  </b>Obviamente si lo llamamos para presentarlo<br />
  como imagen dentro de un archivo al usuario(.html, .php, etc), lo llamamos mediante<br />
  el tag IMG: </p>
<div class="codigo">
<pre>&lt;IMG SRC="http://www.servidor.com/cuenta/imagen.php?ruta=galeria/01.gif&amp;ancho=200&amp;alto=150"&gt;</pre>
</div>
<p>Ahora que<br />
  ya sabemos como llamar a la imagen, vamos a ver como se hace la previsualización<br />
  (Thumbnail), como es que se crea desde una imagen más grande una imagen<br />
  más pequeña tanto en píxeles como en tamaño para su presentación<br />
  al usuario.  </p>
<p>
  Primero creamos una copia de la imagen desde archivo, la igualamos a $fuente,<br />
  ya que allí quedará un identificador de tipo ENTERO<br />
  (INT) para dirigirnos a la imagen creada, esto es necesario ya que será<br />
  de esta imagen que haremos la previsualización (Thumbnail).  </p>
<p>
  $fuente = @imagecreatefromgif($ruta); </p>
<p>  <b>Nota: </b> Recuerde<br />
  que el @imagecreatefromgif() es para imagenes gif,<br />
  si quiere crear jpeg o png solamente cambie el <b>gif</b>: </p>
<p>
   @imagecreatefromjpeg($ruta) ó @imagecreatefrompng($ruta)  </p>
<p>
    Ahora obtendremos la anchura y altura de la imagen original, esto es necesario<br />
    para poder hacer la copia de la imagen, para ello utilizamos las funciones<br />
          <b>imageSX</b> y <b>imageSY</b>,<br />
    que reciben como parametro un identificador de imagen (en este caso $fuente,<br />
    que es el identificador de la imagen original) y devuelven la anchura y altura<br />
    de la imagen respectivamente. </p>
<div class="codigo">
<pre>$imgAncho = imagesx ($fuente); 

        $imgAlto =imagesy($fuente);
 </pre>
</div>
<p> Ahora<br />
  creamos una imagen nueva en blanco con la anchura y altura que queremos para<br />
  la previsualización (Thumbnail) y que será la que se le devuelva al usuario<br />
  cuando se le llame, ya sea directamente en el browser o por medio de la etiqueta<br />
  IMG de html.</p>
<div class="codigo">
<pre>$imagen = ImageCreate($ancho,$alto);
</pre>
</div>
<p> Ahora<br />
  lo más importante, copiaremos la imagen original a la imagen nueva, lo<br />
  cual hará que al tener un menor tamaño (la imagen nueva), la copia de<br />
  que hacemos de la original se ajustara al tamaño de esta.  </p>
<p>
  Utilizamos la funcion ImageCopyResized() la cual<br />
  sirve para copiar &#8220;partes&#8221; de una imagen a otra por medio de coordenadas, pero<br />
  en nuestro caso no necesitamos un pedazo, necesitamos copiar toda la imagen<br />
  en todo el espacio de la nueva imagen, por ello damos las coordenadas totales<br />
  de las imágenes. </p>
<p>
  Esto puede sonar un poco confuso, por eso es mejor que mires la documentacion<br />
  oficial en <a href="http://www.php.net/">http://www.php.net/</a> para información sobre los parametros que recibe esta función.</p>
<div class="codigo">
<pre>ImageCopyResized($imagen,$fuente,0,0,0,0,$ancho,$alto,$imgAncho,$imgAlto);</pre>
</div>
<p>Listo,<br />
  ya tenemos nuestra imagen, ahora debemos indicarle al navegador que vamos a<br />
  devolver una imagen de tipo gif, para ello enviamos la cabecera diciendo el<br />
  tipo de contenido que enviaremos al navegador. </p>
<div class="codigo">
<pre>Header("Content-type: image/gif");</pre>
</div>
<p><b>Nota:</b> Recuerde, si el formato es jpeg o png solamente cambie el <b>gif</b>: </p>
<p> image/jpeg ó image/png </p>
<p>Ahora<br />
  devolvemos la imagen directamente al browser(navegador) del usuario.
</p>
<p>
  imageGif($imagen);  </p>
<p>  <b>Nota: </b> Recuerde, si el formato es jpeg o<br />
  png solamente cambie el <b>gif</b>: imageJpeg($imagen)<br />
  o imagePng($imagen)  </p>
<p>
    Bien espero haya quedado claro,<br />
    pero vamos a ver otro aspecto, que tal si no queriamos devolver la imagen,<br />
    lo que queriamos era guardar la nueva imagen (Thumbnail) en el servidor, para<br />
    su uso posterior?&#8230; </p>
<p>Al ponerle<br />
    un segundo parametro al imageGif($imagen,&#8221;imagenPequena.gif&#8221;),<br />
    Lo lograremos, en este caso guardaria la imagen que acabamos de crear en el<br />
    servidor, especificamente en la misma carpeta con el nombre de &#8220;imagenPequena.gif&#8221;. </p>
<p>Esto puede<br />
    ser muy util, ya que si queremos crear thumbnails de todas las imagenes en<br />
    un directorio, podemos hacer un loop que lea los archivos del directorio,<br />
    y repita el proceso anterior(de crear imagen en blanco y copiar) y guarde<br />
    las nuevas imagenes para su uso posterior, realmente es una herramienta con<br />
    muchos usos. </p>
<p><b>Nota: </b> Cabe recordar que su servidor tiene<br />
  que tener soporte para manipular imágenes, según el tipo que desee<br />
  utilizar, en caso de no tenerlo el servidor le dará un mensaje de error<br />
  como <strong>&#8220;Jpeg is no support&#8230;&#8221;</strong> dependiendo<br />
  del formato de imagen.</p>
<p>    <strong><em>Suerte y hasta el próximo tutorial! </em></strong> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/thumbphp/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Upload De Archivos Con PHP</title>
		<link>http://www.maestrosdelweb.com/editorial/upphp/</link>
		<comments>http://www.maestrosdelweb.com/editorial/upphp/#comments</comments>
		<pubDate>Sun, 26 May 2002 00:00:00 +0000</pubDate>
		<dc:creator>Jorge Luis Martinez M</dc:creator>
		
		<category><![CDATA[Editorial]]></category>

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

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Aquí enseñaré cómo subir archivos al servidor por medio de un script de php, proceso es muy simple y sencillo.
Para
  el correcto aprendizaje utilizaremos un ejemplo, en &#233;l que subiremos
  un archivo. Este solo puede ser de extencion .zip y ocupar menos de 30 kb, definiendo
  as&#237; las opciones del upload con [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">Aquí enseñaré cómo subir archivos al servidor por medio de un script de php, proceso es muy simple y sencillo.</span><span id="more-110"></span></p>
<p><img src="/images/editorial/upphp_1.jpg" alt="Up" width="57" height="71" class="lateral"/>Para<br />
  el correcto aprendizaje utilizaremos un ejemplo, en &eacute;l que subiremos<br />
  un archivo. Este solo puede ser de extencion .zip y ocupar menos de 30 kb, definiendo<br />
  as&iacute; las opciones del upload con php. </p>
<p>Primero empezaremos con el formulario html, encargado de enviar el archivo al servidor.
</p>
<div class="codigo">
<pre>&lt;form action=&quot;subir.php&quot; method=&quot;post&quot;
      name=&quot;miformu&quot; enctype=&quot;multipart/form-data&quot;&gt;
      &lt;input name=&quot;archivo&quot; type=&quot;file&quot;&gt;
      &lt;/form&gt;</pre>
</div>
<p>C&oacute;mo se daran cuenta, este formulario tiene un parametro nuevo llamado enctype, con<br />
  el valor &quot;multipart/form-data&quot;, informando que env&iacute;a datos<br />
  y archivos, opci&oacute;n indispensable para el correcto upload del fichero.</p>
<p>Tambi&eacute;n utilizamos un input &quot;file&quot; para que el usuario pueda explorar su respectiva<br />
  computadora en busca del archivo a subir.</p>
<p>Suponemos que el script al que enviamos el formulario y el encargado de procesarlo se<br />
  llama subir.php. A continuaci&oacute;n explicare el contenido y funcionamiento<br />
  de este archivo.</p>
<p>C&oacute;mo vimos en el formulario, el campo de archivo se llama <strong>archivo</strong>: </p>
<div class="codigo">
<pre>&lt;input <strong>name=&quot;archivo&quot;</strong>
        type=&quot;file&quot;&gt;</pre>
</div>
<p>De acuerdo a este nombre sera que trabajaremos en el lado del servidor, osea en<br />
  el script.</p>
<p>El archivo se guarda en la carpeta temporal del servidor, dato que hay que tenerlo<br />
  en cuenta ya que no todos los servidores cuentan con esta opci&oacute;n y ponen<br />
  el tama&ntilde;o de dicha carpeta a 0, imposibilitando subir archivos.</p>
<p>Para referirnos al archivo en el script lo hacemos por medio de:</p>
<p>$archivo</p>
<p>Otras propiedades que tendremos a nuestra disposicion es el tama&ntilde;o (en bytes)<br />
  y el nombre del archivo.</p>
<p><strong>$archivo_name</strong><br />
  - Nombre del archivo (ej: instaladores.zip, miarchivo.zip)</p>
<p>  <strong>$archivo_size </strong>- Tama&ntilde;o<br />
  del archivo en bytes (si son 10kb serian 10000 bytes)</p>
<p>Nota: A este<br />
  punto cuándo nos referimos al archivo lo hacemos siempre con $archivo, debido<br />
a que en el formulario lo denominamos de esta forma (&lt;input <strong>name=&quot;archivo&quot;</strong> type=&quot;file&quot;&gt;).</p>
<p> La explicacion la hago suponiendo un conocimiento b&aacute;sico de php por parte<br />
  del lector.</p>
<p>Primero mostrare el script, luego explicare linea por linea el script:</p>
<div class="codigo">
<pre>&lt;?php
	//formulario de upload por jorge luis martinez
	//http://miscodigos.jlmnetwork.com/
	$extension = explode(&quot;.&quot;,$archivo_name);
	$num = count($extension)-1;
	if($extension[$num] == &quot;zip&quot;)
		{
		if($archivo_size &lt; 30000)
		{
		if(!copy($archivo, &quot;archivos/&quot;.$archivo_name)
		{
		echo &quot;error al copiar el archivo&quot;;
		}
		else
		{
		echo &quot;archivo subido con exito&quot;;
		}
		}
		else
		{
		echo &quot;el archivo supera los 30kb&quot;;
		}
		}
		else
		{
		echo &quot;el formato de archivo no es valido, solo .zip&quot;;
		}
?&gt;</pre>
</div>
<p>Lo primero que haremos sera comprobar que la extencion del archivo es la permitida<br />
  (.zip).</p>
<p>Para ello utilizamos la funcion de php <strong>explode</strong>, la cual guardar&aacute; en un array el nombre del archivo segun el primer parametro (el punto):</p>
<div class="codigo">
<pre>$extension = explode(&quot;.&quot;,$archivo_name); </pre>
</div>
<p>Para mejor entendimiento, si el archivo se llama ficheros.zip el explode pondria<br />
  en este caso en la variable $extencion el nombre en dos partes:</p>
<div class="codigo">
<pre>$extension[0] y $extension[1]</pre>
</div>
<p>los cuales contienen:</p>
<div class="codigo">
<pre>$extension[0] &#8211;&gt; &quot;ficheros&quot;
$extension[1] &#8211;&gt; &quot;zip&quot;</pre>
</div>
<p>Ahora obtendremos la longitud del array, en este caso seria de 2 (ya que contiene<br />
  2 elementos &quot;ficheros&quot; y &quot;zip&quot;), a ese numero le mermamos<br />
  1 y lo asignamos a una variable llamada $num:</p>
<div class="codigo">
<pre>$num = count($extension)-1;</pre>
</div>
<p>Nota: Le hemos mermado 1 a la longitud por que cuando queramos llamar al array $extension[$num]<br />
  debemos de hacerlo teniendo en cuenta que los elementos van desde 0, por lo<br />
  que aunque contenga 2 elementos no podemos llamar al segundo con $extension[2],<br />
si no que tenemos que llamarlo por su posicion $extencion[1].</p>
<p>Ahora haremos el condicional. Si la extencion del archivo es zip continuaremos con<br />
  el proceso de upload, de lo contrario mostraremos mensaje de error.</p>
<div class="codigo">
<pre>if($extension[$num] == &quot;zip&quot;)
{
&#8230;
}
<strong>else</strong>
{
echo &quot;el formato de archivo no es valido, solo .zip&quot;;
}</pre>
</div>
<p>Ahora, continuaremos con el upload, suponiendo que el archivo era el correcto.</p>
<p>Lo siguiente a hacer es comprobar el tama&ntilde;o del archivo; para ello utilizaremos<br />
  la variable antes mencionada<strong> $archivo_size</strong>. Si el tama&ntilde;o<br />
  es menor a los 30kb (recuerde, debe especificarlo en bytes, por lo que serian<br />
  30000) continuaremos con el upload, de lo contrario mostraremos un mensaje de<br />
  error:</p>
<div class="codigo">
<pre>if($archivo_size &lt; 30000)
{
...
}
else
{
echo &quot;el archivo supera los 30kb&quot;;
}</pre>
</div>
<p>Ahora, continuaremos con el upload, suponiendo que el tama&ntilde;o del archivo es<br />
  correcto.</p>
<p>Utilizaremos la funci&oacute;n <strong>copy()</strong> de php, la cual copiara el archivo<br />
  a la carpeta que especifiquemos. </p>
<p>Nota: El archivo que hemos subido por medio del formulario se guarda en la carpeta temporal del<br />
  servidor y se accede a &eacute;l por medio de la variable $archivo, este archivo<br />
  ser&aacute; borrado de la carpeta temporal cuando el script finalize su ejecuci&oacute;n,<br />
  este proceso es automatico y lo realiza el servidor, usted no tiene que preocuparse<br />
  por este aspecto.</p>
<p>En este caso copiaremos el archivo a una carpeta del servidor llamada <strong>archivos.</strong><br />
  Notese que la ruta de copiado debe de ser relativa, no absoluta, y es relativa<br />
  al script. Osea, si el script se ejecuta en:</p>
<p>http://www.servidor.net/cuenta/carpeta/subir.php</p>
<p>La funcion en este caso intentara copiarlo a:</p>
<p>http://www.servidor.net/cuenta/carpeta/archivos/ </p>
<p>Lo hemos puesto en un <strong>if </strong>y con signo de negaci&oacute;n <strong>(!)</strong>,<br />
  para que en caso de no poder copiar el archivo nos salga mensaje de error:</p>
<div class="codigo">
<pre>if(!copy($archivo, &quot;archivos/&quot;.$archivo_name))
{
echo &quot;error al copiar el archivo&quot;;
}
else
{
echo &quot;archivo subido con exito&quot;;
}</pre>
</div>
<p>En este caso el archivo ha sido copiado a la carpeta archivos y con el mismo nombre<br />
  que ten&iacute;a, osea, si el archivo se llamaba <strong>&quot;ficheros.zip&quot;</strong>,<br />
  el archivo ha quedado en la carpeta con el mismo nombre <strong>&quot;archivos/ficheros.zip&quot;</strong>.</p>
<p>Notese que esto no es obligatorio, y podemos ponerle el nombre que queramos, si hubieramos<br />
  querido que el archivo se llamara <strong>&quot;jlmm.zip&quot;</strong>, simplemente<br />
  pondriamos en el <strong>copy()</strong> lo siguiente:</p>
<div class="codigo">
<pre>copy($archivo, &quot;archivos/jlmm.zip&quot;)</pre>
</div>
<p>Bien, espero haya quedado claro, y espero tus comentarios.</p>
<p>Suerte y hasta el proximo tutorial!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/upphp/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
