Foros del Web » Programando para Internet » PHP »

Errores tontos (pero no los veo)

Estas en el tema de Errores tontos (pero no los veo) en el foro de PHP en Foros del Web. Hola, seguro que es un error tonto pero necesito ayuda para descubrirlos. Me explico: A través de un formulario mando a un archivo dos variables ...
  #1 (permalink)  
Antiguo 02/09/2008, 03:08
Avatar de Batusai  
Fecha de Ingreso: enero-2005
Ubicación: Málaga -Andalucía- España
Mensajes: 130
Antigüedad: 19 años, 3 meses
Puntos: 1
Errores tontos (pero no los veo)

Hola,

seguro que es un error tonto pero necesito ayuda para descubrirlos. Me explico:

A través de un formulario mando a un archivo dos variables (nombre de usuario y contraseña). Las variables se recogen bien porque puse un par de "echo" y sí llegan bien.
Luego intento comprobar que ese nombre y contraseña corresponda a alguna línea en una base de datos MySQL, y es ahí donde aparece el problema. Cuando aplico:
Código:
$query = "SELECT * FROM $table WHERE adminsname='$adminsname' AND adminspass=PASSWORD('$adminspass')";
Está mal. El caso es que cuando hago un script para insertar un nuevo usuario y contraseña en la base de datos el resultado de:
Código:
$query = "INSERT INTO $table VALUES ('$adminsname',PASSWORD('$adminspass'))";
El problema está en PASSWORD, porque aquí inserta algo que no es un PASSWORD normal en MySQL, que tienen un asterisco al principio y es una cadena muy larga. No, al insertar la entrada el campo adminspass es una cadena más corta y sin asterisco al principio.
¿En qué estoy fallando?

--------------------------------------------------------------------------------------------------------

Tengo otro problema a la hora de descargar un archivo (que está perfectamente) del servidor. Estas líneas no me funcionan bien, y aunque el archivo intenta descargarse lo hace de forma erronea y me da fallo del winrar:
Código:
		header("Content-Type: application/octet-stream");
		header("Content-Length: " . filesize($file));
		header("Content-Disposition: attachment; filename=" . basename($file));


if ($fp = fopen( $file,  "r")) { 

	fpassthru($fp);
    fclose($fp); // once the proccess is done we close the pointer to the file
}
Cualquier ayuda sería muy bienvenida y agradecida. Saludos.
  #2 (permalink)  
Antiguo 02/09/2008, 03:29
Avatar de Mort20  
Fecha de Ingreso: junio-2008
Ubicación: Roca Casterly
Mensajes: 141
Antigüedad: 15 años, 11 meses
Puntos: 2
Respuesta: Errores tontos (pero no los veo)

Lo primero la razón es obvia, tu haces:
Código:
$query = "INSERT INTO $table VALUES ('$adminsname',PASSWORD('$adminspass'))";
Pero en la consulta, ¿qué valores estás añadiendo? es decir, ¿dónde? Si te fijas no lo estás especificando. La sintaxis correcta sería algo parecido a:
Código:
$query = "INSERT INTO $table(name,pass) VALUES ('$adminsname',PASSWORD('$adminspass'))";
Y luego, ¿haces el mysql_query($query); después de eso?
---
La segunda cuestión ni idea, pocas veces he trabajado con archivos y lo máximo que he hecho ha sido leer un contenido de texto o una imagen o bien subirlos a mi servidor.
__________________
Un Lannister siempre cumple sus promesas
  #3 (permalink)  
Antiguo 02/09/2008, 03:45
Avatar de Batusai  
Fecha de Ingreso: enero-2005
Ubicación: Málaga -Andalucía- España
Mensajes: 130
Antigüedad: 19 años, 3 meses
Puntos: 1
Respuesta: Errores tontos (pero no los veo)

Tienes razón. De hecho había mirado otros casos similares en este foro y me dí cuenta de mi primer error. Lo cambié y ahora está así:
Código:
  //$query = "INSERT INTO $table (adminsname, adminspass) VALUES ('$adminsname',PASSWORD('$adminspass'))";
// Dejo esa linea comentada porque no quiero dar de alta más usuarios, sino usar el que ya está insertado.
$query = "SELECT adminsname, adminspass FROM $table WHERE adminsname='$adminsname' AND adminspass=PASSWORD('$adminspass')";
	
	$sql = mysql_query($query);
	$coincidencias = mysql_num_rows($sql);
// Los siguientes echo son para ver si las variables tienen valores correctos
	echo $coincidencias;
	echo $adminsname;
	echo $adminspass;
El caso es que adminsname y adminspass son correctos. El problema es que el resultado de $coincidencias me da cero, cuando debería darme uno, porque ya hay una línea con esos valores. El caso es que creo que el error viene por cómo interpreta PASSWORD. ¿Lo tomará como una función de PHP en vez de MySQL? Estoy perdido.

Saludos y gracias por la ayuda.
  #4 (permalink)  
Antiguo 02/09/2008, 04:29
Avatar de Mort20  
Fecha de Ingreso: junio-2008
Ubicación: Roca Casterly
Mensajes: 141
Antigüedad: 15 años, 11 meses
Puntos: 2
Respuesta: Errores tontos (pero no los veo)

A no ser que haya una función PASSWORD no debería tratarlo el PHP. De todas formas, aunque no creo que funcione pero por probar... prueba a usar comillas simples en vez de dobles:
Código PHP:
$query 'SELECT adminsname, adminspass FROM '.$table.' WHERE adminsname=\''.$adminsname.'\' AND adminspass=PASSWORD(\''.$adminspass.'\')'
Si no ya lo único que creo tendría sentido es que en la tabla no existiesen dos campos con ese nombre y ese password codificado.
__________________
Un Lannister siempre cumple sus promesas
  #5 (permalink)  
Antiguo 02/09/2008, 05:05
Avatar de Batusai  
Fecha de Ingreso: enero-2005
Ubicación: Málaga -Andalucía- España
Mensajes: 130
Antigüedad: 19 años, 3 meses
Puntos: 1
Respuesta: Errores tontos (pero no los veo)

El problema es que existen esos datos. Lo que me emparanoya es que cuando trato de insertar un nuevo usuario con clave
Código:
$query = "INSERT INTO $table (adminsname, adminspass) VALUES ('$adminsname',PASSWORD('$adminspass'))";
y la contraseña es la MISMA que en el otro caso. De hecho, cuando inserto directamente la consulta en la base de datos, con
Código:
insert into users (adminsname, adminspass) values ('juanma',PASSWORD('lamismapass'));
me lo inserta bien, y el campo adminspass está bien, pero al intentar hacer eso mismo a través del archivo PHP la contraseña insertada es diferente, mucho más corta y no parece una clave en formato 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 13:01.