|     Inicio    |   |         |  |   FOROS      |  |      |      
   Elastix - VoIP B4A (Basic4Android) App inventor 2 PHP - MySQL
  Estación meteorológica B4J (Basic4Java) ADB Shell - Android Arduino
   AutoIt (Programación) Visual Basic Script (VBS) FireBase (BD autoactualizable) NodeMCU como Arduino
  Teleco - Emisora de A.M. Visual Basic Cosas de Windows Webs interesantes
Translate:
Búsqueda en este sitio:


Nuevo concurso para España, Argentina, Brasil, Chile, Colombia, Ecuador, México, Perú y Portugal.

App inventor 2 en español
Cómo programar los teléfonos móviles con Android
mediante App inventor 2 - Juan Antonio Villalpando

--- PHP y MySQL en App Inventor 2 --

Volver al índice del tutorial de PHP y MySQL

____________________________

370B.- Chat con MySQL y PHP. App Inventor.

p370B_chat_mysql.aia

- En un tutorial anterior comenté dos formas de comunicarse mediante PHP con una base de datos MySQL

- Hay dos formas de hacerlo:

- Una, los códigos que manejan la base de datos (INSERT INTO personas (nombre, edad, ciudad) VALUES ('juan', '22', 'jerez')"; están en el código de bloques de App inventor y los enviamos a un archivos PHP del servidor para que haga esa operación en la base de datos del servidor.

- Otra, en el código de bloques de App inventor se llama a un archivo PHP que se encuentra en el servidor y ese archivo tiene el código (INSERT INTO personas (nombre, edad, ciudad) VALUES ('juan', '22', 'jerez')" para que haga esa operación en la base de datos del servidor.

En esta ocasión vamos hacerlo con el segundo método, es decir los códigos de MySQL estarán en el archivo PHP.

______________________________________________

Nuestro ejemplo será la construcción de un Chat mediante App inventor, PHP y MySQL.

Este ejemplo es una adaptación de un código italiano.

_________________
- Creación de la Base de datos y las tablas.

- Entro en el cpanel de mi usuario: https://cpanel.hostinger.es me identifico.

- Entro en Bases De Datos / phpMyAdmin

- Como he indicado en otros, estoy utilizando solamente una Base de Datos comun para todos los ejemplos de los tutoriales, la base es: u798509677_comun

- Dentro de esta base, estoy creando una tabla para cada ejemplo. En este caso voy a crear la dos tablas: usuarios_registrados y charlas

- Pulso en Ingresar phpMyAdmin.

- Pulso en crear tabla. Observa que la base de datos es: u798509677_comun, en otros tutoriales hemos creado distintas tablas. En esta ocasión vamos a crear dos tablas más.

 

- Creacíón de las tablas: usuarios_registrados y charlas.

- Tabla: usuarios_registrados

- Dos columnas: usuario y clave
de Tipo VARCHAR para 12 caracteres.

- Tabla: charlas

Fíjate que id tiene marcado AUTO_INCREMENT y es Primaria.

CREATE TABLE $charlas(id INT(4) NOT NULL AUTO_INCREMENT PRIMARY KEY, usuario VARCHAR(12), mensaje VARCHAR(60), hora time, timestamp VARCHAR(20));

_________________
- Diseño.

 

_________________
- Bloques.

- Disponemos de tres botones, uno para registrar al usuario con su nombre y contraseña. Otro para conectar al usuario. Otro para enviar mensajes al chat.

_________________
- Archivos PHP.

conexion.php
<?php
// Juan Antonio Villalpando.
// KIO4.COM

// 1.- IDENTIFICACION nombre de la base, del usuario, clave y servidor
$db_host="mysql.hostinger.es";
$db_name="u798509677_comun";
$db_login="u798509677_juan";
$db_pswd="contraseña";

// 2.- CONEXION CON LA BASE DE DATOS
$link = new mysqli($db_host, $db_login, $db_pswd, $db_name);
?>

- Para que el usuario pueda utilizar el chat, debe estar previamente registrado. Con este código se puede registrar con un nombre y clave.

- Su usuario y clave se guardará en la tabla usuarios_registrados.

registro_de_usuario.php
<?php
// Juan Antonio Villalpando.
// KIO4.COM
// REGISTRO DE USUARIO

// Lee el archivo de conexión a la base de datos
include 'conexion.php';
header('Content-type: text/html;charset=utf-8');

// Lee los datos de usuario y clave enviada por App inventor. Es un usuario que se quiere registrar.
$usuario = $_GET[usuario];
$clave = $_GET[clave];

// Busca en toda la tabla usuarios_registrados si existe este usuario.
$orden = "SELECT * FROM usuarios_registrados WHERE usuario='$usuario'";      

//  Ejecuta esa orden.  
$resultado = mysqli_query ($link, $orden);

// Obtiene el número de filas que podría contener ese nombre de usuario.
$filas = mysqli_num_rows($resultado);

// Consulta si hay alguna fila que ya contenga ese mismo nombre de usuario.
// Si no ha encontrado ninguna fila, es que no hay ningún usuario registrado con ese nombre.
if ($filas == "0")

{
    // Entonces lo Registra, es decir guarda su nombre y contraseña.
    echo "REGISTRADO EN NUESTRA BASE DE DATOS<br>";
    echo "Hemos guardado en nuestra base su nombre y clave.<br> ";
    mysqli_query($link, "INSERT INTO usuarios_registrados (usuario, clave) VALUES ('$usuario', '$clave')") ;
   
}
// En caso que existiera previamente algún usuario con ese nombre, nos muestra un mensaje indicado que ese nombre de usuario ya existe.
else
{
    echo"El nombre de usuario que has elegido ya existe. Elige otro. <br>   "; 
}
?>

 

- Conexión del usuario. Cuando el usuario quiera participar en el chat, debe hacer un login, una conexión. Con este archivo comprobamos si el usuario existe.
- En caso que exista le abrimos una SESIÓN para que pueda participar en el chat.

comprueba_usuario.php
<?php
session_start();
// Juan Antonio Villalpando.
// KIO4.COM
// Utilizamos la codificación UTF-8 para que salgan los acentos y carácteres latinos.
header('Content-type: text/html;charset=utf-8');

// Lee el archivo de conexión a la base de datos
include 'conexion.php';

// Identificación del usuario que quiere utilizar la base de datos.
$usuario = $_GET[usuario];
$clave = $_GET[clave];

// Comprueba si existe ese usuario con su clave.
$orden = "SELECT * FROM usuarios_registrados WHERE usuario = '$usuario' and clave = '$clave'";  
   
//   Ejecuta esa orden.  
$resultado = mysqli_query ($link, $orden);

// Cuántas filas coinciden con ese nombre y clave.
$filas = mysqli_num_rows($resultado);

// Si hay 1 fila que contiene ese nombre y clave, ese usuario es correcto y le abrimos una SESIÓN.
if ($filas == "1")
{
    $_SESSION['usuario']=$usuario;
    $usuario = $_SESSION['usuario'];
    echo "USUARIO CORRECTO";
}

// En caso contrario, es decir que no haya 1 fila, se muestra un mensaje de que ese usuario con esa contraseña no existe.
else
{
    echo "El usuario o la contraseña no es correcta.<BR>";
    echo "Pruebe de nuevo o regístrese.<br>";   
}
?>

- Parte principal del chat. Guarda el mensaje actual y muestra los mensajes enviados al chat.

- La línea session_start(); debe estar arriba pegada al <?php

- header('Content-type: text/html;charset=utf-8'); Para que salgan caracteres latinos con acentos y eñe.

chat.php
<?php
session_start(); 
header('Content-type: text/html;charset=utf-8');
// Juan Antonio Villalpando.
// KIO4.COM
date_default_timezone_set("Europe/Madrid"); // HORA DE ESPAÑA

if (isset ($_SESSION['usuario']))

{
    $usuario = $_SESSION['usuario'];

    echo "<font size=1 color = red>" ;
    echo" Chat  <b><i></font><font color = green size = 2> $usuario</b></i></font><br>";

    include 'conexion.php';

    // Capta el mensaje recibido.
    $mensaje = $_GET['mensaje'];
    
    // Toma la fecha y la hora actual.
    // Segundos transcurridos desde 1970. Se toma como referencia de inicio de tiempo.
    $segundos_totales = time(); 

    $hora = date('H:i:s', $segundos_totales);

    // Si el mensaje trae códigos HTML, comienzan por <, evita ese mensaje.
    if (stristr($mensaje, '<') !== FALSE) 

    {  
        echo ""; 
    } 
    // Si el mensaje viene vacío, no guarda nada.
elseif ($mensaje == "") 

    {    
        echo"";
    }

    else
// En caso que venga con texto, lo insertará en la tabla charlas de la base de datos.
    {
$orden = "INSERT INTO charlas (usuario, mensaje, hora, timestamp) VALUES ( '$usuario', '$mensaje', '$hora', '$segundos_totales')";
        
//   Ejecuta esa orden  
$resultado = mysqli_query ($link, $orden);

// Comprueba si hay fallos        
        if (!$resultado)
        {    
        echo "Error al guardar el mensaje";
        header("refresh: 3; URL='logout.php'"); // Si hay fallos desconecta al usuario.
        }
    }
    
    // Obtiene todos los mensajes que tengan menos tiempo de 36000 segundos.
    // timestamp son los segundos totales anteriores.
    $orden = "SELECT usuario, mensaje, hora, timestamp FROM charlas WHERE id > 0 and (($segundos_totales - timestamp)<36000) ORDER by id DESC";

    $resultado = mysqli_query ($link, $orden);

    // Cuenta las líneas escritas en ese tiempo (($segundos_totales - timestamp)<36000)
    $numerodefilas = mysqli_num_rows($resultado);

    if ($numerodefilas==0)

    {
      echo "No hay mensajes en el chat.";
    }

    else
    {
        
        for($x=0; $x<$numerodefilas; $x++)
        {
        $resrow = mysqli_fetch_row($resultado);

        $usuario_chat = $resrow[0];
        $mensaje = $resrow[1];
        $hora = $resrow[2];
        $timestamp = $resrow[3];
        
        if ($usuario == $usuario_chat) 
        {
            $color = 'green';
        }
        

        else
        {
            $color = 'black';
        }
        // Aquí escribe todas las líneas en el navegador
        echo  "<font size=2 color = $color> $usuario_chat: <font color = black>$mensaje <font size=1>[$hora]</font><br>";
        
        }
    }
}
else 

{
    echo "No conectado<br>";
}    

?>

<!-- Cada 10 segundos recarga este archivo --> 
<meta http-equiv="refresh" content="10,chat.php">

- Salida del usuario del chat. Le cerramos su SESIÓN.

logout.php
<?php
session_start();
unset($_SESSION["usuario"]);  // session_unset();
header("Location: chat.php");
?>

_________________
- Comentarios.

- Crea usuarios y consulta mediante phpmyadmin que ese usuario está en la base de datos.

- Crea un par de usuarios en tu mismo móvil y chatea entre ellos. Para pasar de un usuario a otro escribes su Nombre y Clave y pulsa el botón "Comprueba si existe"

- En este ejemplo no hay que cambiar los espacios por su código %20 como vimos en el tutorial anterior.

- Forma de funcionamiento:

Registra al usuario: pedro clave: 1234 Pulsa Botón "Registrarme". Pulsa Botón "Comprueba si existe" para ver si se ha creado.
Registra al usuario: luis clave: 1234 Pulsa Botón "Registrarme". Pulsa Botón "Comprueba si existe" para ver si se ha creado.

Estando como luis escribe algo en el casillero y pulsa el Botón "Enviar". Debe salir su mensaje en el chat.
Ahora entra como usuario pedro. Pulsa el Botón "Comprueba si existe". Escribe algún mensaje en el casillero para chatear.

En tu mismo móvil para pasar de un usuario a otro, escribe su nombre y contraseña y pulsa el Botón "Comprueba si existe", para conectarlo.

_________________
_________________
_________________
_________________

- MySQL y MySQLi

- Desde hace unos años MySQL ha evolucionado a MySQLi. Los códigos que hemos vistos anteriormente en esta página están construidos para MySQLi, si quieres los mismos códigos para construidos para el obsoleto MySQL, aquí los tienes:

conexion.php
<?php
// Datos de conexión. Son los datos del propietario de la base de datos.
$host = "localhost";
$nombre_de_la_base_de_datos = "chat";
$nombre_del_propietario ="juan";
$clave_del_propietario = "contraseña";

// Identificación del propietario de la base de datos.
$db = mysql_connect($host, $nombre_del_propietario, $clave_del_propietario);
// En caso de error, saldrá un mensaje.
if($db == FALSE)
die("Error de conexión.");
// Selección de la Base de datos.
mysql_select_db($nombre_de_la_base_de_datos, $db) or die ("Error de conexión.");
?>
registro_de_usuario.php
<?php
// REGISTRO DE USUARIO

// Lee el archivo de conexión a la base de datos
include 'conexion.php';
header('Content-type: text/html;charset=utf-8');

// Lee los datos de usuario y clave enviada por App inventor. Es un usuario que se quiere registrar.
$usuario = $_GET[usuario];
$clave = $_GET[clave];

// Busca en toda la tabla usuarios_registrados si existe este usuario
$orden = "SELECT * FROM usuarios_registrados WHERE usuario='$usuario'";      

// Ejecuta esa orden  
$resultado = mysql_query($orden) or die("Error de selección");

// Obtiene el número de filas que podría contener ese nombre de usuario.
$filas = mysql_num_rows($resultado); 

// Consulta si hay alguna fila que ya contenga ese mismo nombre de usuario
// Si no ha encontrado ninguna fila, es que no hay ningún usuario registrado con ese nombre.
if ($filas == "0")

{
    // Entonces lo Registra, es decir guarda su nombre y contraseña.
    echo "REGISTRADO EN NUESTRA BASE DE DATOS<br>";
    echo "Hemos guardado en nuestra base su nombre y clave.<br> ";
    mysql_query("INSERT INTO usuarios_registrados (usuario, clave) VALUES ('$usuario', '$clave')") 
    or die(mysql_error());
}
// En caso que existiera previamente algún usuario con ese nombre, nos muestra un mensaje indicado que ese nombre de usuario ya existe.
else
{
    echo"El nombre de usuario que has elegido ya existe. Elige otro.  <br>   "; 
}
?>
chat.php
<?php
session_start(); 
header('Content-type: text/html;charset=utf-8');

if (isset ($_SESSION['usuario']))

{
    $usuario = $_SESSION['usuario'];

    echo "<font size=1 color = red>" ;
    echo" Chat  <b><i></font><font color = green size = 2> $usuario</b></i></font><br>";

    include 'conexion.php';

    // Capta el mensaje recibido.
    $mensaje = $_GET['mensaje'];
    
    // Toma la fecha y la hora actual.
    // Segundos transcurridos desde 1970. Se toma como referencia de inicio de tiempo.
    $segundos_totales = time(); 

    $hora = date('H:i:s', $segundos_totales);

    // Si el mensaje trae códigos HTML, comienzan por <, evita ese mensaje.
    if (stristr($mensaje, '<') !== FALSE) 

    {  
        echo ""; 
    } 
    // Si el mensaje viene vacío, no guarda nada.
elseif ($mensaje == "") 

    {    
        echo"";
    }

    else
// En caso que venga con texto, lo insertará en la tabla charlas de la base de datos.
    {
        $orden = "INSERT INTO charlas (usuario, mensaje, hora, timestamp) VALUES ( '$usuario', '$mensaje', '$hora', '$segundos_totales')";
        
// Ejecuta la orden anterior
        $resultado = mysql_query($orden);

// Comprueba si hay fallos        
        if (!$resultado)
        {    
        echo "Error al guardar el mensaje";
        header("refresh: 3; URL='logout.php'"); // Si hay fallos desconecta al usuario.
        }
    }
    
    // Obtiene todos los mensajes que tengan menos tiempo de 36000 segundos.
    // timestamp son los segundos totales anteriores.
$orden= "SELECT usuario, mensaje, hora, timestamp FROM charlas WHERE id > 0 and (($segundos_totales - timestamp)<36000) ORDER by id DESC";

    $resultado = mysql_query($orden) or die("Error de selección");

    // Cuenta las líneas escritas en ese tiempo (($segundos_totales - timestamp)<36000)
    $numerodefilas = mysql_num_rows($resultado);

    if ($numerodefilas==0)

    {
      echo "No hay mensajes en el chat.";
    }

    else
    {
        
        for($x=0; $x<$numerodefilas; $x++)
        {
        $resrow = mysql_fetch_row($resultado);

        $usuario_chat = $resrow[0];
        $mensaje = $resrow[1];
        $hora = $resrow[2];
        $timestamp = $resrow[3];
        
        if ($usuario == $usuario_chat) 
        {
            $color = 'green';
        }
        

        else
        {
            $color = 'black';
        }
        // Aquí escribe todas las líneas en el navegador
        echo  "<font size=2 color = $color> $usuario_chat: <font color = black>$mensaje <font size=1>[$hora]</font><br>";
        
        }
    }
}
else 

{
    echo "No conectado<br>";
}    

?>

<!-- Cada 10 segundos recarga este archivo --> 
<meta http-equiv="refresh" content="10,chat.php">
      
logout.php
<?php
session_start();
unset($_SESSION["usuario"]);  // session_unset();
header("Location: chat.php");
?>

_______________________________

- Mi correo:
juana1991@yahoo.com
- KIO4.COM - Política de cookies. Textos e imágenes propiedad del autor:
© Juan A. Villalpando
No se permite la copia de información ni imágenes.
Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación y realizan análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. Acepto    Más información