Foros del Web » Programando para Internet » PHP »

:S porque no hace su funcion ?

Estas en el tema de :S porque no hace su funcion ? en el foro de PHP en Foros del Web. HOLA!!!! Miren tengo este trozo de codigo que lo que hace es comprobar en la base de datos el usuario y la contraseña y en ...
  #1 (permalink)  
Antiguo 21/12/2008, 03:41
 
Fecha de Ingreso: julio-2008
Mensajes: 89
Antigüedad: 15 años, 9 meses
Puntos: 0
:S porque no hace su funcion ?

HOLA!!!! Miren tengo este trozo de codigo que lo que hace es comprobar en la base de datos el usuario y la contraseña y en el caso de encotnrarlo lo guarda:

<?php
session_start();
import_request_variables('GPC');
$idioma=$_SESSION["idioma"];
$_SESSION["usuario"]=$usuario;
$_SESSION["pass"]=$pass;
$usuario=$_SESSION["usuario"];
$pass=$_SESSION["pass"];
?>
<?php
session_start();
import_request_variables('GPC');
$host="";
$user="";
$password="";
$db="";
$enlace=mysql_connect($host,$user,$password);
mysql_select_db($db, $enlace);
$consulta=mysql_query("SELECT * FROM login WHERE usuario LIKE '$usuario' and pass LIKE '$pass'", $enlace);
$dato=mysql_fetch_array($consulta);
$cambia=$dato["usuario"];
if ($dato==""){
echo "<META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'>";
} else {

}
?>

A continuación tengo un trozo de codigo que me imprime el nombre del usuario:

<?php
$cadena = " <font color='white' size='4'> -= $usuario =- </font> ";
$may = strtoupper($cadena);
echo $may ;
?>


Resulta que si alguien que no esta registrado pone la url directa al sitio de registrados no le hecha, el trozo de codigo en el que esta el meta content.

Es algo extraño porque ademas me imprime Hola -= =- <---no encuentra ningun usuario en la base de datos en cambio no lo hecha para fuera donde pone el meta content.


gracias
  #2 (permalink)  
Antiguo 21/12/2008, 08:22
Avatar de emiliodeg  
Fecha de Ingreso: septiembre-2005
Ubicación: Córdoba
Mensajes: 1.830
Antigüedad: 18 años, 7 meses
Puntos: 55
Respuesta: :S porque no hace su funcion ?

primero saca esos like's y pone =

segundo si esto es un validador que valida los datos desde un formulario de login en la sesion no deberia haber nada ergo deberias recibir en $_POST y no de $_SESSION

tercero mysql_fetch_assoc() devuelve FALSE si no encontro resultados asi que el if deberia ser if($dato===false)

y cuarto
echo " <font color='white' size='4'> -= '.strtoupper($dato['usuario']).' =- </font> ";

bueno con todo eso ya deberia ir mejor
__________________
Degiovanni Emilio
developtus.com
  #3 (permalink)  
Antiguo 21/12/2008, 09:48
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: :S porque no hace su funcion ?

Válidas sugerencias, pero el problema real por el que el usuario consulta se soluciona con el primer punto. El problema es que al hacer una comparación LIKE, buscas registros que contengan el string dado como parte del valor en X columna, y como en este caso $usuario no tiene valor, entonces la consulta queda como LIKE '', y obviamente un vacío se encuentra incluído en todos los registros.

Sobre la segunda sugerencia de emiliodeg, eso sería válido si estuviésemos hablando de uin formulario de login. Pero el usuario especifica que con ese trozo de código quiere comprobar si hay una sesión iniciada. Por lo tanto, $_SESSION es correcto.

Otra cosa, y que me intriga ya que es muy común de ver, es esto:

Código PHP:
$_SESSION["usuario"]=$usuario;
    
$_SESSION["pass"]=$pass;
    
$usuario=$_SESSION["usuario"];
    
$pass=$_SESSION["pass"]; 
Con las dos primeras líneas de código unseteas las variables de sesión, ya que ni $usuario ni $pass existen.

Y por último, te recomendaría trabajar mejor en el algoritmo que has planteado para comprobar el login de tus usuarios. ¿No es más fácil crear una variable de sesión al momento del login que indique que el usuario se ha logueado y trabajar primero en base a esa variable? Así, si la variable existe, recién pasas a comprobar que los datos de usuario y/o contraseña guardados en las otras variables de sesión correspondan a un usuario real. Si no existe, no es necesario hacer tal comprobación.

Y una última cosa. La redirección con tags HTML meta es un proceso que se puede detener desde el navegador. Asegúrate de terminar el script con un exit; al realizar la redirección, pues si no todo el contenido "restringido" podría ser visto fácilmente impidiendo que la página redireccione. O mejor usa header('Location:...');

  #4 (permalink)  
Antiguo 22/12/2008, 05:21
 
Fecha de Ingreso: julio-2008
Mensajes: 89
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: :S porque no hace su funcion ?

Primeramente muchisimas gracias a los dos por vuestra gran ayuda. Veo que os habeis trabajado mucho las respuestas. Aun no he probado vuestras sugerencias ahora me pondre manos a la obra.

A continuación citare un par de cosas que habeis escrito a ver si me podeis acabar de aclarar.

:=)
  #5 (permalink)  
Antiguo 22/12/2008, 05:23
 
Fecha de Ingreso: julio-2008
Mensajes: 89
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: :S porque no hace su funcion ?

Cita:
Iniciado por okram Ver Mensaje
Y una última cosa. La redirección con tags HTML meta es un proceso que se puede detener desde el navegador. Asegúrate de terminar el script con un exit; al realizar la redirección, pues si no todo el contenido "restringido" podría ser visto fácilmente impidiendo que la página redireccione. O mejor usa header('Location:...');

Sip lo se siempre hay un tiempo en el meta content en el cual apreto ESC y se paraliza la página que estoy visitando aunque este protegida.

Puedes aclararme un poco lo del EXIT?!

Gracias =)
  #6 (permalink)  
Antiguo 22/12/2008, 05:34
 
Fecha de Ingreso: julio-2008
Mensajes: 89
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: :S porque no hace su funcion ?

Cita:
Iniciado por okram Ver Mensaje
Y por último, te recomendaría trabajar mejor en el algoritmo que has planteado para comprobar el login de tus usuarios. ¿No es más fácil crear una variable de sesión al momento del login que indique que el usuario se ha logueado y trabajar primero en base a esa variable? Así, si la variable existe, recién pasas a comprobar que los datos de usuario y/o contraseña guardados en las otras variables de sesión correspondan a un usuario real. Si no existe, no es necesario hacer tal comprobación.
Veo que mi codigo tiene muchas lagunas -.- de que otra manera podreia hacer para comprobar esto que me dices... de otra forma.

Piensa que es un codigo que tengo puesto en todos los php por si alguien queire entrar directamente.

asiass
  #7 (permalink)  
Antiguo 22/12/2008, 08:10
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: :S porque no hace su funcion ?

No era necesario crear un mensaje para cada cita

El exit; en PHP sirve para terminar la ejecución del script. Si piensas hacer una redirección "detenible" (ya sea con javascript o usando metas), entonces debes asegurarte que sólo se envíe el código de la redirección, mas no el de tu contenido protegido. Para eso sería el exit; (No agrega nada a la redirección, sólo protege tu contenido). Pero por eso te sugerí usar header() para redireccionar en vez de.

Y tu segunda pregunta, todo es cuestión de armar una lógica sencilla, segura, y fluida. Al momento de iniciar sesión guarda en una variable de sesión el usuario y la contraseña (codificada?). Al momento de verificar si un usuario está loguado o no, primero (básico) verifica que esas variable de sesión existan, y si sí, entonces recién procedes a consultar a la base de datos. Es sólo para agilizar el proceso. Además, te recomendaría tener separados el proceso de login y de reconocimiento de usuarios. En el login usa sólo variables POST, mientras que en el reconocimiento sólo variables de sesión.

  #8 (permalink)  
Antiguo 23/12/2008, 02:43
 
Fecha de Ingreso: julio-2008
Mensajes: 89
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: :S porque no hace su funcion ?

Cita:
Iniciado por okram Ver Mensaje
Y tu segunda pregunta, todo es cuestión de armar una lógica sencilla, segura, y fluida. Al momento de iniciar sesión guarda en una variable de sesión el usuario y la contraseña (codificada?). Al momento de verificar si un usuario está loguado o no, primero (básico) verifica que esas variable de sesión existan, y si sí, entonces recién procedes a consultar a la base de datos. Es sólo para agilizar el proceso. Además, te recomendaría tener separados el proceso de login y de reconocimiento de usuarios. En el login usa sólo variables POST, mientras que en el reconocimiento sólo variables de sesión.


Sip logico todo, yo el codigo que hice lo elabore yo mismo no lo cogi de ningun sitio pero resulta que me funcionaba y ya no.
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 18:25.