viernes, 23 de mayo de 2008

NetBeans 6.1 + MySQL Server + Glassfish

Este matrimonio tuvo que haber sido sí o sí.
  • El NetBeans 6.1 ha madurado lo bastante como para que la gente lo use fácilmente
  • MySQL Server, un potente manejador de base de datos (si alguien dice que no MySQL no soporta stored procedures, triggers y relaciones, es porque no lo conoce)
  • Glassfish, un contenedor Java EE rápido, potente, escalable.

http://download.netbeans.org/netbeans/6.1/mysql_bundle/

No es que me paguen por hacer publicidad de este producto... sino que pienso que esto es sensacional.

martes, 6 de mayo de 2008

Usando NetBeans IDE Early Access for PHP

Acabo de bajar el NetBeans IDE Early Access for PHP para ver que tal es, y a medida que voy investigando, estaré redactando este post.


Previamente ya tengo instalado un sistema WAMP (Windows + Apache + MySQL + PHP) Mencioné algo de cómo se instala en el anterior post PHP en NetBeans 6.0

La instalación es sencilla, solo pide la ubicación del Java y donde se debe instalar el IDE. Lo demás solo son mensajes de confirmación

Creando un proyecto

Entramos al menú File > New Project ( o presionamos Shift + Ctrl + N)

Clic en Next. Luego nos preguntará el nombre del proyecto, donde se guardará, y cómo se publicará.

Esta versión tiene una variante con la versión Plugin del NetBeans 6.0. Antes, todo se trabajaba en una sola carpeta (como en los proyectos java EE) y cuando se ejecutaba, todos los archivos que estaban dentro del proyecto (imágenes, paginas, y todo archivo) se copiaba a la carpeta del servidor. Si el proyecto contenía varios archivos, los copiaba todos, así el cambio solo se ha hecho en uno de ellos.

En este Early Access, podemos definir donde se ubicarán los archivos fuentes del proyecto. Podemos crear una carpeta que tendrá acceso del apache utilizando un Alias, podemos usar la misma carpeta que nos proporciona NB y dejamos que los copie al directorio htdocs del Apache cuando se ejecute, o lo ponemos directamente en la carpeta htdocs. Haremos esta última opción.

Para ello modificamos el valor del campo "Project sources"
Asegurémonos que la carpeta sea la misma que se utilizará para publicar:

  • Project Source: C:\Archivos de programa\Apache Group\Apache2\htdocs\PhpProject1
  • Project URL: http://localhost/PhpProject1/
Esto es porque si se crea una carpeta dentro de htdocs, tomará el mismo nombre para publicarse en la web.

Clic en Finish.

Si quiere utilizar una carpeta para desarrollar y otra para publicar, entre a las propiedades del proyecto y haga esto

Note que está la carpeta "Source Folder" donde estarán los archivos .php y todo lo necesario para su web. Esto es lo que editarás con el IDE. Y existe la carpeta indicada en "Copy to folder" que es donde se copiará cuando ejecute el proyecto.

Configurando la base de datos

Algo realmente bueno en la versión 6.1 de NetBeans es que viene configurado nativamente para conectarse al servidor MySQL.

Presionamos Ctrl+5 para visualizar el panel de Servicios. Vemos que solo tiene un nodo llamado "Databases". Desplegamos ese nodo y veremos la opción para conectarse a MySQL. Podemos ver las propiedades de este nodo para establecer la conexión al servidor MySQL, es decir, el usuario y la contraseña:



Podemos crear una base de datos desde esa opción. Por ejemplo, creemos la base de datos "sistema". Ni bien se crea, nos pedirá crear una nueva conexión a esta base de datos (usuario, y contraseña). Al finalizar, podemos ver que se creó una nueva conexión en el árbol de "databases".



Creemos una tabla llamada "usuarios" y que tenga los campos:
  • id_usuario
  • contrasenia
  • nombre
Podemos hacerlo desde la opción de NetBeans "create table" y ejecutando un comando SQL:
create table usuarios(
id_usuario varchar(20) not null primary key,
contrasenia varchar(100),
nombre varchar(100))
Refrescamos el árbol, y veremos la tabla recién creada:
Insertemos unos cuantos valores a nuestra tabla
insert into usuarios values ('diego','diesil','Diego Silva'), ('juanpe','perez','Juan Perez')
y pasemos a la siguiente fase.

Creando una página de inicio de sesión

Presionamos Ctrl + 1 para visualizar el proyecto. Ya existe un archivo index.php. Lo que crearemos será una página PHP, para ello hacemos clic derecho sobre el ícono "source files" y seleccionamos New > PHP Web Page.

¿Qué diferencia hay entre PHP Web Pages y PHP File? PHP no solo se ejecuta en web, también en consola como si fuera un script .bat o de shell de Linux. En ambos casos se tratan de archivos de textos con extensión .php. Pero NetBeans nos va ahorrar el trabajo de escribir los tags necesarios para una web. Así que si creamos un PHP Web Page, NetBeans nos creará un archivo .php con las etiquetas básicas de un HTML, además del scriptlet para PHP.

Crearemos nuestro PHP Web Page con el nombre "login_form". Este .php debe cumplir dos funciones:
  1. Mostrar el formulario de inicio de sesión
  2. Validar los datos ingresados en el formulario.
Esto no es una clase de PHP, así que de una vez mostraré el código de login_form.php

Recomiendo escribir el código, no copiar y pegar. Al escribir el código veremos como NetBeans nos ayuda en la escritura de la sintaxis, variables, y funciones del PHP.
<?php
$op=$_POST["op"]; //obtenemos el valor de la accion que se esta haciendo
if (isset($op) && $op=="login") //si tiene valor y es 'login'...
$ok=validar_ingreso(); //.. validamos el ingreso
//sino.. mostrar el formulario
//$ok tendra TRUE si se logeo correctamente
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
</head>
<body>
<h1>Inicio de sesion</h1>
<?php if($op && !$ok){ //si no se logeo correctamente, mostrar un mensaje de error
print("Usuario o contraseña errónea");
} ?>
<form method="post" action="<?php print($_SERVER["PHP_SELF"]);?>">
<input type="hidden" name="op" value="login"/>
usuario:<input type="text" name="usuario"/><br/>
contrase&ntilde;a: <input type="password" name="contrasenia"/><br/>
<input type="submit" value="Entrar"/>
</form>
</body>
</html>
<?php //se pueden poner scriplets en cualqueir parte del php
function validar_ingreso(){
$usuario=$_POST["usuario"]; //obtengo el parametro usuario del formulario...
$contrasenia=$_POST["contrasenia"]; //... y la contrasenia
$conn=mysql_connect("localhost", "root", "adminadmin") or die (mysql_error($conn)); //nos conectamos a la base de atos
mysql_select_db("sistema", $conn) or die (mysql_error($conn)); //cambiamos de base de datos
//creamos un comando SQL, notar que si pongo comillas dobles, el valor de las variables
// son interpretadas como parte de la cadena
$query="SELECT * FROM usuarios WHERE id_usuario='$usuario' AND contrasenia='$contrasenia'";
$res=mysql_query($query, $conn) or die (mysql_error($conn)); //ejecuto el comando

if ($res ){ //.. si se ejecuto correctamente, el valor de $res no es falso

if ($reg=mysql_fetch_object($res)){ //obtengo todo el registro como un objeto
session_start(); //inicio las variables de sesion...
$_SESSION["usuario"]=$reg; //.. y almaceno el valor del objeto en la sesion
header("Location: index.php"); //y redirecciono al index de la aplicacion
mysql_close($conn);// cierro la conexion a la base de datos
return true; //termino todo correctamente
}
}
mysql_close($conn);// cierro la conexion a la base de datos
//si no devuelvo nada, la funcion retornara false.
}
?>

Bueno, esto hace el logeo, ahora la parte más interesante debería ser la página index.php
Si no se ha iniciado sesión, deberá reenviar al formulario de inicio de sesión, y si ya inicio sesión, debería mostrar el nombre.

Hemos visto que en login_form.php, después de validar el usuario se guarda un objeto en una variable de sesión llamada "usuario". Pues bien, lo que haremos será verificar si existe esa variable de sesión de tal manera obtener el objeto que guardamos y mostrar el nombre del usuario que acaba de iniciar sesión.

Este es el contenido del index.php
<?php session_start();
$reg=$_SESSION["usuario"];
if (!isset($reg))
header("Location: login_form.php");
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
</head>
<body>
<?php

print("Hola ".$reg->nombre);
?>
</body>
</html>

Ejecutando el proyecto

Ejecutemos el proyecto y tratemos de ingresar a http://localhost/PhpProject1/. Automáticamente nos reenviará al formulario de inicio de sesión


Ingresamos los valores correctos para iniciar una sesión de usuario según nuestra tabla usuarios, y veremos que nos redirecciona al index.php y nos muestra el nombre del usuario.
Y si tratamos de abrir una nueva ventana (del mismo navegador) e ingresamos a la misma dirección web, ya no nos mostrará el formulario de inicio de sesión...

... porque ya iniciamos la sesión en la otra ventana del mismo navegador

Finalmente

A mi parecer, esta versión mejorada del IDE para PHP ayuda notablemente en la edición de proyectos PHP, los autocomplete de código son mucho más rápidos que la versión para NetBeans 6.0 y la documentación está más completa. Esperemos que pronto lo tengan disponible para NetBeans 6.1

Luego haré un post sobre cómo depurar la ejecución del PHP desde NetBeans.

NetBeans IDE Early Access for PHP

Se encuentra disponible NetBeans IDE Early Access for PHP que es el IDE NetBeans exclusivamente para desarrollar en PHP.

Para usarlo, se necesita lo siguiente:
  • El IDE NetBeans Early Access for PHP, que se encuentra aquí.
  • Un servidor Web, de preferencia Apache Server.
  • El PHP 5.0.
  • Y, opcionalmente, el xdebug que es el depurador de PHP 5.0 y se puede encontrar aquí.
Se puede obtener el MySQL + PHP + Apache utilizando algún paquete WAMP que consiste en un conjunto de software que contiene Apache + MySQL + PHP para Windows.

Posteriormente haré un post mencionando como usar el NetBeans IDE Early Access for PHP.