2.5. Enviando datos desde WML
Una aplicación WAP es prácticamente idéntica a una aplicación WEB, y en cierta forma se le puede
considerar como una "extensión" de esta puesto que logra la aplicación WEB este disponible
en los dispositivos móviles.
Como toda aplicación, es necesario tener acceso a Bases de datos, y en terminos generales, esas
capacidades van determinadas por las características del lenguaje de programación utilizado. En
el caso de PHP, este cuenta con una cantidad de librerías para el manejo de operaciones con diversos
SGBD (Sistemas de Gestión de Bases de Datos), tales como Oracle, Informox, SQL Server,
Interbase o mySql. De igual manera también es posible utilizar ODBC (Open Data Base
Conectivity) para aquellos SGBD que no tengan una librería definida, tal es el caso de Microsfot
Access.
Si hablamos de JSP o Servlets, la tecnología utilizada para conseguir la conectividad a SGBD es
JDBC, tema que merece un capítulo aparte.
Hablando en terminos generales, las operaciones con Bases de Datos se resumen a las siguientes:
- Establecer una conexión con la Base de Datos
- Seleccionar la Base de Datos con la cual se va a trabajar
- Realizar las consultas SQL necesarias
- Cerrar la conexión con la Base de Datos
Para algunos SGBD como mySQL y MS SQL Server estas operaciones tiene sus respectivas funciones en las
librerías de PHP. En el caso de mysql tenemos:
- mysql_connect(): realiza una conexión con mySql
- mysql_close(): cierra una conexión con la base de datos
- mysql_select_db(): selecciona la base de datos con la que se va a trabajar
- mysql_query(): envía una consulta SQL a mySql
- mysql_result(): extrae un campo de un resultado de consulta SQL
- mysql_free_result(): libera la memoria utilizada por la consulta SQL
- mysql_num_rows(): entrega el número de registros de un resultado
En el caso de MS SQL Server tenemos:
- mssql_connect(): abre una conexión con MS SQL Server
- mssql_close(): cierra una conexión con MS SQL Server
- mssql_select_db(): selecciona una base de datos de MS SQL Server
- mssql_query(): envía una consulta SQL a MS SQL Server
- mssql_result(): obtiene un campo del resultado de la consulta SQL
- mssql_free_result(): libera la memoria utilizada por la consulta SQL
- mssql_num_rows(): entrega el número de registros de un resultado
Ahora realizaremos una pequeña demostración, para ello necesitamos un formulario WML como el
siguiente: Descargar código
Archivo bd.php
<?php
header("Content-type: text/vnd.wap.wml");
print "<?xml version="1.0"?>";
print "<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">";
?>
<wml>
<card id="uno">
<do type="accept">
<go href="#dos">
</do>
<p align="center"><b>Nombre</b><br />
<input type="text" name="nom" />
</p>
</card>
<card id="dos">
<do type="accept">
<go href="#tres">
</do>
<p align="center"><b>Login</b><br />
<input type="text" name="log" />
</p>
</card>
<card id="tres">
<do type="accept">
<go href="rtabd.php" method="post">
<postfield name="nombre" value="$(nom)" />
<postfield name="login" value="$(log)" />
</go>
</do>
<p>
<b>Datos</b><br />
Listo para enviar: $(nom), $(log)
</p>
</card>
</wml>
En este formulario se solicita al usuario que escriba su nombre y un login, luego esos datos son
enviados al servidor utilizando el método POST. Hay una diferencia en comparación con las aplicaciones
web. En primer lugar, en WML cada definición de un control de formulario genera automáticamente una
variabla cuyo nombre será el mismo del control, y además es conocido en todas las cards del
documento WML. Para enviar ese dato al servidor, se debe utilizar un postfield que es algo asi
como un sobre en el que empaquetamos datos para ser enviados. En le ejemplo, el cuadro de texto
llamado nom recibe el nombre que digita el usuario en la card uno. En la card tres se empaqueta
en el postfield llamado nombre. Las variables se acceden como variables globales dentro del
documento de manera similar que en PHP empezando con el signo $. No se debe confundir con las
variables en PHP. El resultado es:
El script PHP de respuesta es:
<?php
header("Content-type: text/vnd.wap.wml");
print "<?xml version="1.0"?>";
print "<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">";
?>
<wml>
<card id="uno">
<do type="accept">
<go href="#dos">
</do>
<p>
<?php
print "<b>Nombre:</b> $nombre<br />";
print "<b>Login:</b> $login<br />";
//Proceso de conexion a una base de datos mySql
$cx = mysql_connect("localhost","root","");
//Selección de la base de datos
mysql_select_db("misdatos");
//Sentencia SQL
$sql = "INSERT INTO usuario VALUES ('$nombre','$login')";
//Ejecución de la sentencia SQL
mysql_query($sql);
//Cierre de la conexión
mysql_close($cx);
print "Los datos fueron registrados con exito";
?>
</p>
</card>
|