II) Conexión con datos en la nube (III)
Symfony
Versión 1.0

Aplicaciones móviles para emprendedores

Aplicaciones móviles para emprendedores

Conexión con datos en la nube (III)

Contenido: Conectando con una base de datos en la nube Tiempo estimado: 120’

Resumen

Instalaremos un servidor web y una base de datos en la nube y conectaremos con el desde nuestro dispositivo móvil. ¿Qué debo conocer?
Para la clase de hoy solo será neceario saber navegar por internet.

¿Qué voy a aprender?

  • Aprenderemos a instalar un servidor y a conectar con el desde un dispositivo móvil o escritorio.

Instalación del servidor Apache en una instancia EC2 t1.micro Amazon Linux AMI:


> sudo su
# yum install httpd
# chkconfig --levels 235 httpd on
# service httpd restart

Instalación de la base de datos MySQL:

# yum install mysql mysql-server
# service mysqld start
# /usr/bin/mysqladmin -u root password 'cmobile2013'
# /usr/bin/mysql_secure_installation

Intalación de PhpMyAdmin:

# yum install php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc
# yum install lynx
# lynx http://www.phpmyadmin.net

A Continuación localizaremos el fichero a descargar, en nuestro caso phpMyAdmin-4.0.9-all-languages.tar.gz, y continuaremos con los siguiente pasos:

# tar xvfz phpMyAdmin-4.0.9-all-languages.tar.gz
# mv phpMyAdmin-4.0.9-all-languages phpMyAdmin
# mv phpMyAdmin /var/www/html/.
# cd /var/www/html
# chcon -R -v --type=httpd_sys_content_t phpMyAdmin/*
# yum -y install php-mbstring php-mcryt
# service httpd restart
# service httpd graceful


Una vez instalado phpMyAdmin, accederemos con el usuario 'root' y el password que asignamos anteriormente. En nuestro caso 'cmobile2013'. A continuación crearemos la base de datos 'cmobile' en la que crearemos la siguiente tabla, copiando el código sobre la pestaña SQL. Puede consultar más información sobre este ejemplo en el libro "Learn Raspberry Pi with Linux".


create table todolist (
idnumber INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
description VARCHAR(200),
owner VARCHAR(40),
date DATE,
location VARCHAR(40),
importance VARCHAR(10),
creator VARCHAR(40)
);

Comprobamos si la conexión se ha reliazado correctamente:


<?php
$mysqli = new mysqli('localhost', 'root', 'cmobile2013', 'cmobile');
if ($mysqli->connect_error) {
die('Connect Error (' . $mysqli->connect_errno . ') '
. $mysqli->connect_error);
}
$mysqli->close();
?>

Este código crea una conexión con la base de datos 'cmobile' que se encuentra en el ordenador local (localhost), con el usuario root y el password cmobile2013. Si el sistema no muestra ningún mensaje de error significa que la conexión se ha realizado correctamente. Por último se cierra la conexión para evitar que quede abirta después de su uso consumiendo recursos.


El siguiente código muestra una página web además de realizar la conexión con la base de datos:


<html>
<head>
<title>Pi Brand - Todo List App
</head>
<body>
<h1>Mobile Todo List App
<?php
$mysqli = new mysqli('localhost', 'root', 'cmobile2013', 'cmobile');
if ($mysqli->connect_error) {
die('Connect Error (' . $mysqli->connect_errno . ') '
. $mysqli->connect_error);
}
$mysqli->close();
?>



Mostrar en contenido de la base de datos
El siguiente esquema nos servirá para mostrar el contenido de la base de datos en una tabla:


 <table>
<tr>
<th>Description</th>
<th>Owner</th>
<th>Due Date</th>
<th>Location</th>
<th>Importance</th>
<th>Creator</th>
</tr>
...
</table>

Este es el código PHP que selecciona los datos de la base de datos y muestra una tabla con el contenido:


<?php
$result = $mysqli->query("SELECT * FROM todolist");
while($row = $result->fetch_assoc()){
print "<tr>";
print "<td>".$row["description"]."</td>";
print "<td>".$row["owner"]."</td>";
print "<td>".$row["date"]."</td>";
print "<td>".$row["location"]."</td>";
print "<td>".$row["importance"]."</td>";
print "<td>".$row["creator"]."</td>";
print "</tr>";
}
?>

La variable $result contendrá el resultado de la consulta en lenguaje SQL 'SELECT * FROM todolist". Cada vez que ejecutamos '$result->fetch_assoc()' obtenemos una nueva fila de la tabla. No debemos olvidar cerrar la conexión con '$mysqli->close();' al final del bloque.

...
<body>
<h1>Mobile Todo List App</h1>

<?php
$mysqli = new mysqli('localhost', 'root', 'cmobile2013', 'cmobile');
if ($mysqli->connect_error) {
die('Connect Error (' . $mysqli->connect_errno . ') '
. $mysqli->connect_error);
}
?>

<table>
<tr>
<th>Description</th>
<th>Owner</th>
<th>Due Date</th>
<th>Location</th>
<th>Importance</th>
<th>Creator</th>
</tr>

<?php
$result = $mysqli->query("SELECT * FROM todolist");
while($row = $result->fetch_assoc()){
print "<tr>";
print "<td>".$row["description"]."</td>";
print "<td>".$row["owner"]."</td>";
print "<td>".$row["date"]."</td>";
print "<td>".$row["location"]."</td>";
print "<td>".$row["importance"]."</td>";
print "<td>".$row["creator"]."</td>";
print "</tr>";
}
$mysqli->close();
?>

</table>
</body>
</html>

Insección de datos en la nube
A continuación tenemos el código HTML para la creación del formulario de inserción de datos:

...
</table>
<form action="index.php" method="POST">
<input type="hidden" name="action" value="insert" />
Description: <input name="description" /><br/>
Owner: <input name="owner" /><br/>
Date: <input name="date" /><br/>
Location: <input name="location" /><br/>
Importance: <input name="importance" /><br/>
Creator: <input name="creator" /><br/>
<input type="submit" />
</form>
</body>
</html>

A continuación tenemos el código PHP para realizar la inserción en la base de datos a partir de los datos del formulario:

if(isset($_REQUEST["action"])){
   switch($_REQUEST["action"]){
   case "insert":
      $SQL="INSERT INTO todolist (description, owner, date, location, importance, creator)
      VALUES (";
         $SQL=$SQL."'".$_REQUEST["description"]."',";
         $SQL=$SQL."'".$_REQUEST["owner"]."',";
         $SQL=$SQL."'".$_REQUEST["date"]."',";
         $SQL=$SQL."'".$_REQUEST["location"]."',";
         $SQL=$SQL."'".$_REQUEST["importance"]."',";
         $SQL=$SQL."'".$_REQUEST["creator"]."'";
         $SQL=$SQL.");";

		 if ($mysqli->query($SQL)=== FALSE) {
            printf("Error – Unable to insert data to table " . $mysqli->error);
         }
     break;
     case "delete":
        print "Delete function yet to be added!";
     break;
   }
}

Utilizando la siguiente linea componemos la consuta en la variable $SQL.

$SQL=$SQL."'".$_REQUEST["description"]."',";

Precaución con la seguridad: cuando leemos datos de formularios es importante utilizar la función mysqli_real_escape_string para evitar posible ataques por inclusión de código SQL.

Eliminar registros de la base de datos
Para eliminar elementos de la base de datos utilizaremos el siguiente código:

...
<h1>Mobile Todo List App</h1>
<form action="index.php" method="POST">
<input type="hidden" name="action" value="delete" />
<table>
<tr>
<td></td>
...
</tr>
<?php
$result = $mysqli->query("SELECT * FROM todolist");
while($row= $result->fetch_assoc()){
print "<tr>";
print “<td><input type='checkbox' name='checkboxes[]' value='".$row[“idnumber"]."' /></td>";
print "<td>".$row["description"]."</td>";
print "<td>".$row["owner"]."</td>";
print "<td>".$row["date"]."</td>";
print "<td>".$row["location"]."</td>";
print "<td>".$row["importance"]."</td>";
print "<td>".$row["creator"]."</td>";
print "</tr>";
}
$mysqli->close();
?>
</table>
<input type="submit"/>
</form>

Código PHP para eliminar elementos de la base de datos a partir de la información del formulario HTML:

$SQL="DELETE FROM todolist WHERE";
for($i=0; $i < count($_REQUEST['checkboxes']); $i++){
$SQL=$SQL . " idnumber=" . $_REQUEST['checkboxes'][$i] . " or";
}
$SQL= rtrim($SQL, "or");
if ($mysqli->query($SQL)== FALSE) {
printf("Error Unable to delete value " . $mysqli->error);
}

Recursos:

Actividades: Un trabajos será requerido para evaluar esta clase.

  • Actividad 8: Realizaremos algunos ejemplos de conexión con una base de datos en la nube.