Dudas y recursos para programas que no están en ninguno otro de los foros.
Avatar de Usuario
por Vito
#2944 Buenos días, estoy haciendo el curso de PHP, concretamente la clase 6. Alrededor del minuto 34 de la misma se intenta conectar mediante la base de datos MySQL utilizando la funcion mysql_connect, pero según la documentación de PHP, esta función está obsoleta. ¿Alguien podría indicarme como solventar este error? No consigo establecer la conexion entre el archivo PHP y la base de datos....

Gracias y un saludo.
Avatar de Usuario
por Vito
#2945 El error que se muestra exactamente es:

Fatal error: Uncaught Error: Call to undefined function mysql_connect() in C:\xampp\htdocs\curso\configuracion.php:9 Stack trace: #0 C:\xampp\htdocs\curso\login\autenticar.php(4): include() #1 {main} thrown in C:\xampp\htdocs\curso\configuracion.php on line 9

Gracias.
Avatar de Usuario
por Vito
#2948 Este es el archivo completo de configuracion.php:

Código: Seleccionar todo   $dbhost = 'localhost'; //Hosting de servidor
   $db = 'megacursos'; //Nombre de la base de datos
   $dbuser = 'root'; //usuario de la base de datos
   $dbpass = ''; // password de la base de datos

   //Conectamos y seleccionamos la base de datos
   mysql_connect($dbhost, $dbuser, $dbpass);
   mysql_select_db($db);

   //Comenzamos la sesión
   session_start();
?>


Un saludo.
Avatar de Usuario
por HadocDesign
#2949 Mmmm es posible que estes utilizando una versión de PHP que no dispone de soporte para las funciones obsoletas de PHP para conectar con MySQL..., te doy 2 opciones:

1) Utilizar las nuevas funciones de PHP para conectar con MySQL (mysqli_connect(), etc.), o algún otro método como PDO.
2) Utilizar una versión anterior de PHP y/o habilitar las funciones obsoletas (mysql_connect(), etc.).

Te dejo un ejemplo para ver si te ayuda a solucionarlo:

*********************
<?php
$enlace = mysqli_connect("127.0.0.1", "mi_usuario", "mi_contraseña", "mi_bd");
if (!$enlace) {
echo "Error: No se pudo conectar a MySQL." . PHP_EOL;
echo "errno de depuración: " . mysqli_connect_errno() . PHP_EOL;
echo "error de depuración: " . mysqli_connect_error() . PHP_EOL;
exit;
}
echo "Éxito: Se realizó una conexión apropiada a MySQL! La base de datos mi_bd es genial." . PHP_EOL;
echo "Información del host: " . mysqli_get_host_info($enlace) . PHP_EOL;
mysqli_close($enlace);
?>

*********************

Avísame si te sirvió sino para seguir indagando.
Avatar de Usuario
por Vito
#2954 Vale, me sirvió para conectar. Ahora tengo otro problema, estoy con un archivo de configuración PHP, del que hemos estado hablando:

Código: Seleccionar todo<?php

   $dbhost = 'localhost'; //Hosting de servidor
   $db = 'megacursos'; //Nombre de la base de datos
   $dbuser = 'root'; //usuario de la base de datos
   $dbpass = ''; // password de la base de datos

   //Conectamos y seleccionamos la base de datos
   $link_megacursos = mysqli_connect($dbhost, $dbuser, $dbpass, $db); //Es la función de PHP no obsoleta, con mysqli se pone tambien la base de datos a la que se quiere conectar como último parámetro

   //Comenzamos la sesión
   session_start();
?>


Luego, desde un archivo llamado consultas.php, hago lo siguiente:

Código: Seleccionar todo<?php

//En este PHP vamos a centralizar todas las consultas de la Intranet
include("configuracion.php");

if ($_SESSION['nivel'] == 1) {

    //Consultar usuarios
    function getUsuarios() {

        $usuarios = mysqli_query($link_megacursos, 'SELECT * FROM usuarios');

        while ($fila = mysqli_fetch_array($link_megacursos, $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>";
        }
    }

} else {
    define('PAGINA_INICIO', '../../index.php?mensaje=sin_permiso');
    header('Location:' . PAGINA_INICIO);
}
?>


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

Código: Seleccionar todoNotice: Undefined variable: link_megacursos in C:\xampp\htdocs\curso\main\funciones\consultas.php on line 12

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

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

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


Vuelve a ser un fallo de mysqli, que no está incluido en el curso porque utilizan la funcion obsoleta mysql(). No entiendo por qué me da ese error, porque en otro archivo PHP incluyo el include(configuracion.php) y si funciona:

Código: Seleccionar todo<?php

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

//RECUPERAMOS USUARIO Y CONTRASEÑA MEDIANTE EL METODO POST (UTILIZAR EL CONTENIDO DE LA ETIQUETA NAME) Y SE USAN DOS FUNCIONES PARA EVITAR CÓDIGOS MALICIOSOS
$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.
Avatar de Usuario
por charlytz
#2960 La función mysqli_fetch_array() aceptar diversos parámetros, sin embargo el primero siempre es un fetch array (el resultado de tu consulta SQL).
Dicho esto la solución sería poner

Código: Seleccionar todowhile ($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>";
        }


sin embargo, ese no es el error que te está dando el intérprete de PHP, sino que te está diciendo que no encuentra la variable $link_megacursos, esto es porque no se está importando correctamente el archivo configuracion.php, ¿Está seguro que ambos archivos están en el mismo directorio?, ya que, en el segundo ejemplo tiene importado de la siguiente manera:
Código: Seleccionar todoinclude('../main/funciones/configuracion.php');


Cualquier cosa estaré pendiente.