Hola de nuevo, hoy les tengo un pequeño tutorial un login en android veremos como crear una aplicación en android que muestre un login conectado en una base de datos en mysql y php.
Les comento que al menos deben tener conocimientos básicos de php y mysql, debido a que android no soporta una conexion directa con mysql, haremos uso de una webservices la que nos permitirá hacer de puente y conectar android con nuestro gestor de base de datos.
PASO 1
Primero crearemos nuestra base de datos, en mysql, para eso debemos tener un gestor yo usare xampp tu puedes utilizar el que gustes.
PASO 2
ejecutaremos las siguiente consulta.
create database login; use login; create table users( id int(11) primary key auto_increment, unique_id varchar(23) not null unique, name varchar(50) not null, email varchar(100) not null unique, encrypted_password varchar(80) not null, salt varchar(10) not null, created_at datetime, updated_at datetime null );
PASO 3
Ir a la ubicación donde instalaron XAMPP y abrir la carpeta htdocs «recuerden que para otros gestores es www». Ahora mostrare una imagen de la estructura que tendra nuestro poryecto, la parte de php.
Debes crear Config.php cambiar los datos según como lo hayas configurado a tu base de datos en tu gestor
/** <?php * configuracion de la DB */ define("DB_HOST", "localhost"); define("DB_USER", "root"); define("DB_PASSWORD", "12345"); define("DB_DATABASE", "login"); ?>
crea DB_Connect.php dentro de la carpeta include
<?php class DB_Connect { private $conn; // Connecting to database public function connect() { require_once 'include/Config.php'; // Connecting to mysql database $this->conn = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE); // return database handler return $this->conn; } } ?>
Crea DB_Funciones.php dentro de la carpeta include
<?php class DB_Funciones { private $conn; // constructor function __construct() { require_once 'DB_Connect.php'; // connecting to database $db = new Db_Connect(); $this->conn = $db->connect(); } // destructor function __destruct() { } /** * Storing new user * returns user details */ public function storeUser($name, $email, $password) { $uuid = uniqid('', true); $hash = $this->hashSSHA($password); $encrypted_password = $hash["encrypted"]; // encrypted password $salt = $hash["salt"]; // salt $stmt = $this->conn->prepare("INSERT INTO users(unique_id, name, email, encrypted_password, salt, created_at) VALUES(?, ?, ?, ?, ?, NOW())"); $stmt->bind_param("sssss", $uuid, $name, $email, $encrypted_password, $salt); $result = $stmt->execute(); $stmt->close(); // check for successful store if ($result) { $stmt = $this->conn->prepare("SELECT * FROM users WHERE email = ?"); $stmt->bind_param("s", $email); $stmt->execute(); $user = $stmt->get_result()->fetch_assoc(); $stmt->close(); return $user; } else { return false; } } /** * Get user by email and password */ public function getUserByEmailAndPassword($email, $password) { $stmt = $this->conn->prepare("SELECT * FROM users WHERE email = ?"); $stmt->bind_param("s", $email); if ($stmt->execute()) { $user = $stmt->get_result()->fetch_assoc(); $stmt->close(); // verifying user password $salt = $user['salt']; $encrypted_password = $user['encrypted_password']; $hash = $this->checkhashSSHA($salt, $password); // check for password equality if ($encrypted_password == $hash) { // user authentication details are correct return $user; } } else { return NULL; } } /** * Check user is existed or not */ public function isUserExisted($email) { $stmt = $this->conn->prepare("SELECT email from users WHERE email = ?"); $stmt->bind_param("s", $email); $stmt->execute(); $stmt->store_result(); if ($stmt->num_rows > 0) { // user existed $stmt->close(); return true; } else { // user not existed $stmt->close(); return false; } } /** * Encrypting password * @param password * returns salt and encrypted password */ public function hashSSHA($password) { $salt = sha1(rand()); $salt = substr($salt, 0, 10); $encrypted = base64_encode(sha1($password . $salt, true) . $salt); $hash = array("salt" => $salt, "encrypted" => $encrypted); return $hash; } /** * Decrypting password * @param salt, password * returns hash string */ public function checkhashSSHA($salt, $password) { $hash = base64_encode(sha1($password . $salt, true) . $salt); return $hash; } } ?>
Ahora debes crear el archivo registrar.php
<?php require_once 'include/DB_Funciones.php'; $db = new DB_Funciones(); // json response array $response = array("error" => FALSE); if (isset($_POST['name']) && isset($_POST['email']) && isset($_POST['password'])) { // receiving the post params $name = $_POST['name']; $email = $_POST['email']; $password = $_POST['password']; // check if user is already existed with the same email if ($db->isUserExisted($email)) { // user already existed $response["error"] = TRUE; $response["error_msg"] = "User already existed with " . $email; echo json_encode($response); } else { // create a new user $user = $db->storeUser($name, $email, $password); if ($user) { // user stored successfully $response["error"] = FALSE; $response["uid"] = $user["unique_id"]; $response["user"]["name"] = $user["name"]; $response["user"]["email"] = $user["email"]; $response["user"]["created_at"] = $user["created_at"]; $response["user"]["updated_at"] = $user["updated_at"]; echo json_encode($response); } else { // user failed to store $response["error"] = TRUE; $response["error_msg"] = "Unknown error occurred in registration!"; echo json_encode($response); } } } else { $response["error"] = TRUE; $response["error_msg"] = "Required parameters (name, email or password) is missing!"; echo json_encode($response); } ?>
Ahora terminamos con el archivo login.php
<?php require_once 'include/DB_Funciones.php'; $db = new DB_Funciones(); // json response array $response = array("error" => FALSE); if (isset($_POST['email']) && isset($_POST['password'])) { // receiving the post params $email = $_POST['email']; $password = $_POST['password']; // get the user by email and password $user = $db->getUserByEmailAndPassword($email, $password); if ($user != false) { // use is found $response["error"] = FALSE; $response["uid"] = $user["unique_id"]; $response["user"]["name"] = $user["name"]; $response["user"]["email"] = $user["email"]; $response["user"]["created_at"] = $user["created_at"]; $response["user"]["updated_at"] = $user["updated_at"]; echo json_encode($response); } else { // user is not found with the credentials $response["error"] = TRUE; $response["error_msg"] = "Login credentials are wrong. Please try again!"; echo json_encode($response); } } else { // required post params is missing $response["error"] = TRUE; $response["error_msg"] = "Required parameters email or password is missing!"; echo json_encode($response); } ?>
para comprobar que todo va ok debes ir al siguiente link
http://localhost/login_android/registrar.php
debe salirte algo como esto:
{"error":true,"error_msg":"Required parameters (name, email or password) is missing!"}
Bien ahora toca la parte Android, no voy a colocar el código porque seria muy largo el tutorial a continuación dejare algunos pantallasos, mas el paquete del proyecto y puedan hacer sus pruebas.
Solo dejare donde deben cambiar, si suben la parte php a un web hosting pueden apuntar su android hacia aya, o sino pueden hacerlo localmente y apuntar la ip. Todo esto en el archivo AppConfig.java
package info.androidhive.loginandregistration.app; public class AppConfig { // Server user login url public static String URL_LOGIN = "http://192.168.1.34/login_android/login.php"; // Server user register url public static String URL_REGISTER = "http://192.168.1.34/login_android/registrar.php"; }
como puedo apuntar la ip amigo? algun ejemplo ya que necesito ayuda :C
se mas especifico de lo que necesitas…
me sale este mensaje al registrar connection refused
buenas todavia existis?? o esto es viejo sin soporte??
Se responde cuando se puede, saludos.
quiere decir que su app esta apuntando mal a su web service.
Hola esta bien no te ofendas amigo…. era por una consulta sobre la conexion dentro de una red local pero lo pude hacer. Por si a alguien le interesa. Se tiene q modificar EL ARCHIVO httpd.conf y cambiar esta linea "require local" por "Require all granted" y crear un usuario por ejemplo root con todos los privilegios y en host poner cualquiera osea "%". Espero se entienda. Loco tu tutorial me re sirvio Muchisimas Gracias. Tendras algo para otra activity para consulta a la db y registro de datos???
Pingback: Android Login Example Php Mysql - Login Portal
Pingback: Android Studio Php Mysql Login - Login Portal