elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Problema con regreso de valores usando clases (no me regresa lo que yo espero)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con regreso de valores usando clases (no me regresa lo que yo espero)  (Leído 3,629 veces)
Fireball-CH

Desconectado Desconectado

Mensajes: 131


Rebelblade 2009


Ver Perfil
Problema con regreso de valores usando clases (no me regresa lo que yo espero)
« en: 27 Mayo 2008, 03:40 am »

Hola, gente.

Leí que las clases en la versión 5 de PHP están mejoradas (o los objetos). Bueno, quise hacer una sección de Login usando clases pero tengo un problema... no se cómo regresar valores.

Mis archivos son:
  * index.html  -  Ahí está el formulario donde pide el nombre de usuario y la clave.
  * index.php  -   Esta página recibe los datos del formulario para comprobar si los
                         datos son correctos y redireccionar a la página para usuarios
                         registrados.
  * autoload.php  -  Tiene la función __autoload($clase) para incluir la clase necesaria.
  * Login.php  -   Esta página tiene la clase Login que se encarga de comprobar si existe el usuario, si existe regresa como valor el nombre de usuario de la base de datos, en caso contrario regresa la frase "Usuario inexistente".

Bien, el código de la página index.php es el siguiente:
Código:
<?php
require("../includes/database.php"); // Con esto no tengo problema
require("classes/autoload.php");

$username = $_POST['username'];
$lowerUser = strtolower($username);
$password = $_POST['password'];
$login = new Login($lowerUser, $password);

if($login != "Usuario inexistente") {
  $_SESSION['logged'] = $login;
  echo "<p align=\"center\">Accesando...</p>\n";
  echo "<meta http-equiv=\"refresh\" content=\"2;URL=controlPanel.php\" />\n";
}
else
  echo "<p align=\"center\">El nombre de usuario y/o la contrase&ntilde;a no coincide.</p>\n<p align=\"center\"><a href=\"index.html\" target=\"_self\">Click aqu&iacute; para regresar.</a></p>\n";

mysql_close($connection);
?>

El de la clase Login.php:
Código:
<?php
class Login {

  function Login($usuario, $clave) {
    $usuarioExiste = $this->comprobarUsuario($usuario, $clave);
    if($usuarioExiste != "")
      return $usuarioExiste;
    else
      return "Usuario inexistente";
  }

  function comprobarUsuario($usuario, $clave) {
    $sql = "SELECT Usuario,Clave FROM Registro WHERE UsuarioMin = '" . $usuario . "' AND Clave = '" . $clave . "'";
    $result = @mysql_query($sql)
      or die("<p align=\"center\"><strong>Ocurri&oacute; un error con la consulta.</strong></p>\n");

    while($row = mysql_fetch_array($result)) {
      $rowUser = $row['Usuario'];
      $rowPassword = $row['Clave'];
    }

    if($clave == $rowPassword)
      return $rowUser;
    else
      return "";
  }

}
?>

Bien, mi problema es de que cuando creo una instancia de la clase Login, no me regresa los valores como yo esperaba, siempre me regresa la frase "Object id #1". Me refiero a esta parte:
Código:
$login = new Login($lowerUser, $password);

Es decir, cuando llega a la parte de if($login != "Usuario inexistente") { (en index.php), la ejecuta porque no lleva la frase "Usuario inexistente"... lo que provoca que se inicie sesión escribiendo lo que sea en el formulario.

¿Qué puedo hacer?


« Última modificación: 27 Mayo 2008, 03:44 am por Fireball-CH » En línea

Video en el que explico cómo instalar y configurar Apache 2.0.54, PHP 5.0.0 y MySQL 4.0.20: http://www.mediafire.com/?fevmmnlyzzd
Hans el Topo


Desconectado Desconectado

Mensajes: 1.754


"Estoy cansado de no hacer nada"


Ver Perfil WWW
Re: Problema con regreso de valores usando clases (no me regresa lo que yo esper
« Respuesta #1 en: 27 Mayo 2008, 10:50 am »

haces cosas raras xD

para llamar métodos, funciones o variables de la classe se hace con
Código:
objeto->nombrefuncion()
y tal

Código:
$login->comprobarUsuario()



En línea

alone-in-the-chat


Desconectado Desconectado

Mensajes: 587


Ver Perfil
Re: Problema con regreso de valores usando clases (no me regresa lo que yo esper
« Respuesta #2 en: 28 Mayo 2008, 00:18 am »

Tu constructor utilizalo para inicializar variables de tu clase.

Un constructor no retorna valores .

Al comprobar $login tu lo que haces es comparar al objeto creado (instancia de la clase). 

Como dijo Hans , haces cosas raras X) .

Saludos¡¡

En línea

Because maybe
You're gonna be the one that saves me
And after all
You're my wonderwall
d[n_n]b
Fireball-CH

Desconectado Desconectado

Mensajes: 131


Rebelblade 2009


Ver Perfil
Re: Problema con regreso de valores usando clases (no me regresa lo que yo esper
« Respuesta #3 en: 28 Mayo 2008, 01:08 am »

Jajaja...

OK, si un constructor no retorna valores entonces cómo le puedo hacer?

Hans el Topo, según yo, ésto:
Código:
$login = new Login($lowerUser, $password);

es lo mismo que ésto:
Código:
$login = new Login();
$login->comprobarUsuario($lowerUser, $password)
¿no? Para eso creo la función Login, para pasar directamente los parámetros cuando uso la palabra clave new.

También se me olvidó agregar la palabra clave private antes de function comprobarUsuario($usuario, $clave) {, entonces quedaría así:
Código:
private function comprobarUsuario($usuario, $clave) {
« Última modificación: 28 Mayo 2008, 01:19 am por Fireball-CH » En línea

Video en el que explico cómo instalar y configurar Apache 2.0.54, PHP 5.0.0 y MySQL 4.0.20: http://www.mediafire.com/?fevmmnlyzzd
Hans el Topo


Desconectado Desconectado

Mensajes: 1.754


"Estoy cansado de no hacer nada"


Ver Perfil WWW
Re: Problema con regreso de valores usando clases (no me regresa lo que yo esper
« Respuesta #4 en: 28 Mayo 2008, 11:03 am »

http://es.php.net/manual/es/language.oop.php

si no lo entiendes mirate el manual y una vez entendido si tienes laguna duda concreta pregunta
si te respondemos y sigues en las tuyas para que preguntas?
En línea

Fireball-CH

Desconectado Desconectado

Mensajes: 131


Rebelblade 2009


Ver Perfil
Re: Problema con regreso de valores usando clases (no me regresa lo que yo esper
« Respuesta #5 en: 28 Mayo 2008, 18:53 pm »

No ps llego a la conclusión de que PHP sigue sin estar bien con la POO. ¿Cómo es posible que no pueda regresar valores? ¡Java sí puede!

¿Pero sí se entendió lo que quiero hacer? Modifiqué un poco el código y así sí me funciona:

index.php
Código:
<?php
require("../includes/database.php");  // No hay problema con esto.
require("classes/autoload.php");

$username = $_POST['username'];
$lowerUser = strtolower($username);
$password = $_POST['password'];
$login = new Login($lowerUser, $password);

mysql_close($connection);
?>

Login.php
Código:
<?php
class Login {

  function Login($user, $pass) {
    $sql = "SELECT Usuario,Clave FROM Registro WHERE UsuarioMin = '" . $user . "' AND Clave = '" . $pass . "'";
    $result = @mysql_query($sql)
      or die("<p align=\"center\"><strong>Ocurri&oacute; un error con la consulta.</strong></p>\n");

    while($row = mysql_fetch_array($result)) {
      $rowUser = $row['Usuario'];
      $rowPassword = $row['Clave'];
    }

    if($rowUser != "" and $rowPassword != "" and $pass == $rowPassword) {
      $_SESSION['logged'] = $rowUser;
      echo "<p align=\"center\">Accesando...</p>\n";
      echo "<meta http-equiv=\"refresh\" content=\"2;URL=controlPanel.php\" />\n";
    }
    else
      echo "<p align=\"center\">El nombre de usuario y/o la contrase&ntilde;a no coincide.</p>\n<p align=\"center\"><a href=\"index.html\" target=\"_self\">Click aqu&iacute; para regresar.</a></p>\n";
  }

}
?>
« Última modificación: 28 Mayo 2008, 19:32 pm por Fireball-CH » En línea

Video en el que explico cómo instalar y configurar Apache 2.0.54, PHP 5.0.0 y MySQL 4.0.20: http://www.mediafire.com/?fevmmnlyzzd
alone-in-the-chat


Desconectado Desconectado

Mensajes: 587


Ver Perfil
Re: Problema con regreso de valores usando clases (no me regresa lo que yo esper
« Respuesta #6 en: 29 Mayo 2008, 02:46 am »

Un constructor que retorna valores????

Puedes pasarme un ejemplo , te juro que es la primera vez que veo  :-\
Bueno remitete a las pruebas , postea un code aqui lo ejecuto , pero por concepto un constructor no retorna valores , solo se usa para inicializar el objeto , creo que el que no esta bien con la POO es otro  :-\.

Atribuirle la culpa de que algo no te funcione al lenguaje es sencillo , ni siquiera reviso tu codigo por que lo que pretendes hacer es tan sencillo que hasta flojera me da verlo.

Dedicale un poco mas a la lectura de php orientado a objetos , veras que no tiene nada que envidiar a otros lenguajes.


Saludos


En línea

Because maybe
You're gonna be the one that saves me
And after all
You're my wonderwall
d[n_n]b
Fireball-CH

Desconectado Desconectado

Mensajes: 131


Rebelblade 2009


Ver Perfil
Re: Problema con regreso de valores usando clases (no me regresa lo que yo esper
« Respuesta #7 en: 29 Mayo 2008, 04:31 am »

Sí, tienes razón, es que ando medio... "norteadón" jajaja...
Sí, tendré que leer más sobre la POO en PHP. Y sí, lo que quiero hacer es sencillo pero aún así lo quería hacer usando clases.
En línea

Video en el que explico cómo instalar y configurar Apache 2.0.54, PHP 5.0.0 y MySQL 4.0.20: http://www.mediafire.com/?fevmmnlyzzd
Mamsaac

Desconectado Desconectado

Mensajes: 141


Ver Perfil
Re: Problema con regreso de valores usando clases (no me regresa lo que yo espero)
« Respuesta #8 en: 30 Junio 2008, 09:42 am »

La estructura que estás manejando para tu sistema no corresponde a la forma en que se manejan la POO. Tener un solo constructor sin ningún método no amerita la creación de una clase.

Te recomiendo no solamente leer el manual de PHP para POO, sino referencias completas de lo que es la POO.

Y en Java, C#, C++ y PHP (y en ningún lenguaje que conozca, aunque no son muchos) los constructores NO retornan valores.
Código:
public class Clase1 {
private int var1;

public Clase1(int var1) {
this.var1 = var1;
}

public void metodo1() {
System.out.println("var1 es: "+this.var1);
}

public int metodo2() {
return this.var1;
}
}

Como puedes ver, cuando un método no retorna nada es "void", cuando retorna algo se dice el tipo, pero en el constructor, ni siquiera hay una declaración de algún valor de retorno o algo, y tiene su por qué.

No hagas una clase que no vaya a tener solamente un constructor o un solo método, no tiene chiste.
En línea

Fireball-CH

Desconectado Desconectado

Mensajes: 131


Rebelblade 2009


Ver Perfil
Re: Problema con regreso de valores usando clases (no me regresa lo que yo esper
« Respuesta #9 en: 1 Julio 2008, 05:40 am »

Todo eso que escribiste, Mamsaac, ya lo se.
En línea

Video en el que explico cómo instalar y configurar Apache 2.0.54, PHP 5.0.0 y MySQL 4.0.20: http://www.mediafire.com/?fevmmnlyzzd
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema en sentencia de búsqueda con varios valores.
Bases de Datos
mokoMonster 5 6,464 Último mensaje 27 Febrero 2014, 13:21 pm
por leo1972
Duda, Valores usando EQU
ASM
x64core 2 2,089 Último mensaje 27 Noviembre 2011, 18:01 pm
por x64core
[Resuelto] Obtener datos de hardware usando clases WMI
.NET (C#, VB.NET, ASP)
Crazy.sx 7 7,896 Último mensaje 8 Enero 2014, 04:42 am
por llFabianfll
Como puedo sumar valores usando 1 solo txtbox en C#
.NET (C#, VB.NET, ASP)
Ila26 8 8,727 Último mensaje 2 Septiembre 2014, 05:01 am
por elezekiel
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines