Error ** Unable to load Mozilla for hosted mode ** en Eclipse con plugin GWT

September 8th, 2009

Una vez instalado el plugin para GWT de Eclipse, al crear un nuevo proyecto y pinchar en él con el botón derecho indicándo Debug As > Web Application, obtenemos el error:

** Unable to load Mozilla for hosted mode **

la solución más común a este error, es que no tenemos instalada la librería libstdc++5. Para solucionarlo, podemos bajarnos el paquete compat-libstdc++-33-3.2.3-47.fc4.i386.rpm disponible en http://rpm.pbone.net.

Ver dónde ha instalado fedora una aplicación

August 13th, 2009

Símplemete decir:

rpm -ql nombre_a_buscar

donde q es de query y l de last

Poner teclado en español para NetBeans IDE 6.5 con Fedora

February 25th, 2009

Cuando instalamos NetBeans, y vamos a programar con él por primera vez, nos encontramos con que no podemos escribir ¡las llaves!, y más símbolos… parece que el teclado no está en español. Comprobamos que el resto de aplicaciones de nuestro escritorio sí tienen el teclado en español… ¿qué está pasando?

El problema es que la máquina virtual de Java usa la configuración de SCIM que por defecto está en inglés.

La solución consiste en editar el fichero global de SCIM (/etc/scim/global) y cambiar el valor de SupportedUnicodeLocales a español:

/SupportedUnicodeLocales = es_ES.UTF-8

Cómo centrar una tabla con CSS

April 3rd, 2008

La solución más sencilla es envolver la tabla con un div:

<div class=’centraTabla’>

mitabla….

</div>

Y formatear ese div de la siguiente manera:

div.centraTabla{
text-align: center;
}

div.centraTabla table {
margin: 0 auto;
text-align: left;
}

Así de simple :)

Datos BLOB con PHP y MySQL (II)

February 22nd, 2008

En esta ocasión vamos a ver cómo podemos descargar desde nuestro navegador un archivo que tenemos almacenado en la base de datos.

Para ello, sólamente tenemos que jugar con las cabeceras de nuestra página:

header (”Content-Disposition: attachment; filename=”.$nombre);
header(”Content-Type: “.$extension);
header (”Content-Length: “.$size);
print $contenido;

Estos valores (previamente almacenados en la base de datos) los obtenemos de la variable $_FILES cuando estamos “subiendo” el archivo a la base de datos.

$nombre = $_FILES['userfile']['name'];
$extension = $_FILES['userfile']['type'];
$tam = $_FILES['userfile']['size'];

Cómo evitar inyección SQL en PHP

January 15th, 2008

¿Qué es la inyección SQL?

Es una vulnerabilidad informática en la que se introduce código SQL malintencionado en los campos de un formulario.

Veámoslo con un ejemplo:

1) Tengo una sentencia SQL dentro de mi código, tal como esta:

$query = "SELECT * FROM Usuarios WHERE nombre = '$nombreUsuario' ";

$resul = mysql_query($query);

donde en nombreUsuario tengo el valor que recibido del usuario en el formulario.

2)Si el usuario, introduce “Pepito”, la sentencia que ejecutará la aplicación será:


$query = "SELECT * FROM Usuarios WHERE nombre = 'Pepito' ";

que se ejecutará sin problemas.

3) Imaginemos ahora que el usuario tiene un poco más de mala idea e introduce esto en el campo nombreUsuario del formulario :


"Pepito'; DROP TABLE Usuarios; SELECT * FROM Facturas";

4) La sentencia que ejecutará la aplicación será:


$query = "SELECT * FROM Usuarios WHERE nombre = 'Pepito'; DROP TABLE Usuarios; SELECT * FROM Facturas" ;

De forma que está eliminando datos de nuestra base de datos, y accediendo a datos para los cuales en un principio no debería de tener permiso.

¿Cómo lo solucionamos?

PHP nos facilita la función mysql_real_escape_string(string $cadena_no_escapada [, resource $id_enlace].

Usando esta función, nuestra consulta quedaría de la forma:


$query = sprintf("SELECT * FROM Usuarios WHERE nombre = '%s' ", mysql_real_escape_string($nombreUsuario) );

Puedes encontrar más información sobre este tema en la Wikipedia, en el siguiente enlace:

 http://es.wikipedia.org/wiki/Inyecci%C3%B3n_SQL

Cambiar el aspecto de un elemento Select

December 21st, 2007

Cambiar aspecto general

Para ello, sólamente tendremos que modificar el estilo del tag ’select’.

 

select{

width: 15em;
border: 1px solid #D9D9D9;

}

Cambiar la barra de desplazamiento

He encontrado una página desde la que podemos aprender a cambiar el color de nuestros elementos Select fácilmente:

http://iconico.com/CSSScrollbar/

Elegimos la combinación de colores que queremos utilizar, y el programita nos genera el CSS de nuestro elemento directamente.

NOTA: El único problema que tiene, es que no funciona en Firefox.

Dejo un pantallazo de la aplicación web para el que quiera verlo antes.

Pantallazo

Un resumen de los elementos que podemos modificar en la barra de desplazamiento:

  • scrollbar-arrow-color
  • scrollbar-3Dlight-color
  • scrollbar-darkshadow-color
  • scrollbar-face-color
  • scrollbar-highlight-color
  • scrollbar-shadow-color
  • scrollbar-track-color

Por ejemplo, para cambiar la barra de desplazamiento de todos nuestros elementos select, haremos:

 

select{

scrollbar-arrow-color: #FFFFFF;
scrollbar-face-color: #8E6384;

}

Cambiar los elementos option

Para ello, simplemente hay que modificar las opciones del elemento ‘option’.

Por ejemplo, para cambiar el color del texto

 

option{

color: #746F7C;

}

Algo que puede ser bastante útil, es definir distintas clases para los elementos option. Por ejemplo supongamos que queremos hacer un elemento select en el que tengamos carreras universitarias. Podríamos diferenciar entre licenciaturas y diplomaturas, para que sea más fácil distinguirlas:

 

option.licenciatura{

background-color: red;

}

option.diplomatura{

background-color: blue;

}

En nuestro código HTML podríamos:

 

<select id=’estudios’>

<option class=’licenciatura’>Licenciatura en Bellas Artes</option>
<option class=’diplomatura’>Diplomado en Estadística</option>

</select>

De esta forma, de un simple vistazo, podremos diferenciar dos tipos de titulaciones en nuestro select.

Datos BLOB con PHP y mySQL

December 11th, 2007

Vamos a ver cómo podemos guardar ficheros de nuestro ordenador en la base de datos mySQL de nuestro servidor.

Lo primero que tenemos que hacer es crear la base de datos. Nos centramos en la tabla que contendrá nuestro archivo. La sentencia SQL para crear el archivo será:

CREATE TABLE Fichero(
id INT NOT NULL AUTO_INCREMENT,
contenido MEDIUMBLOB NOT NULL,
nombre VARCHAR(100) NOT NULL,
extension VARCHAR(5) NOT NULL,
titulo VARCHAR(120),
tamano INT NOT NULL,
PRIMARY KEY (id)) TYPE=INNODB;

El contenido del archivo se almacenará en el campo ‘contenido’, que es de tipo MEDIUMBLOB (permite almacenar archivos de hasta 16 MB).

Veamos ahora nuestro formulario:

<form enctype=”multipart/form-data” action=”$PHP_SELF” method=’post’>

<label for=’fichero’>Fichero a guardar:</label>
<input type=’file’ name=’userfile’ id=’fichero’/>

<input type=’submit’ value=’Enviar fichero’>

</form>

Para tratar el fichero que subimos, utilizamos el array $_FILES ($HTTP_POST_FILES p ara versiones anteriores a PHP 4.1.0) que contiene la información sobre el archivo enviado.

Para describir el contenido de $_FILES, veremos unos ejemplos con el valor ‘userfile’ como nombre de fichero (al igual que en el formulario).

$_FILES['userfile']['name']: nombre original del fichero en la máquina cliente

$_FILES['userfile']['type']: tipo MIME del fichero

$_FILES['userfile']['size']: tamaño en bytes del fichero

$_FILES['userfile']['tmp_name']: nombre del fichero temporal que se utiliza para almacenar en el servidor el archivo recibido.

Podemos comprobar facilmente si un archivo ha sido cargado a través de HTTP POST con la función is_uploaded_file($_FILES['userfile']['tmp_name']).

Por último, podemos hacer una función como la siguiente para almacenar los datos en la base de datos:

function addFichero(){
/*Recupero los datos característicos para introducirlos en la base de datos*/

$nombre = $_FILES['userfile']['name'];
$ext = $_FILES['userfile']['type'];
$tam = $_FILES['userfile']['size'];

$fp = fopen($_FILES['userfile']['tmp_name'], “rb”);
$contenido = fread($fp, $tam);
$contenido = addslashes($contenido);
fclose($fp);

/* Guardo los datos en la base de datos */
$sql = “INSERT INTO Fichero VALUES(”, ‘$contenido’, ‘$nombre’, ‘$ext’, ”, ‘$tam’)”;
if (!mysql_query ($sql))
die(”Error al añadir el fichero”);
else
echo “Se ha guardado correctamente el archivo”;
}

Es posible que necesitemos subir más de un archivo a nuestro servidor en un único formulario. Para ello, podemos usar un array para que sea más sencillo manejarlos:

<form enctype=”multipart/form-data” action=”$PHP_SELF” method=’post’>

<p>Subir estos archivos:</p>
<input type=’file’ name=’userfile[]‘/>
<input type=’file’ name=’userfile[]‘/>

<input type=’submit’ value=’Enviar fichero’>

</form>

De esta manera, almacenamos los ficheros como un array, al que podemos acceder así:

$_FILES['userfile']['name'][0] , $_FILES['userfile']['name'][1] , etc…

Puedes encontrar más información en:

  • http://es.php.net/manual/es/features.file-upload.php
  • http://es2.php.net/manual/es/function.is-uploaded-file.php