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
____________________________
390.- Listado de usuarios y claves en una Base de datos.
p390_usuario_clave.aia
- En el tutorial 326.- Listado de usuarios y claves en un archivo. App inventor 2. vimos como guardar el nombre y la clave de los usuarios en un archivo y luego consultarlo para ver si está autentificado.
- Ahora vamos a registrar a usuarios con su nombre y clave. Guardaremos esos datos en una base de datos MySQL para registrar a los usuarios.
- Los usuarios registrados podrán escribir su nombre y clave y podrán entrar en la aplicación.
- Para ello se comprobará si ese Nombre existe con esa Clave.
- Se trata que el usuario escribirá su Nombre y su Clave, se guardarán en una Base de datos.
- Para facilitar el código se podrá registrar el usuario con la misma clave las veces que quiera.
- Normalmente en otros códigos, si ya existe un usuario con un nombre ya registrado, no se permite repetir el nombre, pero en nuestro código si podrá repetir.
__________________________________________
- Creación de la tabla.
- En tutoriales anteriores hemos creado Bases de datos común llamada u798509677_comun en donde estamos creando todas las tablas de este tutorial.
- Vamos a crear otra tabla, esta vez llamada usuarios_datos, como se ve en la imagen de abajo.
- La forma de crear una tabla la vimos en el tutorial 317_hosting_gratuito_3.htm
tabla_usuarios_datos.sql |
CREATE TABLE IF NOT EXISTS `usuarios_datos` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nombre` varchar(15) CHARACTER SET utf8 COLLATE utf8_spanish2_ci NOT NULL,
`clave` varchar(7) CHARACTER SET utf8 COLLATE utf8_spanish2_ci NOT NULL,
`correo` varchar(20) CHARACTER SET utf8 COLLATE utf8_spanish2_ci NOT NULL,
`fechahora` varchar(20) CHARACTER SET utf8 COLLATE utf8_spanish2_ci NOT NULL,
`ip` varchar(15) CHARACTER SET utf8 COLLATE utf8_spanish2_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ; |
- Así que tenemos la base de datos: u798509677_comun y dentro de ella la tabla usuarios_datos, entre otras.
__________________________________________
- Diseño.
- He puesto dos Web.
- Para mayor facilidad, escribe en las Propiedades de los CampoDeTexto nombre, clave, correo como ves en la imagen, de esta manera es más fácil hacer las pruebas y no tener que estar continuamente escribiendo.
__________________________________________
- Bloques.
----------------------------
- El Botón1, lo utilizamos para insertar los datos en la base de datos.
- Llama al código PHP que está en... http://kio4.esy.es/usuarios_datos.php
- Se toman los datos de Nombre, Clave y Correo y se añade a la página usuarios_datos.php
- Se INSERTARÁN los datos en la base de datos u798509677_comun y su tabla usuarios_datos, mediante código PHP
----------------------------
- El Botón2, lo utilizamos para comprobar si el nombre y clave existen en la base de datos.
- Llama al código PHP que está en... http://kio4.esy.es/usuarios_conecta.php?
- Se toman los datos de Nombre y Clave y se añade a la página usuarios_conecta.php
- Se SELECCIONARÁ y comprobará si hay líneas en la base de datos que contengan ese Nombre y Clave.
- En caso que las haya, enviará la palabra: echo "REGISTRADO";
- Si llega la palabra "REGISTRADO", entrará en otra pantalla llamada aplicacion.
- He puesto el Bloque de recortar, porque el REGISTRADO puede venir con espacios al principo o final.
-------------------------------------------------------------------------------
- IMPORTANTE.
- Fíjate que en el Botón1, ponemos http://kio4.esy.es/usuarios_datos.php
- No termina en interrogación ?
- Luego ponemos el Bloque de PublicarTexto.
- En el código PHP de http://kio4.esy.es/usuarios_datos.php
- Observaremos que tomamos los datos mediante $_POST
$datos=$_POST;
$Nombre=$datos['Nombre'];
$Clave=$datos['Clave'];
$Correo=$datos['Correo'];
--------------------
- En cambio, en el Botón2, ponemos http://kio4.esy.es/usuarios_conecta.php?
- Termina en interrogación ?
- No ponemos el Bloque de PublicarTexto.
- En el código PHP de http://kio4.esy.es/usuarios_conecta.php?
- Observamos que tomamos los datos mediante $_GET
$datos=$_GET;
$Nombre=$datos['Nombre'];
$Clave=$datos['Clave'];
----------------------------------------
- Es decir, según pongamos o no la interrogación y el Bloque PublicarTexto, en el código PHP obtendremos los damos mediante $_POST o $_GET
- Parece que funciona mejor el $_GET
- Cuidado con las mayúsculas y las minúsculas.
- Cuidado con POST y GET.
- Cuidado con las comillas 'simples', las comillas "dobles" y las comillas de `acento` |
__________________________________________
- Diseño y Bloques.
- Esta sería la ventana llamada aplicación que se abriría cuando el usuario se identifique con su nombre y clave correctamente.
__________________________________________
- Códigos PHP.
usuarios_datos.php
|
<?php
// Juan Antonio Villalpando.
// KIO4.COM
$datos=$_POST;
$Nombre=$datos['Nombre'];
$Clave=$datos['Clave'];
$Correo=$datos['Correo'];
if (isset($Nombre) ) {
///////////////////////////////// CORREO ////////////////////////////////
$asunto = "Entrada en la aplicación de KIO4.COM";
$mensaje = "Bienvenido a nuestra aplicación, Nombre= ".$Nombre." y Clave= ".$Clave;
$decorreo="ejemplo@ejemplo.com";
if (mail($Correo, $asunto, $mensaje, $decorreo))
//if (mail($Correo, $asunto, $mensaje, "From: $Nombre <$decorreo>"))
{
echo("Mensaje enviado. ");
}
else
{
echo("Error en el envio!...");
}
///////////////////////////////// FIN DE CORREO ///////////////////////////////
///////////////////////// INSERCIÓN EN LA BASE DE DATOS DE NOMBRE Y CLAVE ///////////////////////////////
// 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 A LA BASE DE DATOS
$link = new mysqli($db_host, $db_login, $db_pswd, $db_name);
// 3.- FECHA DE ALTA
date_default_timezone_set('Europe/Madrid'); // Fecha del país
setlocale(LC_ALL,'es_ES');
$zone=3600*2 ;
$fechahora=gmdate("j/m/y H:i:s", time() + $zone);
// 4.- TOMAR LA IP DEL USUARIO
if (getenv("HTTP_X_FORWARDED_FOR")) {
$TuIP = getenv("HTTP_X_FORWARDED_FOR");
} else {
$TuIP = getenv("REMOTE_ADDR");
}
// 5.- INSERCIÓN DE DATOS $query="INSERT INTO usuarios_datos (nombre, clave, correo, fechahora, ip) VALUES ('$Nombre', '$Clave', '$Correo', '$fechahora','$TuIP')";
mysqli_query ($link, $query);
echo "Datos agregados a la base.";
mysqli_close($link);
}
?> |
usuarios_conecta.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 A LA BASE DE DATOS
$link = new mysqli($db_host, $db_login, $db_pswd, $db_name);
// 3.- COMPROBAR SI EXISTE ESA PAREJA DE NOMBRE - CLAVE
$datos=$_GET;
$Nombre=$datos['Nombre'];
$Clave=$datos['Clave'];
////////////////////////////// CONSULTAR /////////////////////////////////////
// Juan Antonio Villalpando.
// KIO4.COM
$res=mysqli_query($link, "SELECT nombre,clave FROM `usuarios_datos` WHERE `nombre`='$Nombre' AND `clave`='$Clave' ");
$row=mysqli_fetch_array($res);
$count = mysqli_num_rows($res);
if( $count >= 1 ) { // Si hay 1 o más Juan - 1234, es que el usuario y clave existen.
echo 'REGISTRADO';
} else {
echo 'NO EXISTE';
}
mysqli_close($link);
?> |
__________________________________________
- Comentarios.
- El archivo registra_usuario.php
- Toma los datos mediante $datos=$_POST;
- Conecta con la base de datos.
- Envía un correo. Esta parte de envío de correo no funciona en algunos servidores web gratuitos.
- INSERTA
mysql_query ("INSERT INTO registrados (nombre, clave, correo, fechahora, ip) VALUES ('$Nombre', '$Clave', '$Correo', '$fechahora','$TuIP')");
----------------------------------------
- El archivo registra_conecta.php
- Conecta con la base de datos.
- Toma los datos mediante $datos=$_GET;
- SELECCIONA y consulta
mysql_query("SELECT nombre,clave FROM `registrados` WHERE `nombre`='$Nombre' AND `clave`='$Clave' ");
- Cuenta cuántas líneas hay con esa pareja de Nombre y Clave. $count = mysql_num_rows($res);
- Si hay 1 línea o más, if( $count >= 1 )
- Significa que está REGISTRADO
echo 'REGISTRADO';
__________________________________
- Propuesta.
- Modifíca el código para que si ya hubiera un usuario con ese nombre, enviará un mensaje diciendo que escriba otro.
- Este sería el código para que no se guarde nombres de usuarios repetidos.
- He modificado el código del Botón1, he quitado el Bloque de PublicarTexto, le he puesto interrogación:
http://kio4.esy.es/usuarios_datos_norepite.php?
- En el código PHP he puesto $datos = $_GET;
- Es una mezcla entre los dos códigos que hemos visto anteriormente.
- Consulta si hay alguna línea que contiene ese nombre, y en caso que no la haya agrega al usuario.
__________________________________________
- Diseño.
p390_usuario_clave_2.aia
usuarios_datos_norepite.php
|
<?php
// Juan Antonio Villalpando.
// KIO4.COM
$datos=$_GET;
$Nombre=$datos['Nombre'];
$Clave=$datos['Clave'];
$Correo=$datos['Correo'];
if (isset($Nombre) ) {
///////////////////////// INSERCIÓN EN LA BASE DE DATOS DE NOMBRE Y CLAVE ///////////////////////////////
// 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 A LA BASE DE DATOS
$link = new mysqli($db_host, $db_login, $db_pswd, $db_name);
////////////////////////////// CONSULTAR /////////////////////////////////////
// Juan Antonio Villalpando.
// KIO4.COM
$res=mysqli_query($link, "SELECT nombre FROM `usuarios_datos` WHERE `nombre`='$Nombre' ");
$row=mysqli_fetch_array($res);
$count = mysqli_num_rows($res);
if( $count >= 1 ) { // Si hay 1 o más Juan, No se debe guardar otro Juan.
echo 'Ese nombre de usuario ya existe.';
} else {
// 3.- FECHA DE ALTA
date_default_timezone_set('Europe/Madrid'); // Fecha del país
setlocale(LC_ALL,'es_ES');
$zone=3600*2 ;
$fechahora=gmdate("j/m/y H:i:s", time() + $zone);
// 4.- TOMAR LA IP DEL USUARIO
if (getenv("HTTP_X_FORWARDED_FOR")) {
$TuIP = getenv("HTTP_X_FORWARDED_FOR");
} else {
$TuIP = getenv("REMOTE_ADDR");
}
// 5.- INSERCIÓN DE DATOS
$query="INSERT INTO usuarios_datos (nombre, clave, correo, fechahora, ip) VALUES ('$Nombre', '$Clave', '$Correo', '$fechahora','$TuIP')";
mysqli_query ($link, $query);
echo "Datos agregados a la base.";
}
mysqli_close($link);
}
?> |
__________________________________________
- Más comentarios acerca de POST y GET.
- Comento dos maneras de enviar los datos al servidor para alimentar al código PHP.
- Una es la que hemos visto. Ponemos Web1.Url = http://androide.net23.net/nombre_clave_guardar.php
- Luego el Bloque PublicarTexto con los datos.
- En el código PHP tomaríamos los datos mediante: $_POST;
$datos=$_POST;
$Nombre=$datos['Nombre'];
$Clave=$datos['Clave'];
---------------------------------------------------------------------------
- Pues bien, hay otra manera que puede resultar mejor que esta.
- Ponemos en la Web1.Url = http://androide.net23.net/nombre_clave_guardar.php?
- Terminado en interrogación ?.
- Quitamos el Bloque PublicarTexto
- Ponemos los datos junto con la dirección anterior en el Web1.Url
- En el código PHP tomaríamos los datos mediante: $_GET;
$datos=$_GET;
$Nombre=$datos['Nombre'];
$Clave=$datos['Clave'];
______________________________________________________________________
- Aquí lo explico mejor. Fíjate las dos maneras de poner la información en el Botón1 y las maneras de recibirlos en el código PHP.
__________________________________
|