Paginado de resultados con PHP

Posted: julio 31st, 2008 | Author: | Filed under: PHP, Recursos Web | Tags: , , , | 2 Comments »

Ordenar los resultados en los listados suele ser un problema repetido y aburrido de solucionar. Tenemos que cortar la consulta de resultados, luego contar las páginas segun la cantidad de resultados por página, poner links de siguiente, anterior, etc, etc, etc…

En esta entrada les dejo un script para olvidarse de una vez de este tema, un script que se encarga de hacer todo el paginado por su cuenta, simplemente definimos algunos valores y problema solucionado.

Primero que nada el script: «Paginator». El sitio del proyecto lo encuentran en:
http://jpinedo.webcindario.com/scripts/paginator/

Descargan los dos archivos del script y lo primero que tenemos que hacer es configurar el script para que se conecte a la base de datos. Esto lo hacemos en el archivo: paginatorconf.inc.php. Verán que en este archivo definen servidor, usuario, contraseña y DB.

Hecho esto lo único que tenemos que hacer es preparar la consulta SQL tal como la usariamos normalmente, sin LIMIT ni nada. Veamos un ejemplo:

$_pagi_sql = «SELECT * FROM tabla ORDER BY nombre»;

$_pagi_cuantos = 50;
$_pagi_nav_num_enlaces = 5;

require(«paginatorconf.inc.php»);
require(«paginator.inc.php»);

Guardamos en una variable de nombre $_pagi_sql (este nombre es el que usa el script, sirve para no confundirse) la consulta, luego definimos el formato del paginado, es decir la cantidad de resultados por página y el numero de enlaces hacia las páginas de resultados, y llamamos a los dos archivos del paginator, primero al de configuración y luego a paginator.inc.php.

Luego de haber incluído el segundo archivo tendremos en la variable $_pagi_result el resultado de la consulta. Además tenemos otras variables que guardan todos los datos que necesitamos, como cantidad de resutlados, número de enlaces y demás, veamos como podemos desplegar la información:

<table>
<tr>
<th width=»3%»>N&ordm;</th>
<th>Nombre</th>
</tr>

<?
$i = $_pagi_desde;

while($row = mysql_fetch_array($_pagi_result)){
?>
<tr>
<td><?=$i?>.</td>
<td> <?=$row[‘nombre’]?></td>
</tr>

<?
$i++;
}
?>

<tfoot>
<tr><th colspan=2 width=100%>
Resultados: Desde <?=$_pagi_desde?> hasta <?=$_pagi_hasta?> (Total: <?=$_pagi_totalReg?>)
<br />Página: <?=$_pagi_navegacion?>
</th></tr>
</tfoot>

</table>

Recorremos los resultados obtenidos, y con la variable $_pagi_navegacion desplegamos la navegación con los links de siguiente, anterior y links directo a las páginas. así de simple :).

Para los casos en que utilizan variables GET para su sitio, no hay problema, ya que las variables GET que utiliza el navegador no borran las de ustedes, el script se encarga de propagar o «poner en su sitio» las variables GET que tenga la URL para no romper la misma ;).


Envío de mails desde PHP con smtp, autenticacion, ssl y otros.

Posted: julio 28th, 2008 | Author: | Filed under: PHP, Recursos Web | Tags: , , , , , | 46 Comments »

Enviar mails con PHP suele ser sencillo, utilizando la funcion mail() podemos hacerlo aunque no tenemos prácticamente fleixbilidad ni opciones. Casos típicos son cuando queremos enviar mails por smtp, utilizando una cuenta en particular, o nuestro servidor no tiene configurado un servidor local para PHP, o necesitamos una conexion SSL, etc.

Para estos casos podemos usar la clase phpmailer, que nos da todas estas opciones y más. La clase la pueden descargar de: phpmailer.codeworxtech.com

Lo único que necesitamos hacer luego de tener la clase descargada y colocada nuestro sitio, es incluir el archivo de la misma e instancia la clase:

require(«phpmailer/class.phpmailer.php»);
$mail = new PHPMailer();

Hecho esto pasamos a definir mail de origen, destino, nombre, etc.:

$mail->From     = $mailfrom; // Mail de origen
$mail->FromName = $name; // Nombre del que envia
$mail->AddAddress($para); // Mail destino, podemos agregar muchas direcciones
$mail->AddReplyTo($mailfrom); // Mail de respuesta

Luego definimos el contenido del mail:

$mail->WordWrap = 50; // Largo de las lineas
$mail->IsHTML(true); // Podemos incluir tags html
$mail->Subject  =  «Consulta formulario Web: $name»;
$mail->Body     =  «Nombre: $name \n<br />».
«Email: $mailfrom \n<br />».
«Tel: $tel \n<br />».
«Mensaje: $info \n<br />»;
$mail->AltBody  =  strip_tags($mail->Body); // Este es el contenido alternativo sin html

Podemos adjuntar archivos simplemente agregando los mismos de la siguiente forma:

$mail->AddAttachment(«nombredearchivo.txt»); // Ingresamos la ruta del archivo

Y ahora viene la parte divertida (no solo me pica el…errr), definimos el servidor que enviara el mail, podemos definir tipo de servidor, autenticacion, usuario, contraseña, etc. Vemos ejemplo de las posibilidades que tenemos.

Si vamos a enviar mail desde el servidor local sin configuración especial podemos usar:

$mail->Host     = ‘localhost’;

Si necesitamos utilizar una casilla de correo smtp, con user y pass:

$mail->IsSMTP(); // vamos a conectarnos a un servidor SMTP
$mail->Host = «mail.servidor.com»; // direccion del servidor
$mail->SMTPAuth = true; // usaremos autenticacion
$mail->Username = «info@servidor.com»; // usuario
$mail->Password = «pass»; // contraseña

Si necesitamos una conexion con SSL, por ejemplo para enviar un mail desde PHP con gmail:

$mail->Mailer = «smtp»;
$mail->Host = «ssl://smtp.gmail.com»;
$mail->Port = 465;
$mail->SMTPAuth = true;
$mail->Username = «burmauy@gmail.com»; // SMTP username
$mail->Password = «burmaUY123456»; // SMTP password

Como ven esta clase es muy flexible y nos olvidamos de tener que manejar nosotros mismos conexiones complejas o con cabeceras especiales. Podemos simplificarnos mucho la vida utilizando phpmailer para enviar mails.

Ya para enviar el correo, simplemente utilizamos la siguiente linea:

$mail->Send();

Podemos poner esa llinea dentro de un if para saber si quedo todo bien configurado y se pudo enviar el email, de la siguiente forma:

if ($mail->Send())
echo «Enviado»;
else
echo «Error en el envio de mail»;


URLs limpias en los sitios con Apache y archivos .htaccess

Posted: julio 23rd, 2008 | Author: | Filed under: PHP, Recursos Web | Tags: , , , | 2 Comments »

En cualquier sitio que requiera programación, ya sean noticias, productos, categorías, etc., necesitamos agregar URLs que tienen parámetros. Estos parámetros son los que indican a nuestro código la información a cargar, pero los buscadores no ven con buenos ojos estas consultas con parámetros. Por ejemplo:

http://www.sitio.com/noticias.php?date=20080201

Esta url además de no ser amigable para los buacadores no lo es para los usuarios. Si alguien busca en el historial y ve esa dirección no va a recordar fácilmente de que se trata.

Para poder llevar esta URL a algo mas prolijo utilizaremos mod_rewrite de Apache y un archivo .htaccess. Buscamos lograr una url como la siguiente:

http://www.sitio.com/noticias/2008/02/01

Primero que nada necesitamos saber si nuestro servidor Apache tiene habilitado mod_rewrite, para esto podemos ver en el archivo de configuración httpd.conf el cual debe tener descomentada la línea siguiente:

LoadModule rewrite_module modules/mod_rewrite.so

Nota para los que tengan Windows, pueden tener problemas al probar este módulo, en Linux anda a las mil maravillas.

En caso de que el servidor no soporte el módulo o que escriban mal el archivo .htaccess van a ver un mensaje de error por lo que es recomendable probar primero todo en un directorio separado del sitio principal para no bloquear todo haciendo pruebas. Si tuvieron que modificar el archivo httpd.conf van a necesitar reiniciar el servidor.

El siguiente paso es el de crear el archivo .htaccess, nuevamente los que tengan Windows pueden tener algun problema al intentar crear un archivo que empieza con un punto, lo que pueden hacer es abrir el bloc de notas y en Archivo > Guardar Como eligen «Todos los Archivos» y ponen el nombre .htaccess para guardar.

Empecemos con un archivo básico de ejemplo:

RewriteEngine On
RewriteBase /

RewriteRule ^login/ /login.php [L]

Lo que haremos será poner una URL en el navegador, pero queremos que nuestro script reciba el código como si nada hubiera sucedido, para esto reescribiremos las URLs. Las dos primeras líneas indican que vamos a activar el módulo de reescritura y luego indicamos la ruta para esta operación.

A continuación lo que hacemos es indicar nuestra primera regla de modificación, queremos que cuando alguien ingresa a www.nuestrositio.com/login/, en realidad lo envíe al archivo login.php. Para esto indicamos la palabra a buscar y luego indicamos el archivo php al cual se reenviará el pedido. Claro que esto sucede del lado del servidor, por lo que el visitante del sitio no ve nada «raro» al acceder.

Veamos ahora un ejemplo en el que queremos pasar parámetros en forma limpia a un archivo php:

RewriteRule ^noticias/([0-9]*)/ /noticias.php?id=$1 [L]

Podemos agregar una segunda regla, una por línea y manteniendo las dos primeras línea del archivo .htaccess. Esta nueva regla utiliza una cadena de texto «noticias» y luego una expresión regular para pasar al archivo php un parámetro como variable GET[‘id’].

La expresión regular de este ejemplo recibe números del 0 al 9 (el asterisco indica que pueden ser muchos) y los pasa al archivo noticias.php donde aparece la variable $1. Si tenemos varios parámetros podemos poner varias expresiones regulares y variables para cada una $1, $2, $3…

Vemos ahora un ejemplo en el cual pasamos letras también:

RewriteRule ^noticias/([a-zA-Z0-9\(\)+%_-]*)/ /noticias.php&title=$1 [L]

En este caso la expresión regular acepta letras de la «a» a la «z», de la «A» a la «Z» (las expresiones son sensibles a mayúsculas, por eso ponemos los dos casos), también acepta números así como algunos caracteres: ( ) + % _ –

Noten que para los paréntesis necesitamos utilizar la barra de escape «\»la cual indica que vamos a poner un caracter que la expresión puede «confundir» con otra cosa. Este caracter nos sirve para estos casos especiales.

Para seguir ahondando en ejemplos necesitamos tener un manejo de expresiones regulares, tema que escapa a esta entrada específica.


Wikileaks: publicar todos los secretos, sin piedad.

Posted: julio 3rd, 2008 | Author: | Filed under: Internet, Noticias, Software | Tags: , , , , , | 1 Comment »

Estamos dispuestos a publicar todos los secretos, aun aquellos que creemos nos dan seguridad? Todos los secretos, desde nuestros impuestos a manuales de tortura pasando por informacion tecnica de armamento y guiones de cine.

Este es el objetivo de Wikileaks, un sitio dedicado a publicar los secretos del mundo, con un objetivo, salvar al periodismo de su patético estado vegetal. En el sitio podremos encontrar desde documentos de como se vacio al estado de Kenya, a material clasificado del Pentágono para ocultar a prisioneros de Guantánamo torturados, así como pruebas de lavado de dinero por bancos de suiza.

Claro que todas estas publicaciones provocaron reacciones, juicios, demandas, amenazas e informes sobre la irresponsabilidad de este emprendimiento, lo cual unicamente provocó el crecimiento explosivo y el lanzamiento a la fama mundial del sitio. Bloqueado durante algunos días en Estados Unidos, duramente criticado por el Pentágono y demandado por corporaciones de todo el mundo, los administradores del sitio no se dejarían vencer tan fácilmente, con servidores distribuídos en todo el mundo y una masa de público que transformó en portavoz del mensaje el sitio se ha visto beneficiado por la atención de los medios y periodismo en general.

Los críticos del sitio plantean que los secretos son necesarios en el mundo actual y que el ideal planteado por Wikileaks es tonto e inocente. Claro que en un mundo donde la capacidad de comunicación se multiplica día a día, no se ven los efectos sobre la libertad de información y la investigación periodística crítica. Es esto lo que Wikileaks plantea salvar, de una forma directa y agresiva, pero clara, publicar todos los secretos sin piedad.