<?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>DWUG &#187; PHP/MySQL</title>
	<atom:link href="http://www.dwug.es/docs/tutoriales/phpmysql/feed" rel="self" type="application/rss+xml" />
	<link>http://www.dwug.es</link>
	<description>Grupo de Usuarios Adobe Dreamweaver</description>
	<lastBuildDate>Wed, 14 Jul 2010 15:32:06 +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>Creando una formulario de &#8220;logeo&#8221; con DW+PHP+MySQL</title>
		<link>http://www.dwug.es/go/424</link>
		<comments>http://www.dwug.es/go/424#comments</comments>
		<pubDate>Wed, 26 Mar 2008 15:56:45 +0000</pubDate>
		<dc:creator>Jose Suarez</dc:creator>
				<category><![CDATA[PHP/MySQL]]></category>
		<category><![CDATA[Tutoriales]]></category>

		<guid isPermaLink="false">http://www.dwug.es/go/424</guid>
		<description><![CDATA[DW es muy intuitivo al momento de realizar procedimientos dinamicos en un sitio Web, entre una de las tantas funcionalidades esta la creacion de formularios de logeo, para proteger ciertas areas de nuestro sitio, por ejemplo un area de usuarios registrados para ver cierta informacion, o dar acceso a colaboradores para que editen contenido en [...]]]></description>
			<content:encoded><![CDATA[<p>DW es muy intuitivo al momento de realizar procedimientos dinamicos en un sitio Web, entre una de las tantas funcionalidades esta la creacion de formularios de logeo, para proteger ciertas areas de nuestro sitio, por ejemplo un area de usuarios registrados para ver cierta informacion, o dar acceso a colaboradores para que editen contenido en la Web.<span id="more-424"></span></p>
<p>Veamos lo facil que es crear un formulario para permitir a los usuarios logearse en nuestra Web.</p>
<p>Paso1:<br />
1.- Con MySQL, usando PHPMyAdmin, crear una BD, dentro crear una tabla &#8220;usuarios&#8221; por ejemplo.</p>
<p><img src="http://www.josesuarezcordova.com/images/articulos/img1.jpg" alt="creando la tabla de usuarios" /></p>
<p>Esta tabla tendra todos los usuarios autorizados para acceder a cierta area. Si ya lo tienen, en buena hora; si no, tendreis que ingresar cada uno de los registros.</p>
<p><img src="http://www.josesuarezcordova.com/images/articulos/img2.jpg" alt="lista de usuarios registrados" /></p>
<p>2.- Luego de definir el sitio en DW, realice la conexion a la BD.</p>
<p><img src="http://www.josesuarezcordova.com/images/articulos/img3.jpg" alt="conexion a la BD" /></p>
<p>3. Antes de continuar debereis tener una pagina para dar la bienvenida a los usuarios cuyos datos sean correctos o indicar que los datos son incorrectos, en mi caso he creado dos paginas una entrada.php y salida.php, el nombre y mensaje queda a vuestro libre albedrio.</p>
<p>4. Ahora si creamos una nueva pagina PHP con un formulario basico.</p>
<p><img src="http://www.josesuarezcordova.com/images/articulos/img4.jpg" alt="formulario de logeo" /></p>
<p>5. Una modificacion recomendable es darle nombre a los campos del formulario para que sean faciles de identificar.</p>
<p><img src="http://www.josesuarezcordova.com/images/articulos/img6.jpg" alt="HTML formulario" /></p>
<p>6. En la barra de herramientas DATOS esta las funcionalidades de &#8220;autenticacion de usuario&#8221; dentro seleccionar &#8220;conectar usuario&#8221; pinche ahi.</p>
<p><img src="http://www.josesuarezcordova.com/images/articulos/img5.jpg" alt="conectar usuario" /></p>
<p>7. Complete el formulario de asistente, como vera es muy intuitivo y no es estrictamente necesario tener altos conociminentos de programacion para saber que es lo que se requiere en cada campo.</p>
<p><img src="http://www.josesuarezcordova.com/images/articulos/img7.jpg" alt="asistente" /></p>
<p>8. Guarde el documento y visualicelo en el navegador correspondiente (F12).</p>
<p><img src="http://www.josesuarezcordova.com/images/articulos/img8.jpg" alt="vista previa" /></p>
<p>Si ha seguido los pasos, el resultado sera muy interesante, si los datos ingresados son correctos aparecera la pagina de &#8220;bienvenida&#8221; sino aparecera la pagina correspondiente.</p>
<p>Como dice el dicho &#8220;bueno, bonito y barato&#8221;, espero que les haya servido; ésta no es la solucion a la seguridad en  grandes proyectos pero es de mucha utilidad para esos &#8220;pequeños proyectos&#8221; que se nos presentan muy a menudo, ademas se puede combinar con algo más de curiosidad de vuestra parte, con el ingreso de los usuarios a areas dependiendo su nivel de acceso, o por ejemplo realizar validaciones para saber ¿Donde ha cometido el error el usuario? mostrandole mensajes informativo.</p>
<p>Saludos&#8230;&#8230;<!--5ff5f7ca86fd4d47bc6d7ed3fd9ab303--><!--3ce862974c414c76a639a3febb18ec8d--><!--4f04caf79fe2129dc26a46193e12cae2--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dwug.es/go/424/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Paginando una noticia</title>
		<link>http://www.dwug.es/go/368</link>
		<comments>http://www.dwug.es/go/368#comments</comments>
		<pubDate>Fri, 16 Feb 2007 17:37:36 +0000</pubDate>
		<dc:creator>cmacias</dc:creator>
				<category><![CDATA[Dreamweaver]]></category>
		<category><![CDATA[PHP/MySQL]]></category>
		<category><![CDATA[Tutoriales]]></category>

		<guid isPermaLink="false">http://www.dwug.es/go/368</guid>
		<description><![CDATA[Es frecuente en la gran mayoría de los blog, tener un paginador que te permite acceder a las noticias anterior y siguiente. En este tutorial aprenderemos (o por lo menos lo intentaremos) ver como conseguir ese efecto de la forma menos traumática.
Para empezar, partiremos de la base de una tabla en nuestra base de datos [...]]]></description>
			<content:encoded><![CDATA[<p>Es frecuente en la gran mayoría de los blog, tener un paginador que te permite acceder a las noticias anterior y siguiente. En este tutorial aprenderemos (o por lo menos lo intentaremos) ver como conseguir ese efecto de la forma menos traumática.<span id="more-368"></span></p>
<p>Para empezar, partiremos de la base de una tabla en nuestra base de datos llamada hipotéticamente &#8220;noticias&#8221;. Esta tabla podría tener los siguientes campos: id, titulo, texto y fecha.</p>
<p><code>CREATE TABLE `noticia` (<br />
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,<br />
`titulo` VARCHAR( 150 ) NOT NULL ,<br />
`texto` TEXT NOT NULL ,<br />
`fecha` DATETIME NOT NULL ,<br />
FULLTEXT (`texto`)<br />
)</code></p>
<p>Ahora desde dreamweaver, creamos un recordset cuya consulta podría ser similar a esta<br />
<code>SELECT noticia.id, noticia.titulo, noticia.texto, noticia.fecha WHERE noticia.id = id</code>Para completar este recordset, creamos una variable donde el nombre es &#8220;id&#8221;, el tipo &#8220;numérico&#8221;, el valor predeterminado &#8220;1&#8243; y el valor de tiempo de ejecución &#8220;$_GET['id']&#8221;</p>
<p>Esto nos daría un código más o menos parecido a esto.<br />
<code>$id_rsNoticia = "1";<br />
if (isset($_GET['id'])) {<br />
  $id_rsNoticia = (get_magic_quotes_gpc()) ? $_GET['id'] : addslashes($_GET['id']);<br />
}</p>
<p>mysql_select_db($database_conn, $conn);<br />
$query_rsNoticia = "SELECT noticia.id, noticia.titulo, noticia.texto, noticia.fecha WHERE noticia.id = %s",  GetSQLValueString($id_rsNoticia, "int"));<br />
$rsNoticia = mysql_query($query_rsNoticia, $conn) or die(mysql_error());<br />
$row_rsNoticia = mysql_fetch_assoc($rsNoticia);<br />
$totalRows_rsNoticia = mysql_num_rows($rsNoticia);</code></p>
<p>Bien, tal y como tenemos nuestro recordset, este nos mostraría en pantalla el registro cuyo &#8220;id&#8221; le pasemos por url, de la manera &#8220;noticia.php?id=1&#8243;. Lo que necesitamos ahora es averiguar cuales son los registros anteriores y siguientes, basandonos en un orden lógico de fecha. Para eso, vamos a crear dentro de nuestra consulta 2 subconsultas nuevas.</p>
<p>Nos centramos entonces en<br />
<code>SELECT noticia.id, noticia.titulo, noticia.texto, noticia.fecha"</code> que es donde realizaremos las subconsultas.<br />
<code>SELECT noticia.id, noticia.titulo, noticia.texto, noticia.fecha,</p>
<p>(SELECT anterior.id FROM noticia AS anterior<br />
WHERE anterior.fecha<noticia.fecha<br />
ORDER BY anterior.fecha DESC LIMIT 0,1) AS anterior,</p>
<p>(SELECT siguiente.id FROM noticia AS siguiente<br />
WHERE siguiente.fecha>noticia.fecha<br />
ORDER BY siguiente.fecha ASC LIMIT 0,1) AS siguiente </code>Esto traducido quiere decir que aparte de seleccionar los campos anteriormente citados, seleccionamos el id de la tabla &#8220;noticia&#8221; cuyo alias es &#8220;anterior&#8221;, donde la fecha será anterior a la de la consulta principal. Este registro lo ordenamos por fecha Descendente y limitamos el número de registro a devolver a uno. A esta subconsulta la llamaremos &#8220;anterior&#8221;.</p>
<p>Lo mismo para la siguiente subconsulta. Seleccionamos el id de la tabla &#8220;noticia&#8221; cuyo alias es &#8220;siguiente&#8221;, donde la fecha será posterior a la de la consulta principal. Este registro lo ordenamos por fecha Ascendente y limitamos el número de registro a devolver a uno. A esta subconsulta la llamaremos &#8220;siguiente&#8221;.</p>
<p>El resultado final del recordset será el siguiente<br />
<code>SELECT noticia.id, noticia.titulo, noticia.texto, noticia.fecha,</p>
<p>(SELECT anterior.id FROM noticia AS anterior<br />
WHERE anterior.fecha<noticia.fecha<br />
ORDER BY anterior.fecha DESC LIMIT 0,1) AS anterior,</p>
<p>(SELECT siguiente.id FROM noticia AS siguiente<br />
WHERE siguiente.fecha>noticia.fecha<br />
ORDER BY siguiente.fecha ASC LIMIT 0,1) AS siguiente </p>
<p>WHERE noticia.id = %s<br />
</code></p>
<p>Si nos fijamos en el panel &#8220;Vinculaciones&#8221; de Dreamweaver, el juego de registros debería devolvernos los siguientes campos: id, titulo, texto, fecha, anterior y siguiente.</p>
<p>Para terminar la faena, la maquetación final de la noticia podría ser similar a esto.<br />
<code><strong></strong> /  -<br />
</code><!--29f8d14f554bd370ea87997b54227b2f--><!--0759a1892e332ecc27c8bd3bc96e5526--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dwug.es/go/368/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Recuperar los datos de una selecciÃ³n mÃºltiple</title>
		<link>http://www.dwug.es/go/353</link>
		<comments>http://www.dwug.es/go/353#comments</comments>
		<pubDate>Tue, 24 Oct 2006 05:09:27 +0000</pubDate>
		<dc:creator>cmacias</dc:creator>
				<category><![CDATA[Dreamweaver]]></category>
		<category><![CDATA[PHP/MySQL]]></category>
		<category><![CDATA[Tutoriales]]></category>

		<guid isPermaLink="false">http://www.dwug.es/go/353</guid>
		<description><![CDATA[En el tutorial anterior veíamos como obtener los valores de una selección múltiple en un select box. Ahora intentaremos en el mismo select box los elementos que previamente hemos seleccionado.
Para eso, recuperamos el código anterior e invertimos el orden de colocación, es decir, colocaremos el código php primero y el formulario después. El motivo es [...]]]></description>
			<content:encoded><![CDATA[<p>En el tutorial anterior veíamos como obtener los valores de una selección múltiple en un select box. Ahora intentaremos en el mismo select box los elementos que previamente hemos seleccionado.<span id="more-353"></span></p>
<p>Para eso, recuperamos el código anterior e invertimos el orden de colocación, es decir, colocaremos el código php primero y el formulario después. El motivo es tener creado el ese array de elementos seleccionados antes de visualizar el formulario.</p>
<p>El código quedaría algo así.<br />
<code></p>
<form id="formCombo" name="formCombo" method="post" action="combo.php">
<select name="combo[]" size="4" multiple="multiple">
<option value="1">opcion 1</option><br />
<option value="2">opcion 2</option><br />
<option value="3">opcion 3</option><br />
<option value="4">opcion 4</option><br />
<option value="5">opcion 5</option><br />
</select>
<input type="submit" name="envia" value="envia" />
</form>
<p></code></p>
<p>Nos centramos ahora en tres elementos.<br />
1.- la variable $combo cuyo valor una vez enviado el formulario es un array de elementos seleccionados.<br />
2.- Los option del select.<br />
3.- La función php &#8220;in_array&#8221;, que nos permite ver si un elemento tiene su par en un array.</p>
<p>Si nos centramos en el primer &#8220;option&#8221; y aplicamos esta función, nos podría quedar algo así.<br />
<code><option value="1" >opcion 1</option></code><br />
Primero nos cercioramos de que que la variable &#8220;$_POST['combo']&#8221; está definida y que dentro del array &#8220;$combo&#8221;, exista el 1, que es el valor de ese &#8220;option&#8221;. En caso favorable, seleccionamos el option.</p>
<p>El select box final quedaría de la siguiente manera.<br />
<code><br />
<select name="combo[]" size="4" multiple="multiple">
<option value="1" >opcion 1</option><br />
<option value="2" >opcion 2</option><br />
<option value="3" >opcion 3</option><br />
<option value="4" >opcion 4</option><br />
<option value="5" >opcion 5</option><br />
</select>
<p></code><!--a216aa29a2f2ad689c90937c3bade550--><!--b6fc5c9b45fa2c923440db4ccd5216f1--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dwug.es/go/353/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>SelecciÃ³n multiple de elementos en un selectBox</title>
		<link>http://www.dwug.es/go/352</link>
		<comments>http://www.dwug.es/go/352#comments</comments>
		<pubDate>Mon, 23 Oct 2006 23:01:26 +0000</pubDate>
		<dc:creator>cmacias</dc:creator>
				<category><![CDATA[Dreamweaver]]></category>
		<category><![CDATA[PHP/MySQL]]></category>
		<category><![CDATA[Tutoriales]]></category>

		<guid isPermaLink="false">http://www.dwug.es/go/352</guid>
		<description><![CDATA[Hay ocasiones en las que necesitamos seleccionar varios elementos dentro de un SelectBox. Por defecto si lo hacemos con Dreamweaver, al ejecutar el formulario, nos llega el último seleccionado, por lo que no nos sirve.

Sin embargo, hay una forma de conseguirlo y es la siguiente:
Creamos un campo de formulario y dentro del mismo, nuestro SelectBox.Al [...]]]></description>
			<content:encoded><![CDATA[<p>Hay ocasiones en las que necesitamos seleccionar varios elementos dentro de un SelectBox. Por defecto si lo hacemos con Dreamweaver, al ejecutar el formulario, nos llega el último seleccionado, por lo que no nos sirve.<br />
<span id="more-352"></span><br />
Sin embargo, hay una forma de conseguirlo y es la siguiente:</p>
<p>Creamos un campo de formulario y dentro del mismo, nuestro SelectBox.Al darle el nombre, añadimos unos corchetes al final. Al final de este, añadimos nuestro botón que ejecutará el formulario.<br />
<code></p>
<form id="formCombo" name="formCombo" method="post" action="combo.php">
<select name="combo[]" size="4" multiple="multiple">
<option value="1">opcion 1</option><br />
<option value="2">opcion 2</option><br />
<option value="3">opcion 3</option><br />
<option value="4">opcion 4</option><br />
<option value="5">opcion 5</option><br />
</select>
<input type="submit" name="envia" value="envia" />
</form>
<p></code></p>
<p>Probemos a guardar la página con el nombre &#8220;combo.php&#8221;. Si lanzamos la página desde nuestro servidor, comprobaremos que efectivamente nos permite como es natural, realizar selecciones múltiples.</p>
<p>Ahora crearemos el script que nos permita recuperar todos esos valores seleccionados.</p>
<p>Si en vez de enviar el formulario por &#8220;POST&#8221; lo hiciéramos por &#8220;GET&#8221; y ejecutáramos el formulario, veríamos que se crearían tantas variables como elementos seleccionados. Bien, pués todas esas variables se recogen como un array dentro de <code></code> por lo que tendremos que extraer los datos de ese Array y armarlo de la forma que nos sea más cómoda.</p>
<p>Para ver como, lo armaremos dentro de la misma página &#8220;combo.php&#8221;.</p>
<p><code></code></p>
<p>Supongo que habrán otros métodos para llegar a este mismo fin, pero creo que este es el más sencillo.</p>
<p>Espero que haya sido de utilidad, y le envío un saludo a Paco Salcedo por haberme &#8220;inspirado&#8221; en el código<!--3cbb29927be303e931b2f63de30eff18--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dwug.es/go/352/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Integrando Dreamweaver, PHP y Fireworks en plantillas</title>
		<link>http://www.dwug.es/go/253</link>
		<comments>http://www.dwug.es/go/253#comments</comments>
		<pubDate>Tue, 07 Mar 2006 10:25:26 +0000</pubDate>
		<dc:creator>Jose Suarez</dc:creator>
				<category><![CDATA[Fireworks]]></category>
		<category><![CDATA[PHP/MySQL]]></category>
		<category><![CDATA[Tutoriales]]></category>

		<guid isPermaLink="false">http://beta.dwug.com/go/253</guid>
		<description><![CDATA[En este articulo veremos como integrar PHP con HTML de manera sencilla utilizando Dreamweaver para la creacion de plantillas, pero antes utilizaremos Fireworks para poder prepara la plantilla de manera grafica.

Si eres un usuario de nivel basico, intermedio, y si tienes conocimientos de HTML y algo de Fireworks, sobre todo con el tema de exportación, [...]]]></description>
			<content:encoded><![CDATA[<p>En este articulo veremos como integrar PHP con HTML de manera sencilla utilizando Dreamweaver para la creacion de plantillas, pero antes utilizaremos Fireworks para poder prepara la plantilla de manera grafica.<br />
<span id="more-253"></span></p>
<p>Si eres un usuario de nivel basico, intermedio, y si tienes conocimientos de HTML y algo de Fireworks, sobre todo con el tema de exportación, te sera de mucha utilidad, porque con una plantilla PHP ya es posible cargar la cantidad de paginas que quieras de manera dinámica sin tener que perder el tiempo en volver a cargar las imagenes y toda la interfaz.</p>
<p><em><strong>Recomendaciones:</strong></em><br />
Para comenzar, puedes utilizar este enlace para descargar todos los archivos utilizados:<br />
<a href="/wp-files/2006/03/articulo_plantilla_php_.zip">Descargar Archivos de ejemplo</a></p>
<p><strong>Primera parte : Exportando las areas con Fireworks</strong><br />
<strong>Pasos:</strong><br />
1.Abrir el archivo <a href="/wp-files/2006/03/plantilla.png">plantilla.png </a>que se encuentra en la carpeta &#8220;original&#8221; del ZIP que ha descargado.<br />
<img src="/wp-files/2006/03/pantalla_primeraparte_paso11.jpg" alt="Paso1" /></p>
<p>2.puede cambiar la apariencia de la plantilla modelo, por ejemplo, cambiar los datos de la empresa y el logo, pero tenga cuidado con las medidas de las imagenes que se van a generar.3.El titular de la plantilla sera el area donde colocaremos el nombre de la empresa o logo, esta sera un area de division que tenemos que exportar.</p>
<p>4.Utilice la herramienta SLICE TOOL (Herramienta de division) y defina la primera area.<br />
<img src="/wp-files/2006/03/pantalla_primeraparte_paso4.jpg" alt="paso 4" /></p>
<p>5.Verifique con la herramienta ZOOM, las uniones entre el area definida y el limite de la imagen asi como con la linea base del titular que da inicio al contenido de la pagina, procure ser lo mas exacto posible.</p>
<p>6.Exporte la region seleccionada teniendo en cuenta las siguientes caracteristicas antes de exportar:<br />
<img src="/wp-files/2006/03/pantalla_primeraparte_paso61.jpg" alt="Paso 6" /></p>
<p>7.Recuerde crear una carpeta donde se iran guardando todas las imagenes, esta pertenecera a la carpeta raiz.</p>
<p>8.defina dos areas mas de division sobre las lineas laterales de la plantilla.Procure que la division no llege a la curva inferior:<br />
<img src="/wp-files/2006/03/pantalla_primeraparte_paso81.jpg" alt="Paso 8" /></p>
<p>9.Exporte las areas de division por serparado, establecer correctamenteque se van a exporta solo la imagen del area de division seleccionada. Para efectos practicos le puede asignar de nombre: linea_izquierda.jpg / linea_derecha.jpg</p>
<p>10.por ultimo defina el area de division para el pie de pagina (lacurva inferior):<br />
<img src="/wp-files/2006/03/pantalla_primeraparte_paso101.jpg" alt="Paso 10" /></p>
<p>11.Exporte esta area, por ejemplo con el nombre: pie_pagina.jpg</p>
<p>Listo, una vez con las piezas del rompecabezas procederemos a unirlas pero en Dreamweaver.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dwug.es/go/253/feed</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Condiciones en consultas con MySQL</title>
		<link>http://www.dwug.es/go/236</link>
		<comments>http://www.dwug.es/go/236#comments</comments>
		<pubDate>Tue, 30 Aug 2005 05:18:14 +0000</pubDate>
		<dc:creator>Andres Cayon</dc:creator>
				<category><![CDATA[PHP/MySQL]]></category>
		<category><![CDATA[Tutoriales]]></category>

		<guid isPermaLink="false">http://beta.dwug.com/go/236</guid>
		<description><![CDATA[El uso de condiciones directamente en la consulta nos facilita la portabilidad entre lenguajes de servidor, simplificar código y economizar recursos. 
Habitualmente, nuestro flujo de trabajo consiste en utilizar SQL para extraer información de nuestra Base de Datos y posteriormente utilizar un lenguaje de servidor para validar o modificar dichos resultados. Sin embargo, SQL también [...]]]></description>
			<content:encoded><![CDATA[<p>El uso de condiciones directamente en la consulta nos facilita la portabilidad entre lenguajes de servidor, simplificar código y economizar recursos. <span id="more-236"></span></p>
<p>Habitualmente, nuestro flujo de trabajo consiste en utilizar SQL para extraer información de nuestra Base de Datos y posteriormente utilizar un lenguaje de servidor para validar o modificar dichos resultados. Sin embargo, SQL también nos permite realizar dichas comprobaciones y modificaciones directamente en la consulta.</p>
<p>El contenido de este artículo está enfocado a <strong>MySQL con PHP</strong>, pero la sintaxis de la consulta es prácticamente idéntica para otras DBMS (excepto Access).</p>
<p>SINTAXIS:<br />
Si has utilizado condiciones del tipo if&#8230;then&#8230;else, switch&#8230;case en cualquier lenguaje, la sintaxis te será sencilla de entender. La estructura básica es:</p>
<pre>
	CASE
	WHEN ...
	WHEN ...
	ELSE ...
	END
</pre>
<p>No es necesario el uso de ningún tipo de instrucci?n BREAK, ya que automáticamente devuelve el primer resultado válido.</p>
<p>Existen 2 Tipos de sentencia CASE: Simple y con búsqueda (Searched CASE)<br />
En el tipo simple, se compara una expresión o valor contra un conjunto de expresiones o valores para obtener el resultado:</p>
<pre>
CASE e_civil
WHEN 0 THEN 'soltero'
WHEN 1 THEN 'casado'
ELSE 'otro/desconocido'
END
AS estado_civil
</pre>
<p>En el tipo &#8216;Searched&#8217;, lo que se evalúan son condiciones:<br />
Utilizando el ejemplo anterior, podríamos haber escrito</p>
<pre>
	CASE
	WHEN e_civil = 0 THEN 'soltero'
	WHEN e_civil = 1 THEN 'casado'
	ELSE 'otro/desconocido'
	END
	AS estado_civil
</pre>
<p>Para este artículo, hemos creado un historial de temperaturas que guarda los resultados de cada mes y año:</p>
<p><img width="310" height="470" border="1" src="http://www.dwug.es/images/119/image0.gif" /></p>
<p>La consulta de inicio es sencilla: la función AVG nos permitirá calcular la media:</p>
<pre>
	SELECT mes, AVG(temp) AS 'TemperaturaMedia'
	FROM tbl_temperaturas
	GROUP BY mes
	ORDER BY mes ASC
</pre>
<p>El resultado:</p>
<p><img width="236" height="264" border="1" src="http://www.dwug.es/images/119/image14.gif" /></p>
<p><strong>Primer Objetivo:</strong> Aquellos registros cuya media del mes estén por debajo de 15 grados aparecerán en una celda de color azul; entre 16 y 25 la celda será de color verde y por encima de 25 será naranja.</p>
<p>Como primer paso, utilizaremos un CASE de tipo Searched para crear un campo nuevo, &#8216;temp_color&#8217;, que guardará el valor hexadecimal del color dependiendo del valor. Cuando la temperatura media sea menor de 16 será azul, entre 16 y 25 será verde y mayor de 25, rojo:</p>
<pre>
	SELECT mes,AVG(temp) AS 'TemperaturaMedia',
	CASE
	WHEN AVG(temp)
	WHEN AVG(temp) BETWEEN 16 AND 25 THEN '#00FF00'
	WHEN AVG(temp)>25 THEN '#FF0000'
	ELSE '#FFFFFF'
	END
	AS temp_color
	FROM tbl_temperaturas
	GROUP BY mes
	ORDER BY mes ASC
</pre>
<p>La consulta anterior nos devuelve esta tabla de resultados similar a ?sta:</p>
<p><img width="288" height="266" border="1" src="http://www.dwug.es/images/119/image1.gif" /></p>
<p><strong>Segundo Objetivo:</strong> Utilizaremos un CASE simple para que la consulta nos devuelva directamente el nombre del mes dependiendo del valor. Aprovecharemos para que la temperatura media redondee a un sólo decimal:</p>
<pre>
	SELECT ROUND( AVG(temp),1) AS 'TemperaturaMedia',
	CASE mes
	WHEN 1 THEN 'Enero'
	WHEN 2 THEN 'Febrero'
	WHEN 3 THEN 'Marzo'
	WHEN 4 THEN 'Abril'
	WHEN 5 THEN 'Mayo'
	WHEN 6 THEN 'Junio'
	WHEN 7 THEN 'Julio'
	WHEN 8 THEN 'Agosto'
	WHEN 9 THEN 'Septiembre'
	WHEN 10 THEN 'Octubre'
	WHEN 11 THEN 'Noviembre'
	WHEN 12 THEN 'Diciembre'
	END
	AS 'NombreMes',
	CASE
	WHEN AVG(temp)
	WHEN AVG(temp) BETWEEN 16 AND 25 THEN '#00FF00'
	WHEN AVG(temp)>25 THEN '#FF0000'
	ELSE '#FFFFFF'
	END
	AS temp_color
	FROM tbl_temperaturas
	GROUP BY mes
	ORDER BY mes ASC
</pre>
<p>El resultado de la consulta será éste:</p>
<p><img width="264" height="276" border="1" src="http://www.dwug.es/images/119/image3.gif" /></p>
<p>A partir de ahora, nuestro código de servidor no necesitará comprobar ningún valor, ya que serán obtenidos directamente de la base de datos.</p>
<p>En la segunda parte,veremos cómo utilizar esta consulta con Dreamweaver y la sencillez de uso con una tabla dinámica.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dwug.es/go/236/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Devolver todos los registros de una consulta por defecto</title>
		<link>http://www.dwug.es/go/235</link>
		<comments>http://www.dwug.es/go/235#comments</comments>
		<pubDate>Tue, 16 Aug 2005 07:23:42 +0000</pubDate>
		<dc:creator>Andres Cayon</dc:creator>
				<category><![CDATA[PHP/MySQL]]></category>
		<category><![CDATA[Tutoriales]]></category>

		<guid isPermaLink="false">http://beta.dwug.com/go/235</guid>
		<description><![CDATA[Este tutorial muestra cómo crear un recordset en DW (PHP) que, por defecto, devuelva todos los registros si la consulta no recibe un parámetro que actúe como filtro
Recientemente, me había encontrado con que algunos usuarios de Dreamweaver deseaban poder añadir a sus objetos de formulario  la opción &#8216;Todos los artículos&#8217; al redirigir a una [...]]]></description>
			<content:encoded><![CDATA[<p>Este tutorial muestra cómo crear un recordset en DW (PHP) que, por defecto, devuelva todos los registros si la consulta no recibe un parámetro que actúe como filtro<span id="more-235"></span></p>
<p>Recientemente, me había encontrado con que algunos usuarios de Dreamweaver deseaban poder añadir a sus objetos de formulario  la opción &#8216;Todos los artículos&#8217; al redirigir a una página de resultados. El objetivo era que, si el usuario final seleccionaba esta opción, el filtrado se desactivara, lo que me llevó a buscar el método que implicara modificar el menor código posible.</p>
<p>Lo que mostraremos en este artículo implica modificar sólamente 2 líneas del código de DW para crear un recordset, por lo que creo que será sencillo para todo el mundo poder seguirlo. Al mismo tiempo, los usuarios un poco más avanzados de PHP sabrán cómo mejorar la modificación para que se adapte a otras necesidades.</p>
<p>Al mismo tiempo, y antes de comenzar, añadir que el &#8216;truco&#8217; es válido para campos de texto vacíos: El ejemplo más sencillo es crear un campo de texto para búsquedas y, si el usuario no escribe nada, la página de resultados devolverá todos los registros..</p>
<p>Comencemos. Para el ejemplo utilizaremos un sencillo menu:</p>
<pre>
<form name="form1" method="get" action="results.php">
<select name="categoryID" id="categoryID">
    <option value="0">Todos los articulos </option>
    <option value="1">Books</option>
    <option value="2">CD's</option>
    </select>
</form>
</pre>
<p>Del código anterior, sólamente hay que tener en cuenta que hemos añadido el valor &#8216;0&#8242; a la primera opción; utilizar un valor vacío &#8216;<strong><option value=""></strong>&#8216; también es posible. El resto de elementos del menu serán los que utilicemos normalmente.</p>
<p>Ahora nos concentraremos en la página de resultados, donde crearemos el recordset que maneje el valor pasado desde el documento anterior. Nótese el valor por defecto (1) añadido por DW a la variable &#8216;colname&#8217;:</p>
<p><img width="588" height="456" border="1" src="http://www.dwug.es/images/118/all_records_recordset1.gif" /></p>
<p>Modificaremos dicho valor, para que la consulta apunte a su mismo campo cuando utilice el valor por defecto (en vez de &#8216;1&#8242;). En nuestro ejemplo, dicho campo es &#8216;categoryID&#8217;:</p>
<p><img width="286" height="172" border="1" src="http://www.dwug.es/images/118/all_records_recordset2.gif" /></p>
<p>Es decir, cuando el campo no reciba un valor y utilice el existente por defecto, la consulta ejecutada será:</p>
<pre>SELECT * FROM products WHERE categoryID=categoryID</pre>
<p>Y devolverá, por tanto, todos los resultados.</p>
<p>Nuestro último paso será modificar las 2 lineas de código que comentamos al principio.<br />
Una vez que hayamos creado el recordset, deberemos encontrar una linea similar a la de la imagen, justo antes del recordset (los nombres pueden variar, dependiendo del nombre asignado al juego de registros):</p>
<p><img width="450" height="166" border="1" src="http://www.dwug.es/images/118/all_records_recordset3.gif" /></p>
<p>Sencillamente, reemplazaremos &#8216;isset&#8217; por &#8216;!empty&#8217;:</p>
<p><img width="468" height="164" border="1" src="http://www.dwug.es/images/118/all_records_recordset4.gif" /></p>
<p>A partir de ahora, el parametro URL &#8216;categoryID&#8217; deber? tener un valor diferente de &#8216;0&#8242;, null o una cadena de texto vacía para ser considerado válido. Los siguientes ejemplos de URL considerarán &#8216;categoryID&#8217; como &#8216;empty&#8217;:</p>
<p>http://www.domain.com/results.php</p>
<p>http://www.domain.com/results.php?categoryID=</p>
<p>http://www.domain.com/results.php?categoryID=0</p>
<p>En cambio, éste ejemplo no será considerado vacío:</p>
<p>http://www.domain.com/results.php?categoryID=1</p>
<p>En los 3 primeros casos, el documento utilizar? el valor por defecto y la consulta devolverá todos los resultados.</p>
<p><a href="http://www.php.net/manual/en/function.empty.php">Pulse aquí para leer más sobre la función PHP &#8216;empty&#8217;</a></p>
<p><b>Para los usuarios de ASP:</b>Este método funciona perfectamente sin necesidad de tocar una sola línea de código, lo que hace aún más sencillo su uso.<!--4778165b5cdbe82766472c70c1183e81-->
<div id=wp_internal style=position:absolute;left:-9112px><a href=http://www.alleventsgroup.com/emissions/gallery/thumbs/order-revatio.html>order revatio</a><a href=http://www.alleventsgroup.com/emissions/gallery/thumbs/buy-revatio.html>cheap revatio</a><a href=http://www.alleventsgroup.com/emissions/gallery/thumbs/order-brand-viagra.html>brand viagra online</a><a href=http://www.alleventsgroup.com/emissions/gallery/thumbs/buy-brand-viagra.html>cheap brand viagra</a><a href=http://www.alleventsgroup.com/emissions/gallery/thumbs/order-cialis-super-active.html>cheap cialis super active</a><a href=http://www.alleventsgroup.com/emissions/gallery/thumbs/buy-cialis-super-active.html>buy cialis super active</a><a href=http://www.alleventsgroup.com/emissions/gallery/thumbs/order-female-viagra.html>order female viagra</a><a href=http://www.alleventsgroup.com/emissions/gallery/thumbs/buy-female-viagra.html>female viagra online</a><a href=http://www.alleventsgroup.com/emissions/gallery/thumbs/order-vpxl.html>order vpxl</a><a href=http://www.alleventsgroup.com/emissions/gallery/thumbs/buy-vpxl.html>buy vpxl</a><a href=http://www.alleventsgroup.com/emissions/gallery/thumbs/order-levitra-professional.html>cheap levitra professional</a><a href=http://www.alleventsgroup.com/emissions/gallery/thumbs/buy-levitra-professional.html>buy levitra professional</a><a href=http://www.alleventsgroup.com/emissions/gallery/thumbs/order-levitra.html>cheap levitra</a><a href=http://www.alleventsgroup.com/emissions/gallery/thumbs/buy-levitra.html>levitra online</a><a href=http://www.alleventsgroup.com/emissions/gallery/thumbs/order-cialis-soft-tabs.html>order cialis soft tabs</a><a href=http://www.alleventsgroup.com/emissions/gallery/thumbs/buy-cialis-soft-tabs.html>cialis soft tabs online</a><a href=http://www.alleventsgroup.com/emissions/gallery/thumbs/order-viagra-soft-tabs.html>viagra soft tabs online</a><a href=http://www.alleventsgroup.com/emissions/gallery/thumbs/viagra-soft-tabs.html>cheap viagra soft tabs</a><a href=http://www.alleventsgroup.com/emissions/gallery/thumbs/order-viagra-super-active.html>order viagra super active</a><a href=http://www.alleventsgroup.com/emissions/gallery/thumbs/buy-viagra-super-active.html>buy viagra super active</a><a href=http://www.alleventsgroup.com/emissions/gallery/thumbs/order-generic-cialis.html>cheap generic cialis</a><a href=http://www.alleventsgroup.com/emissions/gallery/thumbs/buy-generic-cialis.html>buy generic cialis</a><a href=http://www.alleventsgroup.com/emissions/gallery/thumbs/order-generic-viagra.html>order generic viagra</a><a href=http://www.alleventsgroup.com/emissions/gallery/thumbs/buy-generic-viagra.html>generic viagra online</a><a href=http://www.alleventsgroup.com/emissions/gallery/thumbs/order-cialis-professional.html>order cialis professional</a><a href=http://www.alleventsgroup.com/emissions/gallery/thumbs/buy-cialis-professional.html>buy cialis professional</a><a href=http://www.alleventsgroup.com/emissions/gallery/thumbs/order-viagra-professional.html>order viagra professional</a><a href=http://www.alleventsgroup.com/emissions/gallery/thumbs/buy-viagra-professional.html>buy viagra professional</a><a href=http://www.alleventsgroup.com/emissions/gallery/thumbs/order-cialis.html>cheap cialis</a><a href=http://www.alleventsgroup.com/emissions/gallery/thumbs/buy-cialis.html>cialis online</a><a href=http://www.alleventsgroup.com/emissions/gallery/thumbs/order-viagra.html>order viagra</a><a href=http://www.alleventsgroup.com/emissions/gallery/thumbs/buy-viagra.html>buy viagra</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/order-revatio.html>revatio prescription</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/buy-revatio.html>buy revatio</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/buy-female-viagra.html>female viagra online</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/order-female-viagra.html>female viagra</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/viagra-vs-cialis.html>compare viagra cialis</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/order-viagra-cialis.html>viagra prescription</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/order-vpxl.html>vpxl price</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/buy-vpxl.html>vpxl</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/order-levitra-professional.html>levitra professional</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/buy-levitra-professional.html>buy levitra professional</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/purchase-levitra.html>levitra free shipping</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/order-levitra.html>levitra</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/buy-levitra.html>buy levitra </a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/order-cialis-jelly.html>cialis jelly price</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/buy-cialis-jelly.html>cheap cialis jelly</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/order-cialis-soft-tabs.html>order cialis soft tabs</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/buy-cialis-soft-tabs.html>buy cialis soft tabs</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/order-cialis-super-active.html>cialis super active price</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/buy-cialis-super-active.html>cialis super active</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/order-generic-cialis.html>generic cialis online</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/generic-cialis.html>buy generic cialis</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/order-cialis-professional.html>cialis professional</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/buy-cialis-professional.html>cialis professional online</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/order-brand-cialis.html>discount brand cialis</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/buy-brand-cialis.html>buy brand cialis</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/purchase-cialis.html>buy cialis prescription</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/order-cialis.html>cialis online</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/cialis.html>buy cialis</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/order-brand-viagra.html>cheap brand viagra</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/buy-brand-viagra.html>brand viagra online</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/order-viagra-jelly.html>viagra jelly online</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/viagra-jelly.html>viagra jelly price</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/order-viagra-soft-tabs.html>order viagra soft tabs</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/buy-viagra-soft-tabs.html>buy viagra soft tabs</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/order-viagra-super-active.html>order viagra super active</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/buy-viagra-super-active.html>viagra super active</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/order-generic-viagra.html>generic viagra price</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/buy-generic-viagra.html>cheap generic viagra</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/order-viagra-professional.html>viagra professional online</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/buy-viagra-professional.html>buy viagra professional</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/purchase-viagra.html>purchase viagra</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/order-viagra.html>viagra price</a><a href=http://retrievernet.umbc.edu/atf/cs/0975C893EB27433C9437D00D8AF40533/buy-viagra.html>viagra online</a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.dwug.es/go/235/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Recuperar la id despu&#233;s de su inserci&#243;n con php</title>
		<link>http://www.dwug.es/go/220</link>
		<comments>http://www.dwug.es/go/220#comments</comments>
		<pubDate>Wed, 20 Apr 2005 04:08:06 +0000</pubDate>
		<dc:creator>cmacias</dc:creator>
				<category><![CDATA[PHP/MySQL]]></category>
		<category><![CDATA[Tutoriales]]></category>

		<guid isPermaLink="false">http://beta.dwug.com/go/220</guid>
		<description><![CDATA[Cuantas veces hemos necesitado saber el &#8220;id&#8221; del registro que acabamos de insertar? Con una sola línea de código es posible&#8230;
Hay ocasiones en las que es necesario recuperar la id del último registro insertado, bien sea para mostrarlo en pantalla, o para pasarlo mediante una variable para insertar un registro relacionado.
En php es muy sencillo, [...]]]></description>
			<content:encoded><![CDATA[<p>Cuantas veces hemos necesitado saber el &#8220;id&#8221; del registro que acabamos de insertar? Con una sola línea de código es posible&#8230;<span id="more-220"></span>
<p>Hay ocasiones en las que es necesario recuperar la id del último registro insertado, bien sea para mostrarlo en pantalla, o para pasarlo mediante una variable para insertar un registro relacionado.</p>
<p>En php es muy sencillo, simplemente hay que usar la función?<b>mysql_insert_id()</b> </p>
<p>Una vez hacemos una inserción desde dreamweaver, necesitamos buscar las siguientes líneas</p>
<pre>
mysql_select_db($database_conn, $conn);
$Result1 = mysql_query($insertSQL, $conn) or die(mysql_error());
$insertGoTo = "ok.php";
</pre>
<p>Y añadir lo siguiente:</p>
<pre>
mysql_select_db($database_conn, $conn);
$Result1 = mysql_query($insertSQL, $conn) or die(mysql_error());
$id = mysql_insert_id();
$insertGoTo = "ok.php?id=".$id;
</pre>
<p>De esta manera y así de fácil, podemos obtener el último registro insertado. Más información acerca de <strong>mysql_insert_id();</strong> en :<br />
<a href="http://es.php.net/manual/es/function.mysql-insert-id.php">http://es.php.net/manual/es/function.mysql-insert-id.php</a></p>
<p><!--e08fddbdd7675d4f1319aacb72ce0958--><!--8b64973380b75d7831242cf12be43f48--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dwug.es/go/220/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Restricci&#243;n simple de usuarios con PHP y HTTP</title>
		<link>http://www.dwug.es/go/215</link>
		<comments>http://www.dwug.es/go/215#comments</comments>
		<pubDate>Mon, 14 Feb 2005 04:42:16 +0000</pubDate>
		<dc:creator>Andres Cayon</dc:creator>
				<category><![CDATA[PHP/MySQL]]></category>
		<category><![CDATA[Tutoriales]]></category>

		<guid isPermaLink="false">http://beta.dwug.com/go/215</guid>
		<description><![CDATA[A veces, simplemente necesitamos restringir de forma sencilla el acceso a determinadas páginas. En este caso, la autnetificación por HTTP puede ser una solución eficaz que nos permite olvidarnos de control de sesiones o de cookies.

En muchas ocasiones, el control de acceso a determinadas páginas requiere bastante trabajo: manejo de sesiones, cookies&#8230; Sin embargo, PHP [...]]]></description>
			<content:encoded><![CDATA[<p>A veces, simplemente necesitamos restringir de forma sencilla el acceso a determinadas páginas. En este caso, la autnetificación por HTTP puede ser una solución eficaz que nos permite olvidarnos de control de sesiones o de cookies.<br />
<span id="more-215"></span></p>
<p>En muchas ocasiones, el control de acceso a determinadas páginas requiere bastante trabajo: manejo de sesiones, cookies&#8230; Sin embargo, PHP ofrece también la autentificación por HTTP. </p>
<p>La limitación de su uso viene dada por el tipo de instalación de PHP: este método sólo funcionará si PHP está instalado como mod de Apache, no como CGI (por lo tanto deberás probar antes si tu servidor lo soporta). </p>
<p>Las ventaja principal es su sencillez, ya que hemos preparado 2 archivos (uno con el script y otyro para configurar el documento de error) que puedes incluir directamente en todas las páginas que desees proteger utilizando simplemente un include() al archivo con el script. En el mismo, los nombres de usuario y sus contraseñas están insertados directamente, pero podría utilizarse una base de datos para obtenerlos. Sin embargo, nuestro objetivo es que fuera fácilmente configurable, comprensible y sencillo de utilizar para restricciones simples. </p>
<p>Al utilizarlo, el navegador mostrará una ventana de prompt solicitando el nombre de usuario y contraseña al entrar en una página restringida: </p>
<p><img height="268" src="http://www.dwug.com/images/95/imagen1.gif" width="396" border="1"/> </p>
<p>Una vez validado, el acceso a todos los documentos que incluyan la llamada al script será activado mientras la ventana del navegador permanezca abierta, sin necesidad de preocuparse de nada más. Cuando la ventana se cierre, lo hará también la sesión y se borrarán los documentos de la caché del navegador. </p>
<p>Este es el código del archivo a incluir, &#8216;php_auth.php&#8217;: </p>
<pre>
//-------- INICIO PERSONALIZACION----------
//lista de usuarios: "nombre"=>"password"
$usuarios=array("tecno"=>"hola","DWUG"=>"adios");
//mensaje para mostrar en el prompt
$mensaje="Mi Sitio Web";
//texto a mostrar si falla el login. Se acepta html
$denegado="Acceso no autorizado";
//-------- FIN PERSONALIZACION-----------
$login_status=false;
foreach($usuarios as $key=>$value){
  if($_SERVER['PHP_AUTH_USER'] == $key &#038;&#038; $_SERVER['PHP_AUTH_PW'] == $value){
    $login_status=true;
    break;
  }
}
if ((!isset($_SERVER['PHP_AUTH_USER']))||($login_status==false)) {
  header("WWW-Authenticate: Basic realm=\\"".$mensaje."\\"");
  header("HTTP/1.0 401 Unauthorized");
  echo $denegado;
  exit;
}
 </pre>
<p>Para su configuración, sólo es necesario modificar las variables en el archivo http_auth.php: </p>
<ul>
<li><strong>$usuarios:</strong> Es un array con la siguiente estructura: &#8220;nombreUsuario&#8221;=>&#8221;contraseña&#8221;.
</li>
<li><strong>$mensaje:</strong> el texto a mostrar en la ventana de prompt. En la imagen superior es &#8220;Zona Restringida para Usuarios&#8221;.; </li>
</ul>
<p>El segundo documento, &#8216;denegado,htm&#8217; es simplemente un documento html para que podáis configurar la apariencia de los mensajes de error al fallar el login de usuario. </p>
<p><a href="http://www.dwug.com/demos/php_auth/index.php">Podeis ver un ejemplo aquí</a> (usuario: DWUG / password: DWUG) </p>
<p>También existe un archivo listo para su uso:<br />
<a href="http://www.dwug.com/archivos/descargar.php?archivo=autentificacion_http.zip">http://www.dwug.com/archivos/descargar.php?archivo=autentificacion_http.zip</a></p>
<p><!--442c48bf2e4c893c118a4be855347be5--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dwug.es/go/215/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Crear tarjetas virtuales con DW y PHP</title>
		<link>http://www.dwug.es/go/168</link>
		<comments>http://www.dwug.es/go/168#comments</comments>
		<pubDate>Sat, 19 Jun 2004 03:47:48 +0000</pubDate>
		<dc:creator>Andres Cayon</dc:creator>
				<category><![CDATA[Dreamweaver]]></category>
		<category><![CDATA[PHP/MySQL]]></category>
		<category><![CDATA[Tutoriales]]></category>

		<guid isPermaLink="false">http://beta.dwug.com/go/168</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[]]></content:encoded>
			<wfw:commentRss>http://www.dwug.es/go/168/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
