Foros del Web » Programando para Internet » PHP »

Script simplificado de login, (llevo todo el día intentando depurarlo)

Estas en el tema de Script simplificado de login, (llevo todo el día intentando depurarlo) en el foro de PHP en Foros del Web. Buenas! Llevo todo el dia de hoy intentando depurar los errores de un script de login simplificado que yo mismo escribí esta semana, pero no ...
  #1 (permalink)  
Antiguo 06/09/2012, 03:59
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 3 meses
Puntos: 30
Pregunta Script simplificado de login, (llevo todo el día intentando depurarlo)

Buenas!

Llevo todo el dia de hoy intentando depurar los errores de un script de login simplificado que yo mismo escribí esta semana, pero no consigo que funcione

Ps.(las variables de los nombres de los campos de la tabla usuarios de mysql son correctos)

Código PHP:
[HIGHLIGHT="PHP"]
<?php
session_start
();

include(
"modulo.php"); // MODULO.php es un archivo que contiene la funcion limpiar_sql para evitar ataques de SQL inyection, no influlle para nada en las variables finales (en este caso de $nick)

    
$pass=sha1($_POST['passlogin']);
    
$nick=limpiar_sql($_POST["nicklogin"]);
                                    
    if (
$nick && $pass)
        {
         
$link mysqli_connect('localhost''*****''*****''****');
        
         if (!
$link) {
            die(
'Connect Error (' mysqli_connect_errno() . ') 'mysqli_connect_error());
            echo 
"imposible conectar con la base de datos";
         exit;
         }
         
         else{
          
$result mysql_query("select nick,contrasena from Usuarios
                         where nick='$nick'
                         and contrasena = '$pass'"
);
          if (!
$result){
         echo 
"nombre o contraseña erroneos";
         exit;
         }}
           if (
mysql_num_rows($result)>0){
          echo 
"nombre y contraseña no existen";
         exit;
         }
          if(
result){
         
$valid_user $nick;
           
session_register("valid_user");
          echo 
"conectado correctamente";
        }
        }

?>

[/HIGHLIGHT]
Se agradece cualquier bug/error que veais
  #2 (permalink)  
Antiguo 06/09/2012, 04:27
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Script simplificado de login, (llevo todo el día intentando depurarlo)

session_register -> http://es.php.net/session_register [Marcada como obsoleta!]

Código PHP:
if(result){
         
$valid_user $nick;
           
session_register("valid_user");
          echo 
"conectado correctamente";
        } 
A ese "result" le falta el $.

Edit:

Código PHP:
 if (!$result){
         echo 
"nombre o contraseña erroneos";
         exit;
         } 
Esta condición `sobra`. Es la misma la de num_rows (corregida!)

Código PHP:
 if (mysql_num_rows($result)>0){
          echo 
"nombre y contraseña no existen";
         exit;
         } 
Te equivocas en el operador lógico. Es justo el contrario... es <=0 (Es decir, que NO hay resultados!)
__________________
>> Eleazan's Source
>> @Eleazan
  #3 (permalink)  
Antiguo 06/09/2012, 04:52
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 3 meses
Puntos: 30
Respuesta: Script simplificado de login, (llevo todo el día intentando depurarlo)

Muchas gracias, la verdad cuando llevas un par de horas con el mismo código, ya te pasas por alto cosas muy simples!

Pero algo que desconocía era la función obsoleta de session_register() , gracias x2 !
  #4 (permalink)  
Antiguo 06/09/2012, 05:03
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 3 meses
Puntos: 30
Respuesta: Script simplificado de login, (llevo todo el día intentando depurarlo)

Por cierto, he corregido todos los fallos que has expuesto y al intentar probarlo me sigue tirando el herror del hecho (equivalente a !$result o num_rows<=0) es decir que no existen coincidencias o que la consulta esta mal hecha.

Código PHP:
mysql_query("select nick,contrasena from Usuarios
                         where nick='$nick'
                         and contrasena = '$pass'"
); 
he probado con la variante de seleccionar todos los campos, pero tampoco :

Código PHP:
mysql_query("select * from Usuarios
                         where nick='$nick'
                         and contrasena = '$pass'"
); 
tambien he probado con la mas reciente, mysqli :

Código PHP:
mysqli_query("select * from Usuarios
                         where nick='$nick'
                         and contrasena = '$pass'"
); 
¿Alguna idea?
  #5 (permalink)  
Antiguo 06/09/2012, 05:09
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Script simplificado de login, (llevo todo el día intentando depurarlo)

mysql_query() no se puede usar si la conexión la estableces con mysqli_connect()
__________________
- León, Guanajuato
- GV-Foto
  #6 (permalink)  
Antiguo 06/09/2012, 05:35
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años
Puntos: 33
Respuesta: Script simplificado de login, (llevo todo el día intentando depurarlo)

Buenas!

Si dices que los campos de tabla están bien, desde luego el sql parece correcto. No se si el cómo esté tipeado el nombre de la tabla influye (es decir, "Usuario" o "usuario").

Aparte, y CREO que no me equivoco, tras el "die" que tienes en el if (if(!$link)) no se ejecutarían ni el echo ni el exit, ya que el die para la ejecución, ya que es similar a "exit()".

Esto no es un fallo, pero te dejaría un código más limpio (y más legible, por tanto). Incluso si usas algún IDE como eclipse te puede saltar un warning de "unracheable code".

Repito que CREO que es así...

De todas maneras, creo que Triby tiene razón; usando el mysqli no se puede usar un mysql_query() (nunca he usado mysqli).

Saludos!
  #7 (permalink)  
Antiguo 06/09/2012, 05:42
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 3 meses
Puntos: 30
Respuesta: Script simplificado de login, (llevo todo el día intentando depurarlo)

Como he dicho en el 3º mensaje he probado con el mas reciente, sqli pero tampoco.


Voy a desistir en esta tarea, quería crear un script propio para el login, pero veo que hago cosas demasiado mal xD

de todas maneras gracias a todos lo que habéis aportado cosas!
  #8 (permalink)  
Antiguo 06/09/2012, 05:53
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años
Puntos: 33
Respuesta: Script simplificado de login, (llevo todo el día intentando depurarlo)

Hey!

No desistas, amigo. Yo actualmente trabajo en un proyecto web, y todos los scripts creados son propios; lleva su tiempo, pero a la larga te sientes más "orgulloso" de tu creación.

Haz una cosa, prueba de cambiar los "mysqli" por "mysql" normales; a veces estas cosas pueden parecer complicadas, pero acaban saliendo con el tiempo.

Lo que sí que te recomiendo es que hagas un echo del sql que usas, y luego mira el código fuente. ¿Porqué? Te comento:

Yo tenía una función que mandaba emails a usuarios registrados en mi web, y no me funcionaba... y me dí 1000 cabezazos porque todo "estaba bien" y el email no se enviaba.

¿Qué pasó? Yo también uso funciones de "escape" para evitar inyecciones SQL, y a la hora de recuperar emails, los recuperaba con caracteres escapados (yo cambio ciertos caracteres por códigos HTML), por lo que intentaba enviar el email a la dirección escapada...


Pues, quizás en la base de datos no tienes algún dato escapado, y al hacer un select contra la base de datos buscando el dato escapado, no lo encuentra o el pass no lo tienes almacenado con sha1...

Ánimo y no desistas!

cualquier cosa me puedes mandar un mail ;)
  #9 (permalink)  
Antiguo 06/09/2012, 06:24
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 3 meses
Puntos: 30
Respuesta: Script simplificado de login, (llevo todo el día intentando depurarlo)

Me ha sentado genial tu menaje, yo también estoy haciendo un proyecto web propio (intentando crear desde 0 todo) y en los meses que llevo ha sido una tarea tediosa, sobretodo con javascript y la interacción 3D de paneles , échale un vistazo (panel central), aunque es solo preliminar : vodoad.com


Ahora el php se me asemeja aun mas común que el javascript, ya que yo aprendi a programar en C++.


En el script de registro, tambien escapo el nombre, el mail y algun dato mas, y ya he revisado un par de veces si todo estaba O.K , no se por que me huele que es por utilizar sha1 , voy a probar sin codificar contraseña en ambas partes (registro y login) a ver que pasa ...
  #10 (permalink)  
Antiguo 06/09/2012, 06:32
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 3 meses
Puntos: 30
Respuesta: Script simplificado de login, (llevo todo el día intentando depurarlo)

Nada, falla, hay algo en la consulta que no esta bien, me pregunto que es, mis conocimientos de SQL me dicen que la sintaxis esta bien. he de incidir que que todos los nombres referentes a las tables i/u nombres de variables esta correctos.


Código PHP:
<?php
session_start
();

include(
"modulo.php"); 

    
    
$nick=limpiar_sql($_POST["nicklogin"]);
    
$pass=sha1($_POST['passlogin']);
                                    
    if (
$nick && $pass)
        {
         
$link mysqli_connect('localhost''***''***''***');
        
         if (!
$link) {
            die(
'Connect Error (' mysqli_connect_errno() . ') 'mysqli_connect_error());
         }
         
         else{
          
$result mysqli_query("select nick,contrasena from Usuarios
                         where nick='$nick'
                         and contrasena = '$pass'"
);
                         
           if (
mysql_num_rows($result)<=0){
          echo 
"El nombre de usuario o contraseña no existen";
         exit;
         }
          if(
$result){
         
$valid_user $nick;
           
session_is_register("valid_user");
          echo 
"conectado correctamente";
        }}
        }

?>
  #11 (permalink)  
Antiguo 06/09/2012, 06:42
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años
Puntos: 33
Respuesta: Script simplificado de login, (llevo todo el día intentando depurarlo)

Creo que veo el fallo.

Prueba de cambiar

Código:
if (mysql_num_rows($result)<=0){
por

Código:
if (mysqli_num_rows($result)<=0){
Si estás trabajando con mysqli, creo (nunca he trabajado con mysqli) que todo tiene que cambiar a mysqli.

Lo que creo que pasa es que al hacer el if, mysql_num_rows debe retornar 0 o menor que 0 debido a que debe dar error (mysql no está conectado, lo está mysqli), y por eso te entra siempre en el if y sale error.

Verifica si cuando logueas te sale el texto

"El nombre de usuario o contraseña no existen".

Espero que eso resuelva tu problema!

EDIT: fíjate también que "session_is_register" (creo) que no existe. Buscando en la web he encontrad "session_is_registered".

http://php.net/manual/es/function.se...registered.php

Además, en este link dice que esta función está eliminada a partir de php 5.4.0

Como te decían en posts anteriores, prueba a usar "session_register".

Última edición por DoHITB; 06/09/2012 a las 06:46 Razón: Añadida información
  #12 (permalink)  
Antiguo 06/09/2012, 07:01
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: Script simplificado de login, (llevo todo el día intentando depurarlo)

No lo he probado a fondo, pero cambiando un par de cosas funciona bien.

Aún así, la forma más sencilla de descartar, es probar primero con variables locales
Código PHP:
$pass sha1('mypass'); 
Si después va todo correcto, empiezas a probar con las variables que provienen de url's o formularios.

Te he dejado algunas notas.

Lo he probado sin las funciones tuyas, así que al cambiarlo, para dejarlo como si lo ejecutases en tu máquina, igual se fue algo, pero debería salirte el error en el navegador.

Código PHP:
error_reporting(E_ALL);
ini_set("display_errors"1); // Estas dos líneas activan los errores en el navegador. 
session_start();

include(
"modulo.php"); // MODULO.php es un archivo que contiene la funcion limpiar_sql para evitar ataques de SQL inyection, no influlle para nada en las variables finales (en este caso de $nick)

$pass sha1($_POST['passlogin']);
$nick limpiar_sql($_POST["nicklogin"]);

if( isset(
$nick) && isset($pass) ) //comprueba si están definidas
{
    
$link mysqli_connect('localhost''********''*******''********');

    if( !
$link )
    {
        die(
'Connect Error (' mysqli_connect_errno() . ') ' mysqli_connect_error());
        echo 
"imposible conectar con la base de datos";
        exit;
    }
    else
    {
        
$query "SELECT nick, contrasena FROM Usuarios WHERE nick = '$nick' AND contrasena = '$pass'";
        
$result mysqli_query($link$query); //<-- Falta el link en la query
        
if( !$result )
        {
            echo 
"nombre o contraseña erroneos";
            exit;
        }
    }
    
    if( 
mysqli_num_rows($result) == // "<=" Menor o igual que 0, es 0, con == es suficiente.
    
{
        echo 
"nombre y contraseña no existen";
        exit;
    }
    
    if( 
$result )
    {
        
$_SESSION["valid_user"] = true//por ejemplo
        
$_SESSION["name"] = $nick;
    }
    
    echo 
'Está conectado el usuario ' . ($_SESSION["name"])? $_SESSION["name"] : 'Guest' '? ' . ($_SESSION["valid_user"])? 'Si' 'NO';

__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #13 (permalink)  
Antiguo 06/09/2012, 09:03
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 3 meses
Puntos: 30
Respuesta: Script simplificado de login, (llevo todo el día intentando depurarlo)

muchas gracias por las correciones, pero me sigue dando error, he dado salida al error y es lo siguiente :

"Catchable fatal error: Object of class mysqli_result could not be converted to string in /usr/home/vodoad/www/login.php on line 32"


Tenia razon dohitb, al hacer mysql_num_rows era necesario hacerlo en mysqli_num_rows


Muchas gracias a todos por haber participado!
  #14 (permalink)  
Antiguo 06/09/2012, 10:19
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: Script simplificado de login, (llevo todo el día intentando depurarlo)

uhm... el error debería coincidir con el segundo if()

Cambia estas líneas

Código PHP:
if( mysqli_num_rows($result) == // "<=" Menor o igual que 0, es 0, con == es suficiente.
{
    echo 
"nombre y contraseña no existen";
    exit;
}

if( 
$result )
{
    
$_SESSION["valid_user"] = true//por ejemplo
    
$_SESSION["name"] = $nick;

Por:

Código PHP:
if( mysqli_num_rows($result) >= )
{
    
$_SESSION["valid_user"] = true;
    
$_SESSION["name"] = $nick;
}
else
{
    echo 
"nombre y contraseña no existen";
    exit;

__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #15 (permalink)  
Antiguo 06/09/2012, 10:24
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 3 meses
Puntos: 30
Respuesta: Script simplificado de login, (llevo todo el día intentando depurarlo)

Ya estaba perfectamente, era la nueva funcion sqli , debia utilizarse de esa forma y no de la antigua sql
  #16 (permalink)  
Antiguo 06/09/2012, 11:58
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años
Puntos: 33
Respuesta: Script simplificado de login, (llevo todo el día intentando depurarlo)

Entonces, ¿Ya funciona?, o te sigue dando el fatal error?

Etiquetas: login, login.php
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 20:41.