Está en la página 1de 23

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


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”;

Guillermo Alejandro Gallardo Diez, 2008


Vector:

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

Operadores Aritméticos y lógicos=

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:

Toma de decisión:

if (condición) { --- CODIGO ----} else { ----


CODIGO----}

Los bucles se determinan de la siguiente manera:

while (condición) {--- CODIGO ----}


Guillermo Alejandro Gallardo Diez, 2008
for (inicio; limite; incremento o decremento){}
Los comentarios van precedidos de “//”

Ejemplo PHP

<?php

//declaramos variables

$var1 = 2;

$var2 = 5;

//Realizamos operaciones

$resultado = $var1 + $var2;

//realizamos un bucle

for ($i = 0 ; $i = 30 ; $i++) {--- CODIGO


----}

//mostramos el resultado

echo ( “El resultado es: “ . $resultado );

?>

Guillermo Alejandro Gallardo Diez, 2008


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);

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.

Guillermo Alejandro Gallardo Diez, 2008


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:

Guillermo Alejandro Gallardo Diez, 2008


Nombre de Base de Datos: BD.

Nombre de la Tabla: 3_c.

id_alum alum proyecto


no no

01 Proyecto
Iris

01 Gallar WAP
do Dinámico

02 Rinaldi MMR 64

Con el script PHP podremos obtener datos de ella:

<?php

mysql_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 );

?>

Guillermo Alejandro Gallardo Diez, 2008


Análisis:

<?php
Comienza el script
mysql_connect(‘localhost’ , ‘root’ ,
PHP, se conecta la
‘1234’);
página con el
servidor, indicando el mysql_select_db(‘bd’);
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' ")

Se guarda en una variable la consulta.

$respu =
mysql_fetch_array($consulta);

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

extract($res
pu);

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 );

?>

Guillermo Alejandro Gallardo Diez, 2008


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:

<?php

mysql_connect(‘localhost’ , ‘root’ , ‘1234’);


Nótese mysql_select_db(‘bd’);
que la
única
$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 );

?> Guillermo Alejandro Gallardo Diez, 2008


diferencia con el anterior script es que la extracción de los datos se realiza
dentro de un 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

Guillermo Alejandro Gallardo Diez, 2008


LIKE 'campo' ");

$nfilas = mysql_num_rows($consulta);

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

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

$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”);

Guillermo Alejandro Gallardo Diez, 2008


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

$nfilas = mysql_num_rows($consulta);

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

$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’ )”

Guillermo Alejandro Gallardo Diez, 2008


Modificar datos de la base de datos:

“UPDATE tabla SET ‘campo` = 'valor' WHERE


condición“

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

Guillermo Alejandro Gallardo Diez, 2008


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_

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
Guillermo Alejandro Gallardo Diez, 2008
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

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


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.
Guillermo Alejandro Gallardo Diez, 2008
</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:

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:


<?php
header("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);
Guillermo Alejandro Gallardo Diez, 2008
?>
</p>
</card>
</wml>

<?php
die;
?>

Análisis:

<?php
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
Guillermo Alejandro Gallardo Diez, 2008
$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>)

<?
php
die;
?>
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.

Guillermo Alejandro Gallardo Diez, 2008


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.

<?php
header("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);
Guillermo Alejandro Gallardo Diez, 2008
echo (“Datos extraidos de la base de datos:” . $campo1 );
?>

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

<?php
die; ?>

Análisis:

<?php
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.

<?php
$mysql_host = "localhost";
$mysql_database = "bd";
$mysql_user = "root";
Guillermo Alejandro Gallardo Diez, 2008
$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>)

<?
php
die;
?>
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.

Guillermo Alejandro Gallardo Diez, 2008


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

También podría gustarte