|

HTML Purifier: filtro HTML en PHP

htmlpurifier.pngHTML Purifier es un filtro HTML para PHP que no solo elimina código XSS, sino que asegura que tus HTML cumplan los estándares.
A parte admite configurar el filtro con una serie de parámetros, pudiendo decir si se quiere que sea XHTML Strict o Transitional, HTML o XHTML, indicar el nivel de filtro.
HTML Purifier
Vía / dzone

links for 2007-06-22

XRegExp: ampliación de expresiones regulares en Javascript

XRegExp es una ampliación de Javascript para las expresiones regulares, las cuales en Javascript flaquean a la hora de los modificadores.
En este caso, añade los modificadores s y x, lo cual amplía el uso que podemos darle a las expresiones regulares. El modificador s permite que el punto “.”, que representa a cualquier carácter, represente también al salto de línea, el cual suele ignorar. El modificar x ignora los espacios en la expresión regular, y así poder crear unas expresiones regulares más legibles.
XRegExp
Vía / dzone

Laburo: buscador de empleo

Laburo es un buscador vertical especializado en el mercado laboral que pone a disposición del usuario la mayor base de datos de ofertas de empleo en habla hispana. Es un proyecto en el que he participado en su desarrollo, por lo que estoy bastante contento de poder presentarlo.
El proyecto ha sido desarrollado por Novoclick, una joven empresa respaldada por gente tan cualificada como José Luis Perdomo, fundador de Bitacoras.com
laburo1.png
Laburo está orientado a una audiencia muy definida, la de aquellos internautas en busca de empleo para abrirse camino en el terreno profesional o para mejorar sus condiciones laborales.
Laburo rastrea información y recopila ofertas de trabajo en sites especializados, foros de empleo, diarios electrónicos, anuncios clasificados, así como en otras muchas fuentes de información online, y remite al usuario a estas ofertas en la fuente original, derivando el tráfico, sirviendo de puente y conectando oferta y demanda. Porque ése es su principal objetivo: poner en contacto al aspirante con aquel que requiere de sus conocimientos y aptitudes.
laburo2.png
Los usuarios dispondrán de una página inicial en la que se muestran las últimas ofertas agrupadas por la fuente en la que se obtienen (Infojobs, Monster, …). Esta página es personalizable, pudiendo mover las cajas y seleccionar que fuente se muestra en cada caja.
El proyecto está realizado en LAMP, habiendo sido desarrollado completamente, sin necesidad de un CMS. En la fase inicial del proyecto participó Daniel Mota, al cual me gustaría reconocer su trabajo y felicitarle por ello, ha sido un placer trabajar laburear con él.
Laburo

links for 2007-06-21

|

Laboratorio: triggers y procedimientos almacenados en MySQL

Unas opciones no muy usadas cuando se trabaja con MySQL son los triggers y los procedimientos almacenados (stored procedures), supongo que a que es algo nuevo en MySQL y la gente no está acostumbrada a estas dos funcionalidades.

Vamos a mostrar un ejemplo de uso de triggers y procedimientos almacenados paso a paso. Quizás el ejemplo no sea el más correcto, o simplemente sea poco útil, pero lo importante es el uso en sí, no el ejemplo.

Nuestro sistema tendrá dos tablas, una con ventas y la otra con comisiones. En la primera se almacenarán cada venta que se realiza en un comercio, y en la segunda las comisiones que le corresponden a cada vendedor en el momento.

CREATE TABLE `ventas` (
`vendedor` int(11),
`producto` int(11),
`importe` float
)
CREATE TABLE `comisiones` (
`vendedor` int(11),
`comision` float
)

Las comisiones se calcula de una forma especial, le corresponde un porcentaje de las ventas según el tipo de producto, y es importante para los vendedores el que se sepa en cada momento qué comisiones lleva ganadas (esto es una justificación para no usar un cron o algo parecido).

Para calcular qué comisión le corresponde a un vendedor, calcularemos los porcentajes para cada tipo de producto vendido y luego lo añadiremos/actualizaremos en la tabla de comisiones. Todo se realizará en un procedimiento almacenado.

DELIMITER $$
DROP PROCEDURE IF EXISTS `test`.`sp_comisiones`$$
CREATE PROCEDURE `test`.`sp_comisiones` (IN mivendedor INT)
BEGIN
DECLARE micomision INT DEFAULT 0;
DECLARE suma INT;
DECLARE existe BOOL;
select IFNULL(sum(importe),0) into suma from ventas where producto = 1 and vendedor = mivendedor;
SET micomision = micomision + (suma * 0.15);
select IFNULL(sum(importe),0) into suma from ventas where producto = 2 and vendedor = mivendedor;
SET micomision = micomision + (suma * 0.1);
select IFNULL(sum(importe),0) into suma from ventas where producto = 3 and vendedor = mivendedor;
SET micomision = micomision + (suma * 0.2);
select count(1)>0 into existe from comisiones where vendedor = mivendedor;
if existe then
UPDATE comisiones set comision = comision+micomision where vendedor = mivendedor;
else
insert into comisiones (vendedor, comision) values (mivendedor, micomision);
end if;
END$$
DELIMITER ;

Ahora, para actualizar los datos de las comisiones usaremos un trigguer, así cuando se haga una venta (insert en la tabla ventas), se llamará al procedimiento almacenado (sp_comisiones), que recalculará la comisión para ese vendedor.

DELIMITER $$
DROP TRIGGER `test`.`tr_ventas_insert`$$
CREATE TRIGGER `test`.`tr_ventas_insert` AFTER INSERT on `test`.`ventas`
FOR EACH ROW BEGIN
call sp_comisiones(new.vendedor);
END$$
DELIMITER ;
|

PHPIDS: seguridad en tus aplicaciones

phpids.pngPHPIDS (PHP-Intrusion Detection System) es una librería que podemos añadir a nuestras aplicaciones realizadas en PHP, que nos ofrece capa de seguridad de forma sencilla. No evita ni filtra ataques contra nuestra aplicación, tan solo detecta cuando se produce un ataque y actúa como nosotros queremos que lo haga.
Basado en un conjunto de filtros aprobados y testeados, cada ataque tiene asignado un número que valora su impacto en nuestra aplicación, lo cual hace sencillo decidir que acción tomar contra el intento de ataque, lo cual puede ser un mensaje de aviso por correo a los desarrolladores, mostrar un aviso al atacante o finalizar la aplicación.
La integración con nuestra aplicación es sencilla.
PHPIDS
Vía / PHPDeveloper.org

Directorio de temas para WordPress

WP Themes Free es un directorio de temas para WordPress, para aquellos que no saben diseñar o no saben pasar un diseño a WordPress y quieren salir de los temas que ofrece por defecto.
wpthemesfree.png
Se pueden ver los últimos temas añadidos, los más populares, los más vistos, los más testeados, los más valorados y los más votados. A parte, estan organizados por categorías como adultos, negocios, entretenimiento… y organizados por propiedades: número de columnas, color, …
WP Themes Free
Vía / Digg

|

Ventajas de usar mysqli

A la hora de realizar aplicaciones PHP/MySQL, normalmente se suele utilizar la librería mysql, cuando existe la librería mysqli, la cual puede ser más eficiente.

Os paso 4 motivos que a mí me han parecido muy importantes:

  • Prepared statements: a parte de ser más cómodo a la hora de montar nuestras querys, ofrece mucha seguridad contra el SQL injected.
$mysqli = new $stmt = $mysqli->prepare("select usuario from usuarios where i = ?");
$stmt->bind_param('i',$id);
$stmt->execute();
  • Conexiones seguras: la posibilidad de usar mysqli_ssl_set() permite realizar conexiones seguras indicando detalles del certificado mediante los parámetros.
  • Múltiples querys: posibilidad de ejecutar varias querys separadas por punto y coma, en una conexión.
  • Interfaz orientado a objetos: esta característica permite al desarrollador ampliar el objeto para añadir nuevas funcionalidades más específicas. Por ejemplo se podrían separar los errores de operación (conexión) a los de desarrollo (querys mal formadas).

The Four Major Benefits of MySQLi

Vía / dzone