WAP Dinamico Basico

25

Click here to load reader

description

Programación básica de portales WAP dinámicos

Transcript of WAP Dinamico Basico

Page 1: WAP Dinamico Basico

Programación básica de portales WAP dinámicos

La creación de portales WAP dinámicos consta del uso de tres lenguajes de programación: WML, PHP y MySQL, por eso este breve manual posee una explicación básica de cada uno de ellos, además, cada lenguaje cuenta con ejemplos y un análisis de los mismos, de esta manera intento hacer la lectura lo mas amena posible. Sinceramente espero les sea útil.

Guillermo Alejandro Gallardo Diez.

PHP

Guillermo Alejandro Gallardo Diez, 2008

Page 2: WAP Dinamico Basico

PHP es un lenguaje que se procesa del lado del servidor, esto quiere decir que quien navegue nuestro sitio Web nunca lo verá, ya que el servidor interpretará el código, generará la página y se la enviará al usuario. Esto es así porque PHP permite, entre otras cosas, el acceso a bases de datos protegidas por contraseña. Si se mostrara el código fuente, cualquier persona podría leerla, anulando cualquier tipo de seguridad.

Por estos motivos es que debemos transformar nuestra computadora en un servidor, de otra manera no podríamos probar nuestros scripts (conjunto de instrucciones) PHP. Personalmente recomiendo Appserver, por su facilidad de instalación y uso.

Programación PHP

Para indicar que comienza un script PHP se utiliza “<?php”, y para indicar que el mismo finaliza “?>”

<?php--El código va aquí-- ?>

Luego de cada instrucción se debe agregar un “;”, indicando que allí finaliza la instrucción, esto es muy importante, ya que en caso de omitirse, el script no se ejecutara.

La función echo() nos permite escribir, mostrar un mensaje.

Variables: Toda variable debe estar antecedida por el signo “$”, esto es justamente, lo que indica que es una variable, diferenciándolas de las funciones.

$a = 3;

$cadena = “Esto es un texto”;

Vector:

$vector[‘1’,’2’];

Operadores Aritméticos y lógicos=

Guillermo Alejandro Gallardo Diez, 2008

Page 3: WAP Dinamico Basico

Matemáticos +,-,*, /

Concatenar textos . (Punto)

Comparación == igual

!= distinto<, >, <=, >= menor, mayor, menor o igual…

Lógicos&& And|| Or

Xor! Not

Toma de decisión y bucles:

Los comentarios van precedidos de “//”

Ejemplo PHP

<?php

Guillermo Alejandro Gallardo Diez, 2008

Toma de decisión:if (condición) { --- CODIGO ----} else { ---- CODIGO----}

Los bucles se determinan de la siguiente manera:while (condición) {--- CODIGO ----}for (inicio; limite; incremento o decremento){}

Page 4: WAP Dinamico Basico

//declaramos variables$var1 = 2;$var2 = 5;

//Realizamos operaciones$resultado = $var1 + $var2;

//realizamos un buclefor ($i = 0 ; $i = 30 ; $i++) {--- CODIGO ----}

//mostramos el resultadoecho ( “El resultado es: “ . $resultado );?>

PHP + MYSQL

PHP utiliza funciones específicas para el manejo de bases de datos, a continuación, las más importantes con su correspondiente explicación.

mysql_connect($mysql_host,$mysql_user,$mysql_password);mysql_select_db($mysql_database);$consulta = mysql_query("SELECT * FROM tabla WHERE campo1 LIKE '$var' ");$respuesta = mysql_fetch_array($consulta);

Guillermo Alejandro Gallardo Diez, 2008

Page 5: WAP Dinamico Basico

extract($respuesta);

mysql_connect: Con esta instrucción conectamos el sitio con nuestro servidor, se deben indicar tres parámetros: la dirección donde se encuentra el host, el usuario registrado, la contraseña del usuario.

mysql_select_db: Con esta instrucción seleccionaremos la base de datos, ya que puede existir más de una base de datos por servidor.

mysql_query: Se indica la consulta que se realizará en ese momento, en caso de ser un “SELECT” se obtendrá como respuesta un registro, solo uno.

mysql_fetch_array: Guarda en un array (vector) la respuesta dada por el servidor.

extract: Sirve para extraer los datos del array, para poder utilizarlos luego.

Ejemplo PHP + MYSQL

Poseemos un servidor local, cuyo usuario es: “root”, y su contraseña: “1234”, en este se posee la siguiente base de datos:

Nombre de Base de Datos: BD.Nombre de la Tabla: 3_c.

id_alumno alumno proyecto

Guillermo Alejandro Gallardo Diez, 2008

Page 6: WAP Dinamico Basico

01 Gallardo Proyecto Iris

01 Gallardo WAP Dinámico

02 Rinaldi MMR 64

Con el script PHP podremos obtener datos de ella:

Análisis:

Comienza el script PHP, se conecta la página con el servidor, indicando el host (“localhost”), el usuario (“root”), y la contraseña (“1234”); luego se selecciona la base de datos (“bd”).

$consulta = mysql_query("SELECT * FROM 3_c WHERE id_alumno LIKE '01' ")

Guillermo Alejandro Gallardo Diez, 2008

<?phpmysql_connect(‘localhost’ , ‘root’ , ‘1234’);mysql_select_db(‘bd’);

$consulta = mysql_query("SELECT * FROM 3_c WHERE id_alumno LIKE '01' ");$respu = mysql_fetch_array($consulta);extract($respu);echo(“El nombre del alumno cuya ID es 01 es: ” . $alumno );?>

<?phpmysql_connect(‘localhost’ , ‘root’ , ‘1234’);mysql_select_db(‘bd’);

Page 7: WAP Dinamico Basico

Se guarda en una variable la consulta.

$respu = mysql_fetch_array($consulta);

Se guarda en una variable la respuesta dada por el servidor.

extract($respu);

Se extrae la respuesta, a partir de esta instrucción, cada campo de la tabla pasa a ser almacenado en una variable con el mismo nombre del campo.

echo(“El nombre del alumno cuya ID es 01 es: ” . $alumno );?>

Se imprime en pantalla el texto: “El nombre del alumno cuya Id es 01 es: Gallardo”. Si se hubiese querido mostrar el proyecto, simplemente se debe escribir $proyecto. Recordemos que a partir de la función extract, los campos pasan a ser variables.

Script 2:

Nótese que la única diferencia con el anterior script es que la extracción de los datos se realiza dentro de un

Guillermo Alejandro Gallardo Diez, 2008

<?phpmysql_connect(‘localhost’ , ‘root’ , ‘1234’);mysql_select_db(‘bd’);

$consulta = mysql_query("SELECT * FROM 3_c WHERE id_alumno LIKE '01' ");

for ($i = 0 ; $i <= 2 ; $i++) {$respu = mysql_fetch_array($consulta);extract($respu);echo(“El alumno: ” . $alumno . “ trabaja en el proyecto:” . $proyecto );}?>

Page 8: WAP Dinamico Basico

bucle. Esto es así, porque la consulta genera una respuesta a la vez, y nosotros obtendremos dos respuestas.

Variables PHP, consultas MySQL:Supongamos que queremos realizar una consulta con MySQL utilizando variables de PHP, la

forma correcta de utilizarlo sería la siguiente:

SELECT * FROM tabla WHERE campo LIKE '$variable'

Nótese que la variable va entre comillas.

SELECT * FROM $tabla WHERE $campo LIKE '$variable'

En el caso de poseer la tabla, o el campo en una variable, ésta no va entre comillas.

Optimización MySQL:

Una manera de no crear bucles largos para recibir resultados de una consulta:

<?php

//-----variables para la conexión con el servidor--------

$host = "localhost";

$user = "root";

$db = "bd";

$pass = "root";

//-------------conexión al servidor--------------------------------

mysql_connect($host,$user,$pass);

mysql_select_db($db);

//----------------consulta----------------------------------

$consulta = mysql_query("SELECT * FROM tabla WHERE campo LIKE 'campo' ");

$nfilas = mysql_num_rows($consulta);

//----------bucle de respuesta----------------------

for ( $i == 0; $i < $nfilas; $i++ ){

Guillermo Alejandro Gallardo Diez, 2008

Page 9: WAP Dinamico Basico

$respuesta = mysql_fetch_array($consulta);

extract($respuesta);

echo("el campo contiene: " . $campo); }

?>

Nótese la utilización de la función mysql_num_rows($consulta), la misma sirve para saber el número de filas que devolverá nuestra consulta.

Uso de la función include:

Imaginemos que poseemos varias paginas php, cada una de ellas accede a la base de datos, por lo que deberemos repetir en todas la función mysql_connect y mysql_select_db. Para evitar tener que escribir varias veces las mismas líneas de código podemos utilizar la función include. Esta función llama a otro script y pega el mismo sobre la pagina deseada.

Ejemplo de la función include implementada:

Pagina conexion.php

<?php

$host = "localhost";

$user = "root";

$db = "bd";

$pass = "root";

mysql_connect($host,$user,$pass);

mysql_select_db($db);

?>

Cualquier otra pagina PHP

<?php

Include (“conexion.php”);

$consulta = mysql_query("SELECT * FROM tabla WHERE campo LIKE 'campo' ");

$nfilas = mysql_num_rows($consulta);

for ( $i == 0; $i < $nfilas; $i++ ){

Guillermo Alejandro Gallardo Diez, 2008

Page 10: WAP Dinamico Basico

$respuesta = mysql_fetch_array($consulta);

extract($respuesta);

echo("el campo contiene: " . $campo); } ?>

Al utilizar el include(“conexion.php”) dentro de cualquier pagina PHP, se incrustara el código necesario para conectarse a la base de datos. Esto además de ser cómodo, permite manejar todos los datos de la conexión desde un solo lugar, de esta manera, si alguna ves necesitamos cambiarnos de servidor, esto no será un problema.

MySQL

MySQL es un lenguaje que permite manipular bases de datos. Las instrucciones más comunes son las siguientes:

Obtener datos de la base de datos:

“SELECT (campo, *) FROM tabla WHERE nombre_del_campo LIKE ‘condición’ “

Insertar datos de la base de datos:

“INSERT INTO tabla VALUES ( ‘valor’ )”

Modificar datos de la base de datos:

“UPDATE tabla SET ‘campo` = 'valor' WHERE condición“

Guillermo Alejandro Gallardo Diez, 2008

Page 11: WAP Dinamico Basico

Borrar datos de la base de datos:

“DELETE FROM tabla WHERE ‘nombre_del_campo’ LIKE ‘condición’ “

Funciones MySQL.

Puede encontrar más información sobre MySQL en http://www.mysql.com/

mysql_affected_rows Devuelve el número de filas afectadas de la última operación MySQL

mysql_change_user Cambia el usuario conectado en la conexión activa

mysql_client_encoding __ Devuelve el nombre del juego de caracteres

mysql_close __ cierra el enlace con MySQL

mysql_connect __ Abre una conexión a un servidor MySQL

mysql_create_db __ Crea una base MySQL

mysql_data_seek __ Mueve el puntero interno

mysql_db_name __ Obtener datos de resultado

mysql_db_query __ Envia una sentencia MySQL al servidor

mysql_drop_db __ Borra una base de datos MySQL

mysql_errno __ Devuelve el número del mensaje de error de la última operación MySQL

mysql_error __ Devuelve el texto del mensaje de error de la última operación MySQL

mysql_escape_string __ Escapa una cadena para su uso en mysql_query_

mysql_fetch_array __ Extrae la fila de resultado como una matriz asociativa

mysql_fetch_assoc __ Recupera una fila de resultado como una matriz asociativa

mysql_fetch_field __ Extrae la información de una columna y la devuelve como un objeto_

Guillermo Alejandro Gallardo Diez, 2008

Page 12: WAP Dinamico Basico

mysql_fetch_lengths __ Devuelve la longitud de cada salida en un resultado

mysql_fetch_object __ Extrae una fila de resultado como un objeto

mysql_fetch_row __ Devuelve una fila de resultado como matriz

mysql_field_flags __ Devuelve los flags asociados con el campo especificado en un resultado

mysql_field_len __ Devuelve la longitud del campo especificado

mysql_field_name __ Devuelve el nombre del campo especificado en un resultado

mysql_field_seek __ Asigna el puntero del resultado al offset del campo especificado

mysql_field_table __ Devuelve el nombre de la tabla donde esta el campo especificado

mysql_field_type __ Devuelve el tipo del campo especificado en un resultado

mysql_free_result __ Libera la memoria del resultado

mysql_get_client_info __ Obtener información del cliente MySQL

mysql_get_host_info __ Obtener información de la máquina anfitriona MySQL

mysql_get_proto_info __ Obtener información del protocolo MySQL

mysql_get_server_info __ Obtener información del servidor MySQL

mysql_info __ Obtiene información sobre la consulta más reciente

mysql_insert_id __ Devuelve el identificador generado en la última llamada a INSERT

mysql_list_dbs __ Lista las bases de datos disponibles en el servidor MySQL

mysql_list_fields __ Lista los campos del resultado de MySQL

mysql_list_processes __ Lista los procesos MySQL

mysql_list_tables __ Lista las tablas en una base de datos MySQL

mysql_num_fields __ devuelve el numero de campos de un resultado

mysql_num_rows __ Devuelve el numero de filas de un resultado

mysql_pconnect __ Abre una conexión persistente al servidor MySQL

mysql_ping __ Efectuar un chequeo de respuesta (ping) sobre una conexión de servidor o reconectarse si no hay conexión

mysql_query __ Envia una sentencia SQL a MySQL

mysql_real_escape_string __ Escapa caracteres especiales de una cadena para su uso en una sentencia SQL, tomando en cuanto el juego de caracteres actual de la conexión_

mysql_result __ Devuelve datos de un resultado

mysql_select_db __ Selecciona un base de datos MySQL

Guillermo Alejandro Gallardo Diez, 2008

Page 13: WAP Dinamico Basico

mysql_stat __ Obtener el status actual del sistema

mysql_tablename __ Devuelve el nombre de la tabla de un campo

mysql_thread_id __ Devuelve el ID del hilo actual

mysql_unbuffered_query __ Envía una consulta SQL a MySQL, sin recuperar ni colocar en búfer las filas de resultado

Portales WAP

Los portales WAP poseen las mismas etiquetas (salvando pequeñas excepciones) que HTML, por lo que se aconseja estudiar HTML para comprender mejor el lenguaje WML.

Cualquier servidor puede albergar un portal WAP, solo es necesario incluir los MiME TYPES correctos.

La extensión del archivo que contiene el portal WAP es “.wml”

Estructura portal WAP:

<?xml version="1.0" ?><!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.3//EN" "http://www.wapforum.org/DTD/wml13.dtd"><wml><card id="card1" title="Ingrese DNI"><p>Este es un texto en un Portal Wap<a href="imagen.php"> Esto es un link en WAP </a></p></card></wml>

Guillermo Alejandro Gallardo Diez, 2008

Page 14: WAP Dinamico Basico

Análisis:

<?xml versión=”1.0” ?>Se indica que versión de xml se esta utilizando.

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.3//EN" "http://www.wapforum.org/DTD/wml13.dtd">

Con esta linea se indica el tipo de documento, esto permite validar el contenido del portal, es muy importante

<wml>Indica que comienza el contenido del portal

<card id="card1" title="Ingrese DNI">Se indica el comienzo de la Card denominada “card1”, cuyo titulo es “Ingrese DNI”

<p>Esta etiqueta es importante, sin ella el contenido del portal podría mostrarse incorrectamente en

ciertos modelos de celular.

Este es un texto en un Portal Wap<a href="imagen.php"> Esto es un link en WAP </a>

El contenido del portal es un pequeño texto y un hipervínculo.

</p></card></wml>

Se cierra el párrafo/contenido ( </p>), se cierra la carta (</card>), y el portal (</wml>).

Notese que ni <? Xml… ?> ni <!DOCTYPE… > se cierran, ya que son etiquetas que solo brindan información al dispositivo móvil.

Portales WAP Dinámicos:

Guillermo Alejandro Gallardo Diez, 2008

Page 15: WAP Dinamico Basico

Se pueden incluir scripts PHP dentro de los portales WAP, lo cual permite hacerlos completamente dinámicos, habilitando (entre otras cosas) el manejo de Bases de Datos, la manipulación de Imágenes, la creación de Archivos, etc…

La extensión del archivo que posee tanto WAP como PHP es “.php”, osea, lo que en realidad se hace es crear una pagina PHP y se la modifica para transformarla en WAP.

Estructura portal WAP Dinámico:

<?phpheader("Content-type: text/vnd.wap.wml");header("Cache-Control: no-cache, must-revalidate");header("Pragma: no-cache");echo('<?xml version="1.0"?>');?>

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.3//EN" "http://www.wapforum.org/DTD/wml13.dtd">

<wml><card id="card1" title="Dinamico"><p>Realizaremos una sencilla suma en PHP, la misma tiene como resultado : <?php$a = 4;$c = 5;echo ($a + $c);?></p></card></wml>

<?phpdie;?>

Análisis:

<?php

Guillermo Alejandro Gallardo Diez, 2008

Page 16: WAP Dinamico Basico

header("Content-type: text/vnd.wap.wml");header("Cache-Control: no-cache, must-revalidate");header("Pragma: no-cache");echo('<?xml version="1.0"?>'); ?>

Comienza el código PHP, se indica por medio de headers el tipo de contenido de la pagina, de esta manera el servidor podrá enviar los datos de forma correcta a los celulares, sin este script PHP el

celular no puede leer la pagina, y el resto del código PHP no se ejecutara .

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.3//EN" "http://www.wapforum.org/DTD/wml13.dtd">

Se indica el DOCTYPE

<wml><card id="card1" title="Dinamico">

<p>Indica que comienza el contenido del portal, comienza la Card denominada “card1”, cuyo titulo es

“Dinamico”, y se abre la etiqueta “<p>”, recordemos que sin ella el contenido del portal podría mostrarse incorrectamente en ciertos modelos de celular.

Realizaremos una sencilla suma en PHP, la misma tiene como resultado : <?php$a = 4;$c = 5;echo ($a + $c );?>

El contenido del portal es un sencillo código php, el cual ejecuta la suma de dos numeros.

</p></card></wml>

Se cierra el párrafo/contenido ( </p>), se cierra la carta (</card>), y el portal (</wml>)

<?phpdie;

?>

Guillermo Alejandro Gallardo Diez, 2008

Page 17: WAP Dinamico Basico

Este pequeño código, el cual se encuentra inmediatamente luego de el cierre de la etiqueta <wml> es muy útil, con el logramos que nuestro servidor no agrege información innecesaria, como por ej.

Código Javascript que cuente visitas en el sitio, etc. Con el comando die se deja de ejecutar el portal WAP.

MYSQL en portales WAP dinámicos:

El manejo de Bases de Datos en portales WAP se realiza de la misma manera que en HTML, de manera que dominando la herramienta PHP y creando una base de datos en MYSQL ya estamos listos para realizar portales WAP Dinámicos, a continuación un pequeño ejemplo:

Supongamos que poseemos una base de datos MYSQL denominada “bd”, cuyo contenido es la tabla “tabla”, la cual contiene un solo campo llamado “campo1”. Con el siguiente código podremos leer su contenido.

Guillermo Alejandro Gallardo Diez, 2008

Page 18: WAP Dinamico Basico

<?phpheader("Content-type: text/vnd.wap.wml");header("Cache-Control: no-cache, must-revalidate");header("Pragma: no-cache");echo('<?xml version="1.0"?>');?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.3//EN" "http://www.wapforum.org/DTD/wml13.dtd">

<wml><card id="card1" title="dinamico"><p>

<?php$mysql_host = "localhost";$mysql_database = "bd";$mysql_user = "root";$mysql_password = "root";

mysql_connect($mysql_host,$mysql_user,$mysql_password);mysql_select_db($mysql_database) or die ("es la base de datos");

$consulta = mysql_query("SELECT * FROM tabla WHERE campo1 LIKE '99999999' ");$respu = mysql_fetch_array($consulta);extract($respu);echo (“Datos extraidos de la base de datos:” . $campo1 );?>

</p> </card> </wml>

<?phpdie; ?>

Análisis:

<?phpheader("Content-type: text/vnd.wap.wml");header("Cache-Control: no-cache, must-revalidate");header("Pragma: no-cache");echo('<?xml version="1.0"?>');?>

Guillermo Alejandro Gallardo Diez, 2008

Page 19: WAP Dinamico Basico

Comienza el código PHP, se indica por medio de headers el tipo de contenido de la pagina, de esta manera el servidor podrá enviar los datos de forma correcta a los celulares, sin este script PHP el

celular no puede leer la pagina, y el resto del código PHP no se ejecutara.

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.3//EN" "http://www.wapforum.org/DTD/wml13.dtd">

Se indica el DOCTYPE

<wml><card id="card1" title="Dinamico">

<p>Indica que comienza el contenido del portal, comienza la Card denominada “card1”, cuyo titulo es

“Dinamico”, y se abre la etiqueta “<p>”, recordemos que sin ella el contenido del portal podría mostrarse incorrectamente en ciertos modelos de celular.

<?php$mysql_host = "localhost";$mysql_database = "bd";$mysql_user = "root";$mysql_password = "root";

mysql_connect($mysql_host,$mysql_user,$mysql_password);mysql_select_db($mysql_database);

$consulta = mysql_query("SELECT * FROM tabla WHERE dni LIKE '99999999' ");$respu = mysql_fetch_array($consulta);extract($respu);echo (“datos extraidos de la base de datos:” . $campo1 );?>

El contenido del portal es un script PHP, el mismo se conecta con la base de datos y realiza una consulta, podrán notar que es el mismo código que se utilizaría en un sitio WEB común.

</p></card></wml>

Se cierra el párrafo/contenido ( </p>), se cierra la carta (</card>), y el portal (</wml>)

<?phpdie;

Guillermo Alejandro Gallardo Diez, 2008

Page 20: WAP Dinamico Basico

?>Este pequeño código, el cual se encuentra inmediatamente luego de el cierre de la etiqueta <wml> es muy útil, con el logramos que nuestro servidor no agregue información innecesaria, como por ej. Código Javascript que cuente visitas en el sitio, etc. Con el comando die se deja de ejecutar el

portal WAP.

NOTAS FINALES:De la misma manera que se puede acceder a una base de

datos, se puede agregar cualquier script PHP, dado que lo que en realidad se hace es generar una pagina PHP e indicar en los headers que es un portal WAP, permitiendo agregar cualquier instrucción PHP existente.

Agradecimientos: A José Luís Verga y Fabián Fernando Sotelo, mucho mas que simples profesores.

Guillermo Alejandro Gallardo Diez, 2008