Comunidad de diseño web y desarrollo en internet online

Enviar nombre de base de datos por POST

Citar            
MensajeEscrito el 23 Oct 2019 11:12 am
Buenos dias a todos. Tengo una duda ya que estoy intentando hacer algo que no se si es posible, aunque aun no entiendo porque no funciona.
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&ntilde;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}

Por ifontana

1 de clabLevel



 

chrome
Citar            
MensajeEscrito el 24 Oct 2019 01:53 pm
Pues es eso el usuario "nombrebase" con el servidor "172.17.110.255" no tiene acceso a la base de datos.

Por elporfirio

Claber

652 de clabLevel

1 tutorial

Genero:Masculino  

FullStack Web Developer

chrome
Citar            
MensajeEscrito el 25 Oct 2019 12:17 pm

elporfirio escribió:

Pues es eso el usuario "nombrebase" con el servidor "172.17.110.255" no tiene acceso a la base de datos.


Gracias por responder, pero no viene ahi el problema, si relees el mensaje, veras que el problema es que no captura el usuario que envio por POST. "nombrebase" tiene acceso, ya que si lo escribo manualmente ingresa bien.

Por ifontana

1 de clabLevel



 

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.