PHP - Enviar nombre de base de datos por POST

 
Vista:
Imágen de perfil de Ignacio
Val: 8
Ha aumentado su posición en 18 puestos en PHP (en relación al último mes)
Gráfica de PHP

Enviar nombre de base de datos por POST

Publicado por Ignacio (1 intervención) el 22/10/2019 19:16:52
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 codigo de database.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
 
$server = 'localhost';
$username = 'usuario';
$password = 'pass';
$database = 'usuario';
 
try {
  $conn = new PDO("mysql:host=$server;dbname=$database", $username, $password);
} catch (PDOException $e) {
  die('Error en la conexión - Contacte con soporte    '.$e );
}
 
?>

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.
La respuesta que recibo del catch de la bd es:

1
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}

La verdad como soy un poco nuevo en php, no se si esto que quiero hacer es posible o no. Mi intención es tener una pagina sola de login, donde existen distintos usuarios que acceden a distintas base de datos, por eso quiero simplificarlo de esa forma, que usuario1 ingrese con id usuario1 a la base de datos usuario1, y usuario2 ingrese con id usuario2 a la base de datos usuario2.
Muchas gracias por su tiempo!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro
Val: 1.634
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Enviar nombre de base de datos por POST

Publicado por Alejandro (839 intervenciones) el 22/10/2019 20:11:40
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
Lo que intentas hacer es posible mas como desconocemos el como lo estas haciendo solo podemos hacer suposiciones muy probablemente erradas.

Si tienes algo como
1
2
3
4
5
6
<?php
requiere('database.php');
 
$username = $_POST['idequipo'];
 
// el demás código no necesario para el ejemplo....

El problema es que necesitas primero recibir los valores y después ejecutar el contenido de database.php
1
2
3
4
5
6
<?php
$username = $_POST['idequipo'];
 
requiere('database.php');
 
// el demás código no necesario para el ejemplo....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Ignacio
Val: 8
Ha aumentado su posición en 18 puestos en PHP (en relación al último mes)
Gráfica de PHP

Enviar nombre de base de datos por POST

Publicado por Ignacio (3 intervenciones) el 22/10/2019 20:24:56
Gracias por responder Alejandro. He probado de varias formas y sigue sin funcionar.
Pongo el codigo completo.
Por un lado, tengo login.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?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>


de este login.php, voy a login2.php en el cual esta el siguiente codigo donde hago la validacion del usuario:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?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 login2 requiere database.php que es aqui donde tengo el problema.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?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 da el mensaje de error que indique al comienzo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ignacio
Val: 8
Ha aumentado su posición en 18 puestos en PHP (en relación al último mes)
Gráfica de PHP

Enviar nombre de base de datos por POST

Publicado por Ignacio (3 intervenciones) el 23/11/2019 13:29:01
Alguna ayuda por favor?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Enviar nombre de base de datos por POST

Publicado por Zugzwang (10 intervenciones) el 23/11/2019 19:00:56
El problema no lo estás teniendo en ninguno de esos últimos códigos, sino claramente en el archivo 'database.php'. Si realmente necesitas usar PDO, te recomiendo leer más al respecto ya que no lo se manejar de esa forma (hay varias, es todo un dilema)... Caso contrario, podrías simplemente reemplazar el código de tu archivo 'database.php' por lo siguiente:

1
2
3
4
5
6
7
8
9
10
<?php
function conectarBD() {
   global $conexion;
   $conexion = new mysqli('localhost', 'usuario', 'pass', 'usuario');
 
   if($conexion->connect_errno) {
      die('Error: '. $conexion->connect_errno);
    }
  return $conexion;
}

Cada vez que requieras conectar con la base de datos (ya sea para buscar o ingresar datos), simplemente llamas a la función 'conectarBD()' en php y la variable $conexion, como podrás ver, se declara de manera global. Esto significa que en todos los archivos tiene el mismo valor, a menos que se modifique luego de ser llamada con su valor original.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ignacio
Val: 8
Ha aumentado su posición en 18 puestos en PHP (en relación al último mes)
Gráfica de PHP

Enviar nombre de base de datos por POST

Publicado por Ignacio (3 intervenciones) el 24/11/2019 00:49:09
Muchas gracias por el aporte Zugzwang! En realidad no existe una necesidad de usar PDO, solo es que lei que es mas actual y tiene un poco mas de seguridad. De todas formas mañana lo voy a probar! Gracias compañero.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar