Foros del Web » Programando para Internet » PHP »

Warning: mysql_connect() - Tiene que ser una tontería!!

Estas en el tema de Warning: mysql_connect() - Tiene que ser una tontería!! en el foro de PHP en Foros del Web. Hola a todos/as, tengo el siguiente problema: Estoy intentando crear una web y utilizar sesiones...pero al grano 1. Tengo un fichero libreriaSQL.php con el siguiente ...
  #1 (permalink)  
Antiguo 05/03/2008, 11:01
 
Fecha de Ingreso: febrero-2005
Mensajes: 105
Antigüedad: 19 años, 2 meses
Puntos: 1
Warning: mysql_connect() - Tiene que ser una tontería!!

Hola a todos/as, tengo el siguiente problema: Estoy intentando crear una web y utilizar sesiones...pero al grano

1. Tengo un fichero libreriaSQL.php con el siguiente contenido:

Código:
<?php
	// Datos de acceso al servidor de Bases de Datos.
	$host = "localhost";
	$nombreUsuario = "root";
	$claveUsuario = "";
	$bbdd = "proyecto";

	// Conexión a la Base de Datos.
	function conectar () {
		global $host;
		global $nombreUsuario;
		global $claveUsuario;
		global $bbdd;

		// Conectamos con el servidor.
		$conexion = mysql_connect($host, $nombreUsuario, $claveUsuario) or die ('Error: Imposible conectar con la base de datos.');
		// Seleccionamos la Base de Datos.
		mysql_select_db($bbdd, $conexion)  or die ("Error: Imposible seleccionar la Base de Datos.");

		return $conexion;
	}

	// Finalización de conexión a la Base de Datos.
	function cerrar ($conexion) {
		mysql_close($conexion);
	}

        function existeUsuario ($idNombre, $idClave) {
		global $host;
		global $nombreUsuario;
		global $claveUsuario;
		global $bbdd;

		$conexion = conectar ();
		$consulta = 'SELECT nombre_usuario, clave_usuario FROM usuarios WHERE nombre_usuario = "'.$idNombre."';
		$resultado = mysql_query($consulta, $conexion);

		if ( mysql_num_rows($resultado) == 0 ) {
			sinResultados();
		} else {
			print 'El usuario: ' . $nombreUsuario . 'existe en la base de datos';
		}

		cerrar($conexion);
	}
2. Y otro fichero realizarAcceso.php en el que recojo las variables correspondientes al usuario que quiere loguearse en la web con el siguente contenido:


Código:
<?php
	session_start ();

	include_once ('libreriaSQL.php');

	print '<p>Hemos iniciado una sesion</p>';
	print '<p>La sesión actual es: '.session_id() . '</p>';

	$nombreUsuario = $_POST['nombreUsuario'];
	$claveUsuario = $_POST['claveUsuario'];

	existeUsuario ($nombreUsuario, $claveUsuario);

	print 'Usuario: ' . $nombreUsuario;
	print 'Password: ' . $claveUsuario;
?>
Bueno, pues si me logue como $nombreUsuario='root' y $claveUsuario='' todo funciona bien, pero si quiero acceder con un usuario imaginario (exista en la base de datos o no) como $nombreUsuario='user' y $claveUsuario='pass' obtengo el siguiente error:

Código:
Hemos iniciado una sesion

La sesión actual es: 8088635714fdb080f2ea074195e14c55

Warning: mysql_connect(): Acceso negado para usuario: 'user'@'localhost' (Usando clave: SI) in c:\archivos de programa\easyphp1-8\www\proyecto\libreriaSQL.php on line 16
Error: Imposible conectar con la base de datos.
He estado mirando en libros, la red y en este foro pero no he encontrado nada que tenga que ver con el tema concretamente (las soluciones siempre son siferentes... que si ficheros de configuración, que si consultas mañ formuladas,...), pero estoy seguro de que a más de alguna persona le ha ocurrido este problema y sabe solucionarlo, así que espero que alguien me heche un cable porque si no es así me quedaré estancado y no podré continuar trabajando en la web.

Un saludo a todos/as y muchas gracias de antemano!

Última edición por gazpachoymochil; 05/03/2008 a las 11:31
  #2 (permalink)  
Antiguo 05/03/2008, 12:05
 
Fecha de Ingreso: febrero-2005
Mensajes: 105
Antigüedad: 19 años, 2 meses
Puntos: 1
Re: Warning: mysql_connect() - Tiene que ser una tontería!!

Solucionado, ahora ya me loguea bien. Los ficheros modificados son:

1. libreriaSQL.php

Código:
function existeUsuario ($idNombre, $idClave) {
		global $host;
		global $nombreUsuario;
		global $claveUsuario;
		global $bbdd;

		$conexion = conectar ();
		$consulta = 'SELECT nombre_usuario, clave_usuario FROM usuarios WHERE nombre_usuario = "' . $idNombre . '"';
		$resultado = mysql_query($consulta, $conexion);

		if ( mysql_num_rows($resultado) == 0 ) {
			print 'El usuario: ' . $idNombre . 'no existe en la base de datos';
		} else {
			print 'El usuario: ' . $idClave . 'existe en la base de datos';
		}

		cerrar($conexion);
	}
2. realizarAcceso.php

Código:
<?php
	session_start ();

	include_once ('libreriaSQL.php');

	print '<p>Hemos iniciado una sesion</p>';
	print '<p>La sesión actual es: '.session_id() . '</p>';

	$idNombre = $_POST['nombreUsuario'];
	$idClave = $_POST['claveUsuario'];

	existeUsuario ($idNombre, $idClave);

	print 'Usuario: ' . $idNombre;
	print 'Password: ' . $idClave;
?>
Por ahora no obtengo ningún problema al rellenar el formulario e intentar loguearme con o sin un usuario existente en la base de datos. De todas formas no sé si la estructura del segundo fichero (realizarAcceso.php) es la más correcta...¿alguna sugerencia para obtener un fichero para acceder a la base de datos de una forma segura? ¿si quiero que haya usuarios que puedan interactuar con la base de datos debo comprobar si existen en la base de datos y que luego realicen cualquier acción sobre ella como si fuesen el root?
  #3 (permalink)  
Antiguo 05/03/2008, 12:11
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 22 años, 5 meses
Puntos: 655
Re: Warning: mysql_connect() - Tiene que ser una tontería!!

Trasladado de BD a PHP. Favor no poner código de programación en BD.

Función de la sección de Base de Datos
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
  #4 (permalink)  
Antiguo 06/03/2008, 10:26
 
Fecha de Ingreso: febrero-2005
Mensajes: 105
Antigüedad: 19 años, 2 meses
Puntos: 1
Re: Warning: mysql_connect() - Tiene que ser una tontería!!

Lo siento, como tenía un problema con MySQL pensé que debía poner el post en esa sección. De todas formas ya no volverá a ocurrir.

Aprovechando que escribo este mensaje me gustaría re-preguntar lo anterior:

- ¿Una vez logueados los usuarios en la base de datos (que podrán insertar información en ella) todas sus acciones las harán como root? Es decir, si quieren insertar un título_de_película y año_rodaje, por ejemplo, y el formulario tiene la etiqueta action="insertarPelicula.php", el fichero insertarPelicula.php recogerá los datos y los insertará en la base de datos... ¿pero como root?

No sé si es lo suficientemente clara la pregunta, pero es más fácil hablado que escrito. Un saludo!!
  #5 (permalink)  
Antiguo 06/03/2008, 10:55
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Warning: mysql_connect() - Tiene que ser una tontería!!

Las acciones que hagas (INSERTAR, o BORRAR) se hacen bajo el usuario que te hayas conectado.

Saludos.
  #6 (permalink)  
Antiguo 06/03/2008, 11:20
 
Fecha de Ingreso: febrero-2005
Mensajes: 105
Antigüedad: 19 años, 2 meses
Puntos: 1
Re: Warning: mysql_connect() - Tiene que ser una tontería!!

Gracias GatorV por contestar, es de las primeras veces que utilizo mysql y me es un poco extraño todo. Entonces, ¿debo conectar como root o como "usuario normal"? Es decir, ¿la funcion mysql_connect() debe llevar los parámetros del usuario, no los del root? ¿Y de esta forma se conectará sin problemas? ¿Sólo utilizo el root para ver si el usuario existe y loguearlo?

Mi fichero realizarAcceso ha quedado así:

<?php
session_start ();

include_once ('libreriaXHTMLEstatica.php');
include_once ('libreriaSQL.php');

$idNombre = $_POST['nombreUsuario'];
$idClave = $_POST['claveUsuario'];

cabecera ();
logoPrincipal ();

?>
<div id = "ContenidoPrincipal">
<?php
if ( existeUsuario ($idNombre, $idClave) ) {
$SESSION['nombreUsuario'] = $idNombre;
$SESSION['claveUsuario'] = $idClave;
print '<h1>Bienvenido ' . $SESSION['nombreUsuario'] . '. Acaba de iniciar sesi&oacute;n.</h1>';
} else {
print 'El usuario ' . $idNombre . 'NO existe';
session_destroy();
print 'Sesion: ' . session_id();
}
print '</div>';
pie ();
?>

¿Qué debería añadir?

Gracias y espero no ser "paliza" con el tema.
  #7 (permalink)  
Antiguo 06/03/2008, 11:32
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Warning: mysql_connect() - Tiene que ser una tontería!!

Lo ideal es que tu crearas un usuario especifico para conectarte a MySQL, este usuario lo dejas con privilegios básicos para que no tengas problemas en un futuro y prevenir fallos de seguridad.

Saludos.
  #8 (permalink)  
Antiguo 07/03/2008, 04:53
 
Fecha de Ingreso: febrero-2005
Mensajes: 105
Antigüedad: 19 años, 2 meses
Puntos: 1
Re: Warning: mysql_connect() - Tiene que ser una tontería!!

Vale, entonces en vez de conectar a la base de datos como root lo puedo hacer como otro usuario creado por mí, previamente, accediendo a phpmyadmin (por ejemplo). Aunque no habría problemas en hacerlo como root, no? O sea, ejecutar la función existeUsuario ($nombre, $clave) como root, al igual que el resto de funciones (anyadirItem(), eliminarItem(),...).
  #9 (permalink)  
Antiguo 07/03/2008, 09:39
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Warning: mysql_connect() - Tiene que ser una tontería!!

Recuerda que los usuarios de la base de datos, son diferentes de los usuarios que tu crees manualmente para tu aplicación.

Saludos.
  #10 (permalink)  
Antiguo 07/03/2008, 12:16
 
Fecha de Ingreso: febrero-2005
Mensajes: 105
Antigüedad: 19 años, 2 meses
Puntos: 1
Re: Warning: mysql_connect() - Tiene que ser una tontería!!

Siento dar la tabarra, pero es que intento aclarar conceptos. No tengo claro qué usuarios hacen qué... Veamos si me aclaro:

1- Yo tengo una web que, inicialmente, debe mostrar ya información que existe en la base de datos (por ejemplo, listar los cds de música que existen en la base de datos) -> ¿Esto lo hace el root? (Yo creo que sí)

2- He de crear un formulario para registrar nuevos usuarios junto con los permisos que les voy a otorgar (listar, insertar,...) -> ¿Eso también lo hago como root? (Yo creo que sí)

3- Una vez se loguee un usuario, para ver si ese usuario puede loguearse ¿debo comprobar el usuario y la clave como root? (Yo creo que sí)

4- Pero... para que un usuario conecte a la Base de Datos ¿debo conectar con el nombre de usuario?(Yo creo que si. Creo que debe realizar la conexión a la base de datos como el usuario que es). Pero podré definir una función conectar() para el usuario="root" y otra para el usuario="usuario"?


Si me aclarases estas preguntas tendría las ideas mucho más claras.

Un saludo.
  #11 (permalink)  
Antiguo 07/03/2008, 12:33
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Warning: mysql_connect() - Tiene que ser una tontería!!

Esque debes de separar muy bien como vas a diseñar tu aplicación, la idea es que tu tengas un usuario único en la base de datos que solo tenga permisos de insertar, actualizar y borrar.

Luego tienes una tabla de usuarios donde tu cargas ahí los usuarios que vayas agregando y guardas también los permisos que tienen, pero ese control ya lo llevas tu en tu aplicación y no es la base de datos la que se encarga de hacerlo.

Saludos.
  #12 (permalink)  
Antiguo 07/03/2008, 12:42
Avatar de vevni  
Fecha de Ingreso: julio-2005
Ubicación: cancun mexico
Mensajes: 598
Antigüedad: 18 años, 9 meses
Puntos: 3
Pregunta Re: Warning: mysql_connect() - Tiene que ser una tontería!!

no debes confundir el usuario de la bd, con los usuarios de tu aplicacion, mediante php tu controlas eso de insertar, mostrar, esas restricciones tu las manejas con php, creando zonas o permisos, etc. eso es programacion.

ahora el usuario de la bd es el que te permite conectarte y ejecutar todas las operaciones basicas sobre mysql, no debes confundir este usuario............. con los de tu aplicacion................................

pongamoslo asi de sencillo, en este foro tu te registras y todo, y tienes ciertos privilegios que todos los demas usuarios normales de este foro compartimos, tu puedes crear mensajes, postear, responder, etc............ pero tu usuario DIFIERE del usuario que se usa internamente por php/mysql para hacer todas tus operaciones...

ahora este mismo foro te permite tener diferentes tipos de usuarios, un ejemplo es el ADMIN que tiene los privilegios de cerrar mensajes, eliminarlos, etc, osea tiene los privilegios poderosos, jejejeje............ pero DIFIERE = del usuario utilizado por php/mysql para ejecutar las operaciones de insercion y todo eso......

en resumen, tu puedes crear tu aplicacion para que administre los usuarios que desees, pero internamente solo se usara un usuario para que php/mysql ejecute las operaciones. normalmente se crea un usuario con permisos basicos para que se ejecuten las operaciones basicas.
__________________
Código PHP:
echo"hola mundo ver 1221332143.02";
echo
"cuantos usuarios habran impreso hola mundo en el mundo.!???"
  #13 (permalink)  
Antiguo 07/03/2008, 12:53
 
Fecha de Ingreso: febrero-2005
Mensajes: 105
Antigüedad: 19 años, 2 meses
Puntos: 1
Re: Warning: mysql_connect() - Tiene que ser una tontería!!

Muchas gracias a los dos, creo que ya he desenredado la maraña de dudas que tenía.

La cosa es así: Las operaciones sobre la base de datos las realiza un solo usuario que deberé crear yo mismo con los permisos para ejecutar las operaciones que yo crea oportunas != root (), como SELECT, INSERT, UPDATE.... De esta forma podré tener un "superusuario personal" que ejecute las operaciones que yo quiera sobre la base de datos. Y realmente, será sólo este "superusuario" quien ejecute las acciones de, por ejemplo, INSERT (...) sobre la base de datos, aunque estas acciones las realicen usuarios diferentes. Seré yo quien defina las funciones que pueden ejecutar los usuarios (por ejemplo, function insertarPelicula()), pero será el "superusuario" quien, realmente, se conecte a la base de datos y las ejecute "en nombre de" estos usuarios.

Si es así me ha quedado ya muy claro. Espero que así sea y, de veras, gracias por la ayuda y un saludo!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 23:47.