Autor
|
Tema: Problema con regreso de valores usando clases (no me regresa lo que yo espero) (Leído 4,335 veces)
|
Fireball-CH
Desconectado
Mensajes: 131
Rebelblade 2009
|
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: <?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ña no coincide.</p>\n<p align=\"center\"><a href=\"index.html\" target=\"_self\">Click aquí para regresar.</a></p>\n";
mysql_close($connection); ?>
El de la clase Login.php: <?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ó 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: $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
|
|
|
|
Hans el Topo
Desconectado
Mensajes: 1.754
"Estoy cansado de no hacer nada"
|
haces cosas raras xD para llamar métodos, funciones o variables de la classe se hace con y tal $login->comprobarUsuario()
|
|
|
En línea
|
|
|
|
alone-in-the-chat
Desconectado
Mensajes: 587
|
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
Mensajes: 131
Rebelblade 2009
|
Jajaja... OK, si un constructor no retorna valores entonces cómo le puedo hacer? Hans el Topo, según yo, ésto: $login = new Login($lowerUser, $password);
es lo mismo que ésto: $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í: private function comprobarUsuario($usuario, $clave) {
|
|
« Última modificación: 28 Mayo 2008, 01:19 am por Fireball-CH »
|
En línea
|
|
|
|
Hans el Topo
Desconectado
Mensajes: 1.754
"Estoy cansado de no hacer nada"
|
http://es.php.net/manual/es/language.oop.phpsi 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
Mensajes: 131
Rebelblade 2009
|
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 <?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 <?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ó 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ña no coincide.</p>\n<p align=\"center\"><a href=\"index.html\" target=\"_self\">Click aquí para regresar.</a></p>\n"; }
} ?>
|
|
« Última modificación: 28 Mayo 2008, 19:32 pm por Fireball-CH »
|
En línea
|
|
|
|
alone-in-the-chat
Desconectado
Mensajes: 587
|
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
Mensajes: 131
Rebelblade 2009
|
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
|
|
|
|
Mamsaac
Desconectado
Mensajes: 141
|
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. 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
Mensajes: 131
Rebelblade 2009
|
Todo eso que escribiste, Mamsaac, ya lo se.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Problema en sentencia de búsqueda con varios valores.
Bases de Datos
|
mokoMonster
|
5
|
7,587
|
27 Febrero 2014, 13:21 pm
por leo1972
|
|
|
Duda, Valores usando EQU
ASM
|
x64core
|
2
|
3,014
|
27 Noviembre 2011, 18:01 pm
por x64core
|
|
|
[Resuelto] Obtener datos de hardware usando clases WMI
.NET (C#, VB.NET, ASP)
|
Crazy.sx
|
7
|
8,741
|
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
|
10,697
|
2 Septiembre 2014, 05:01 am
por elezekiel
|
|