Foros del Web » Programando para Internet » PHP »

Error al buscar en la base de datos

Estas en el tema de Error al buscar en la base de datos en el foro de PHP en Foros del Web. Hola quería tener un sistema de login pero el código falla en alguna parte. Cogí un código de internet y lo modifiqué puesto que no ...
  #1 (permalink)  
Antiguo 06/04/2013, 05:16
 
Fecha de Ingreso: mayo-2010
Mensajes: 51
Antigüedad: 13 años, 10 meses
Puntos: 0
Error al buscar en la base de datos

Hola quería tener un sistema de login pero el código falla en alguna parte.
Cogí un código de internet y lo modifiqué puesto que no tengo mucha idea de bases de datos y no entiendo realmente qué puede fallar o qué cambié para que no funcione :S
No sé si hay algún error de sintaxis, ojalá me puedan ayudar...

Código PHP:
<? session_start();
include(
"bbdd_conexion.php");
$nick $_POST['nick'];
$pass sha1(md5(trim($_POST['pass'])));
$link=mysql_connect($server,$dbuser,$dbpass);
$query sprintf("SELECT *
FROM users WHERE nick='$nick' && pass='$pass'"
);
$result=mysql_db_query($database,$query,$link);
if(
mysql_num_rows($result)){ // nos devuelve 1 si encontro el usuario y el password
$array=mysql_fetch_array($result);
$_SESSION["nick"]=$array["nick"];
$_SESSION["loginOK"]="1";
header("location:index.php");
}  else {
?>
  #2 (permalink)  
Antiguo 06/04/2013, 05:22
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 8 meses
Puntos: 2114
Respuesta: Error al buscar en la base de datos

Mostrando sólo ese código pueden ser mil cosas, ya que no sabemos lo que hay en bbdd_conexion.php, cómo es el formulario ni el diseño de la base de datos.

Si lo cogiste de Internet, tienes que haber creado la base de datos con el mismo diseño, que en el registro se cifre la contraseña de la misma forma que la cifras en la comprobación, que corresponda el formulario de registro con los datos que recoges, etc. Y si hiciste cambios, pues esos cambios tienen que reflejarse en todo el sistema también.

Y en ese código concretamente no cierras el condicional al final.
  #3 (permalink)  
Antiguo 06/04/2013, 05:33
 
Fecha de Ingreso: mayo-2010
Mensajes: 51
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Error al buscar en la base de datos

En bbdd_conexion.php están los siguientes parámetros:
$server
$database
$dbpass
$dbuser

La base de datos contiene los campos:
id
nick
pass
mail
permisos


El formulario de registro:
Código:
<? session_start();
$permisos=$_SESSION['permisos'];
$loginOK=$_SESSION['loginOK'];
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>CXC</title>
</head>

<body>
    <?php 
if($loginOK!="1"){
	$_SESSION['loginOK']=0;
	?>
    <table align="right">
    	<tr style="line-height:12px; text-align:right;">
        	<td>
<form class="miform" action="form_test.php" method="post">
<label>Login:</label><input name="nick" type="text" />
<label>Password:</label><input name="pass" type="password" />
<input class="boton" type="submit" value="Entrar" /> </form>
			</td>
            <td>
<form class="miform"  action="form_reg.php" method="post">
<label> | </label>
<input class="boton" type="submit" value="Registrarse" /> </form> 
			</td>
		</tr>
	</table>
    <?php 
}elseif($loginOK=="1"){?>
<form>
<label><?php echo utf8_encode($_SESSION['nick']); ?></label>
<label><a href="form_logout.php">Cerrar sesión</a></label>
<?php if($_SESSION["permisos"]=="1"){ ?>
	<label>&raquo; Admin</label> 
	<?php	}
	}else{
	$_SESSION['permisos']="0";  ?>
	<label>&raquo; Usuario</label>
	<?php } ?>
</form>


</body>
</html>
Después del condicional te dice que hay un error:
<?php print "Login o Password Incorrecto"; ?>
  #4 (permalink)  
Antiguo 06/04/2013, 06:10
 
Fecha de Ingreso: enero-2013
Ubicación: Santa Fe, VT
Mensajes: 68
Antigüedad: 11 años, 2 meses
Puntos: 2
Respuesta: Error al buscar en la base de datos

imprime la variable $result para ver que devuelve, tal vez puede ser ese el problema.

Ademas revisa el formulario de registro creo que tiene llaves en lugares equivocado cerca del final del codigo
  #5 (permalink)  
Antiguo 06/04/2013, 06:13
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 8 meses
Puntos: 2114
Respuesta: Error al buscar en la base de datos

¿Y el registro? Porque según veo eso es para el login, que parece estar bien. De todas formas, también, ¿te da algún error? ¿qué no funciona concretamente? ¿Compruebas que llegan todos los datos correctamente al intentar iniciar la sesión?
  #6 (permalink)  
Antiguo 06/04/2013, 06:14
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Error al buscar en la base de datos

Cita:
Iniciado por sToRaGe Ver Mensaje
Hola quería tener un sistema de login pero el código falla en alguna parte.
Cogí un código de internet y lo modifiqué puesto que no tengo mucha idea de bases de datos y no entiendo realmente qué puede fallar o qué cambié para que no funcione :S
No sé si hay algún error de sintaxis, ojalá me puedan ayudar...
El primer consejo que se te puede dar es que no tomes códigos que no entiendes.
Si tomas un código lo primero que debes hacer es estudiarlo y entenderlo. Probando al tun-tun es como se hacen los desastres.

El segundo consejo sería que nos expliques a qué te refieres cuando dices "no entiendo realmente qué puede fallar "...
¿Falla o no falla?
¿Muestra algún error, o no muestra nada?
Si no muestra nada, ¿verificaste que los datos sean correctos, es decir que realmente existan en la base?
¿Que hiciste tu para intentar resolver el problema? ¿Qué pruebas? ¿Qué verificaciones?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 06/04/2013, 06:28
 
Fecha de Ingreso: mayo-2010
Mensajes: 51
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Error al buscar en la base de datos

El $result me tira lo siguiente: Resource id #4

Me muestra la 2ª parte del condicional, que El login o el password son incorrectos.

Creo que el código lo entendí, a ver si me equivoco...

Código PHP:
<? session_start(); //inicia la sesión
include("bbdd_conexion.php"); //incluye la hoja donde están los datos del servidor para conectar
$nick $_POST['nick']; //recibe la variable desde el formulario
$pass sha1(md5(trim($_POST['pass']))); //recibe la contraseña codificada desde el formulario
$link=mysql_connect($server,$dbuser,$dbpass); //conecta con la base de datos
$query sprintf("SELECT * 
FROM users WHERE nick='$nick' && pass='$pass'"
); //busca todos los parámetros dentro de 'users' con el nick y la contraseña recibidos del formulario
$result=mysql_db_query($database,$query,$link); //recibe el resultado de la búsqueda
if(mysql_num_rows($result)){ //devuelve 1 si ha encontrado el usuario y la contraseña
$array=mysql_fetch_array($result); //guarda en variables array los datos de la tabla?
$_SESSION["nick"]=$array["nick"]; //guarda en la sesión el nick
$_SESSION["loginOK"]="1"//almacena 1 para indicar que el login ha sido correcto y no muestre la opción de loguearse de nuevo en ésta y otras páginas
header("location:index.php"); //redirecciona a index.php 
}  else {?> //si no lo ha encontrado te muestra que el usuario o la contraseña son incorrectos
  #8 (permalink)  
Antiguo 06/04/2013, 06:33
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Error al buscar en la base de datos

Sigues sin responder unas preguntas básicas:
Cita:
A qué te refieres cuando dices "no entiendo realmente qué puede fallar "...
¿Falla o no falla?
¿Muestra algún error, o no muestra nada?
Si no muestra nada, ¿verificaste que los datos sean correctos, es decir que realmente existan en la base?
¿Que hiciste tu para intentar resolver el problema? ¿Qué pruebas? ¿Qué verificaciones?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 06/04/2013, 06:39
 
Fecha de Ingreso: mayo-2010
Mensajes: 51
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Error al buscar en la base de datos

No entiendo qué puede fallar, no sé por qué no encuentra el usuario en la bbdd (creo que ese sería el problema)
No, no muestra ningún error.
Sí, en la base existe el registro del usuario con el que entro, la contraseña, el mail introducido en el formulario previo, la ID autoincrementa y los permisos por defecto son 0 (aunque también he tratado de hacerlo cambiando el permiso por 1).


Hice estas impresiones para ver qué tiraban:

$resultado:Resource id #4 (no sé qué significa.........)
$loginOk: 0 (no se ha podido loguear)
$_session["nick"]: (no devuelve nada)
$nick: devuelve bien el usuario
$pass: devuelve bien la contraseña
  #10 (permalink)  
Antiguo 06/04/2013, 07:01
 
Fecha de Ingreso: enero-2013
Ubicación: Santa Fe, VT
Mensajes: 68
Antigüedad: 11 años, 2 meses
Puntos: 2
Respuesta: Error al buscar en la base de datos

if(mysql_num_rows($result));
esta parte no tendria que ser asi = if(mysql_num_rows($result)>0);?

intenta imprimir $array["nick"] de seguro estara vacio. Corrigelo y tendria que devolver user no encontrado

EDIT: mmm no, me confundi de funcion XD, voy a probar el codigo en wamp ahora
  #11 (permalink)  
Antiguo 06/04/2013, 07:08
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Error al buscar en la base de datos

Primera clave:
Cita:
No, no muestra ningún error.
Eso significa por lo menos que no hay errores sintacticos en el PHP. No implica necesariamente que no existan devueltos por el MySQL, porque esos no los estás considerando (no capturas errores posibles en ninguna parte).
Cita:
Sí, en la base existe el registro del usuario con el que entro, la contraseña, el mail introducido en el formulario previo, la ID autoincrementa
¿Hiciste un echo de la consulta una vez construida y antes de ser enviada?
¿Tomaste eso y lo probaste directamente a mano en la base?

Es decir, incluir antes de enviar, esto:
Código PHP:
Ver original
  1. echo $query;

Y luego copiar lo que muestra y probar con eso usando phpMyadmin, o lo que sea que tengas disponible.
¿Hiciste eso?

¿Qué devolvió?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 06/04/2013, 07:19
 
Fecha de Ingreso: marzo-2013
Ubicación: cali
Mensajes: 9
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: Error al buscar en la base de datos

amigo no se estoy muy seguro pero la verdad a mi nunca me ha funcionado de esta forma los query
$query = sprintf("SELECT * FROM users WHERE nick='$nick' && pass='$pass'");
hasta donde tengo entendido las condiciones dentro del query deben ir con and y no con && prueba a ver si te funciona buena suerte.
  #13 (permalink)  
Antiguo 06/04/2013, 07:22
 
Fecha de Ingreso: enero-2013
Ubicación: Santa Fe, VT
Mensajes: 68
Antigüedad: 11 años, 2 meses
Puntos: 2
Respuesta: Error al buscar en la base de datos

Código PHP:
<?php

/**
 * @author LUISFECAB
 * @copyright 2013
 */
$server="localhost";
$dbuser="root";
$dbpass="";
session_start(); 
//include("bbdd_conexion.php"); //incluye la hoja donde están los datos del servidor para conectar
$nick $_POST['nick']; 
$pass $_POST['pass']; 
$link=mysql_connect($server,$dbuser,$dbpass); 
mysql_select_db("Tu_db");
$query sprintf("SELECT * 
FROM cuentas WHERE name='$nick'"
); 
$result=mysql_query($query); 
if(
mysql_num_rows($result)>0){ 
$array=mysql_fetch_array($result); 
$_SESSION["nick"]=$array["nick"]; 
$_SESSION["loginOK"]="1";
echo 
"todo correcto";
}  else {
echo 
"ERROR";
}
?>
me funciono bien, solamente falta verificar la password, nose si es mejor o peor pero yo verifico la contraseña despues de haber encontrado la fila y obtenido todos los campos, segui los consejos de gnzsoloyo y suerte.
  #14 (permalink)  
Antiguo 06/04/2013, 07:35
 
Fecha de Ingreso: mayo-2010
Mensajes: 51
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Error al buscar en la base de datos

He puesto para ver qué tira el $query: SELECT * FROM users WHERE nick='(el nick correcto que le pongo)' && pass='(la contraseña codificada correctamente igual que se guarda en la bbdd'

He probado con el AND pero da exactamente lo mismo.
  #15 (permalink)  
Antiguo 06/04/2013, 09:03
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 8 meses
Puntos: 2114
Respuesta: Error al buscar en la base de datos

Cita:
Iniciado por sToRaGe Ver Mensaje
He puesto para ver qué tira el $query: SELECT * FROM users WHERE nick='(el nick correcto que le pongo)' && pass='(la contraseña codificada correctamente igual que se guarda en la bbdd'

He probado con el AND pero da exactamente lo mismo.
¿Y todo lo demás que te han dicho en #11 qué cosas devuelven y ocurren?

El problema es que no das información alguna de los errores ni haces las pruebas que te dicen hacer para averiguar el fallo, que obviamente en algún sitio tiene que saltar al hacer este tipo de pruebas.

Etiquetas: mysql
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




La zona horaria es GMT -6. Ahora son las 06:24.