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} 