Tengo una pagina login.html donde ingreso IDequipo y Password. Envio mediante POST estos datos a login.php donde se requiere un archivo llamado database donde estan los valores para conecarse a la base de datos mysql y validar al usuario.
Este es el login:
Código PHP :
session_start(); if (isset($_SESSION['user_id'])) { header('Location: principal'); } ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <title>Inicia Sesion</title> <link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet"> <link rel="stylesheet" href="assets/css/style2.css"> </head> <body> <form action="login2" method="POST" > <input name="idequipo" type="text" placeholder="ID Equipo"> <input name="password" type="password" placeholder="Ingresa Contrasena"> <input type="checkbox" name="recordar" value="yes"> <a>Recordar contraseña</a><br><br> <input type="submit" value="Ingresar"> </form> </body> </html>
La cuestion es la siguiente, en el login, el campo IDequipo representa al nombre de la base de datos y al nombre de usuario de esa base de datos (es un sistema interno por lo cual no me preocupa la seguridad contra inyeccion y demas).
Yo quiero recibir por POST el 'idequipo' y asignarlo a la variable $username y $database, que de hecho, si hago un echo $username o $database veo que recibo bien el nombre (que en realidad es una concatenacion de un nombre fijo + el 'idequipo'). La concatenacion la hago $database = 'nombrebase'.$variable; donde variable es $variable= $_POST['idequipo'];
Estos datos los recibo bien, porque lo compurebo con un echo, pero al momento de asignarlo a la variable de conexion, deja de funcionar la misma.
Este es login2.php donde recibe los valores del login y requiere el database.
Código PHP :
$idequipo = $_POST['idequipo']; session_start(); if (isset($_SESSION['user_id'])) { header('Location: principal'); } require 'db/database.php'; if (!empty($_POST['idequipo']) && !empty($_POST['password'])) { $records = $conn->prepare('SELECT id, idequipo, password FROM users WHERE idequipo = :idequipo'); $records->bindParam(':idequipo', $_POST['idequipo']); $records->execute(); $results = $records->fetch(PDO::FETCH_ASSOC); $message = ''; //echo "chequea usuario"; if (count($results) > 0 && password_verify($_POST['password'], $results['password'])) { $_SESSION['user_id'] = $results['id']; header("Location: principal"); } else { $message = 'Id Equipo o Contrasena incorrecta!'; } }
Este es el database:
Código PHP :
$idequipo = $_POST['idequipo']; $server = 'localhost'; $database = 'base'.$idequipo; $username = 'base'.$idequipo; $password = 'pass'; try { $conn = new PDO("mysql:host=$server;dbname=$database", $username, $password); } catch (PDOException $e) { die('Error en la conexión - Contacte con soporte '.$e ); }
Tuve que dividir el login en 2 (login.php y login2.php donde hace la logica de bd) porque de otra forma, no me cargaba le pagina sin antes conectarse a la base de datos.
Si ingreso el nombre de usuario y el nombre de la base de datos de forma manual, funciona a la perfeccion, incluso si en vez de dejar como esta $idequipo = $_POST['idequipo'];, pongo $idequipo='idequipo'; funciona bien tambien.
Si inmediatamente debajo de $password, ingreso echo $database; me muestra perfectamente el nombre con el que deberia ingresar, pero no conecta, y el catch da el siguiente error:
Código :
PDOException: SQLSTATE[HY000] [1045] Access denied for user 'nombrebase'@'172.17.110.255' (using password: YES) in /home/xxxxx/public_html/xxxxx/database.php:11 Stack trace: #0 /home/xxxxx/public_html/xxxxx/db/database.php(11): PDO->__construct('mysql:host=loca...', 'nombrebase', 'xxxxxx') #1 /home/c1380069/public_html/xxxxx/principal.php(3): require('/home/xxxxxx/...') #2 {main}