Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema con variables e include()

Estas en el tema de Problema con variables e include() en el foro de PHP en Foros del Web. Buenas, estoy intentando conectar con una base de datos a través de PHP, estos son los archivos que tengo. configuracion.php Código PHP: <?php     $dbhost  =  ...
  #1 (permalink)  
Antiguo 17/09/2017, 10:15
 
Fecha de Ingreso: septiembre-2014
Mensajes: 72
Antigüedad: 3 años, 3 meses
Puntos: 0
Problema con variables e include()

Buenas, estoy intentando conectar con una base de datos a través de PHP, estos son los archivos que tengo.

configuracion.php

Código PHP:
<?php

    $dbhost 
'localhost';
    
$db 'megacursos';
    
$dbuser 'root'
    
$dbpass '';


    
$link_megacursos mysqli_connect($dbhost$dbuser$dbpass$db);

    
//Comenzamos la sesión
    
session_start();
?>
Luego, desde un archivo llamado consultas.php, hago lo siguiente:

Código PHP:
<?php

include('configuracion.php');

$usuarios mysqli_query($link_megacursos"SELECT * FROM usuarios");

function 
getUsuarios() {
    
    while (
$fila mysqli_fetch_array($usuarios)) {
        echo 
$fila['id'] . "<br/>";
        echo 
$fila['nombre'] . "<br/>";
        echo 
$fila['apellidos'] . "<br/>";
        echo 
$fila['user'] . "<br/>";
        echo 
$fila['pass'] . "<br/>";
        echo 
$fila['email'] . "<br/>";
        echo 
$fila['telefono'] . "<br/>";
        echo 
$fila['nivel'] . "<br/>";
    }
}

?>
Pero se me muestra este error al intentar mostrar los contenidos de la base de datos:

Código:
Notice: Undefined variable: link_megacursos in C:\xampp\htdocs\curso\main\funciones\consultas.php on line 9

Warning: mysqli_query() expects parameter 1 to be mysqli, null given in C:\xampp\htdocs\curso\main\funciones\consultas.php on line 9

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, null given in C:\xampp\htdocs\curso\main\funciones\consultas.php on line 11
Entiendo que el problema está en que no está reconociendo la variable $link_megacursos definida en configuracion.php, pero si existe, y no entiendo por qué no la localiza. Además, tengo otro archivo en el que uso el include(configuracion.php) y sí que funciona con las mismas funciones. Además, la ruta está bien escrita porque incluyo una funcion con un echo en el archivo configuración.php y lo muestra correctamente. Este es el código que si me funciona, un archivo para comprobar usuairos:

Código PHP:
<?php

//Nos conectamos con la base de datos
include('../main/funciones/configuracion.php');

$usuario $_POST['p_username'];
$usuario addslashes($usuario);
$usuario strip_tags($usuario);

$contrasena $_POST['p_password'];
$contrasena addslashes($contrasena);
$contrasena strip_tags($contrasena);

//Conexion con la base de datos
$usuarios mysqli_query($link_megacursos"SELECT * FROM usuarios WHERE user='$usuario' and pass='$contrasena'");

//Comprobamos que el nombre y usuario son correctos
if ($fila mysqli_fetch_array($usuarios)) {

    
//Una vez comprobado si el login es correcto, asignamos las variables de sesion
    
session_start();
    
$_SESSION['nombre'] = $fila["nombre"];
    
$_SESSION['nivel'] = $fila["nivel"];
    
$_SESSION['telefono'] = $fila["telefono"];

    
define("PAGINA_INICIO""../main/index.php");
    
header("Location: " PAGINA_INICIO);
} else {
    
//Redireccionar a la pagina de inicio
    
define("PAGINA_INICIO""../index.php?mensaje=mensaje_error");
    
header("Location: " PAGINA_INICIO);
}

?>
¿Por qué en el segundo caso si que funciona la conexión con la base de datos y en el primer caso no? En ambos casos intento rescatar los datos de la misma manera y en ambos está declarado el include()...

¿Alguna idea?

Gracias y un saludo.
  #2 (permalink)  
Antiguo 17/09/2017, 18:49
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.700
Antigüedad: 8 años, 3 meses
Puntos: 194
Respuesta: Problema con variables e include()

Saludo

El problema parece ser ubicación.

En el segundo se hace el include saliendo de una ubicación y entrando a main/funciones, en el primero en cambio se hace como si el archivo
estuviese al mismo nivel del archivo de configuración.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #3 (permalink)  
Antiguo 20/09/2017, 05:45
 
Fecha de Ingreso: septiembre-2014
Mensajes: 72
Antigüedad: 3 años, 3 meses
Puntos: 0
Respuesta: Problema con variables e include()

Al final lo que he hecho es incluir $GLOBALS["nombre_variable"] dentro de la función, para poder utilizar las variables declaradas en el archivo configuracion.php. Al parecer tambien se puede, al principio dentro de la funcion, utilizar "globals" para declarar esas variables globales y poder acceder a ellas.

Gracias y un saludo.
  #4 (permalink)  
Antiguo 21/09/2017, 01:57
Avatar de vb2005  
Fecha de Ingreso: noviembre-2005
Ubicación: Paderborn - Alemania
Mensajes: 523
Antigüedad: 12 años
Puntos: 19
Respuesta: Problema con variables e include()

Varios puntos a destacar del código:
  1. Tu duda se soluciona usando require() en vez de include()
  2. No uses $_GLOBALS es una muy mala práctica
  3. Para escapar strings usa mysqli_real_escape_string y puedes quitar esas 3 lineas preparando tu string
  4. Nunca bajo ningún concepto guardes contraseñas en texto claro como lo que tienes en tu código, tienes que hashear las contraseñas lo más aceptado hoy en día es bcrypt, no te vayas por md5 o sha1 que.
__________________
www.marcher.com.uy - Web personal
Nerd's Corner - Desarrollo de software a medida
  #5 (permalink)  
Antiguo 25/09/2017, 18:19
 
Fecha de Ingreso: septiembre-2014
Mensajes: 72
Antigüedad: 3 años, 3 meses
Puntos: 0
Respuesta: Problema con variables e include()

Muchas gracias por tu respuesta, lo tendré en cuenta.

Lo de la contraseña era solo por hacer unas pruebas, no es la idea final.

Un saludo.
  #6 (permalink)  
Antiguo 22/10/2017, 12:35
 
Fecha de Ingreso: septiembre-2014
Mensajes: 72
Antigüedad: 3 años, 3 meses
Puntos: 0
Respuesta: Problema con variables e include()

Sobre el uso de $GLOBALS, si dentro de un archivo, en este caso configuracion.php, tengo declarada una variable, y quiero acceder a esa variable desde dentro de una función que he declarado dentro de otro archivo, como consultas.php, ¿cuál sería el mejor método?

Muchas gracias de nuevo y un saludo.



La zona horaria es GMT -6. Ahora son las 18:17.