Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Pasar clases por Post(otra vez ^^)

Estas en el tema de Pasar clases por Post(otra vez ^^) en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Saludos expertos! Tengo un problema para pasar clases por POST. He visto que en lel foro ya hay diversas soluciones pero ninguna de ellas me ...
  #1 (permalink)  
Antiguo 07/05/2010, 13:03
 
Fecha de Ingreso: mayo-2010
Mensajes: 3
Antigüedad: 14 años
Puntos: 0
Exclamación Pasar clases por Post(otra vez ^^)

Saludos expertos!

Tengo un problema para pasar clases por POST. He visto que en lel foro ya hay diversas soluciones pero ninguna de ellas me ha servido de momento. Se trata de un ejemplo muy sencillo simplemente para aprender, y les estaría tremendamente agradecido si me ayudan a encontrar el problema.

El código es tal que así:

Este es el archivo de las clases


class person{
public $given_name;
public $family_name;

function get_given_name()
{
}

function set_given_name()
{
}
}

class guest extends person {
function get_sponsor()
{
}

function set_sponsor()
{
}
}

function StringToArray($string)
{
//$tmp = stripslashes($string);
$tmp = urldecode($tmp);
$tmp = unserialize($tmp);
return $tmp;
}

function ArrayToString($array)
{
$tmp = serialize($array);
$tmp = urlencode($tmp);
return $tmp;
}


Este es el php de salida.

<?php
include "classes.php";

$invitado = new guest();
$invitado->family_name="nombre";

$sinvitado=ArrayToString($invitado);

?>

<form method="post" action="prueba2.php">
<input type="hidden" name="sinvitado" value="<?php echo $sinvitado?>"></input>
<input type="hidden" name="nombre" value="<?php echo $invitado->family_name?>"></input>
<input type="submit" value="Probar">
</form>


Y este en el que recibo.

<?php
include "classes.php";

$invitado = StringToArray($_POST["sinvitado"]);
echo ($invitado->family_name);

echo ($_POST["nombre"]);
?>


La cuestión es que no hay problema para pasar el nombre sólo, pero si trato de pasar toda la clase no consigo nada. ¿Alguna sugerencia?
  #2 (permalink)  
Antiguo 07/05/2010, 13:09
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Pasar clases por Post(otra vez ^^)

¿A que te refieres con pasar toda la clase?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 07/05/2010, 13:51
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Respuesta: Pasar clases por Post(otra vez ^^)

¿Por qué no usas sesiones?

Creas el objeto, lo guardas en la sesión, te mueves con un link a la página siguiente, abres nuevamente la sesion y accedes al objeto.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #4 (permalink)  
Antiguo 07/05/2010, 14:16
 
Fecha de Ingreso: mayo-2010
Mensajes: 3
Antigüedad: 14 años
Puntos: 0
Respuesta: Pasar clases por Post(otra vez ^^)

Gracias por los consejos compañeros.

Estoy de acuerdo, usar sesiones sería una forma práctica para solucionar el problema, pero me he dado cuenta de que tampoco funciona.

Mi primer archivo está ahora así:

session_start();

$invitado = new guest();
$invitado->family_name="nombre";

echo ($invitado->family_name);

$_SESSION["invitado"]=$invitado;

$_SESSION["nombre"]="nombre en sesion";



Y el segundo, así:

session_start();


include "classes.php";

$invitado = $_SESSION['invitado'];
echo ($invitado->family_name);

echo ($_SESSION["nombre"]);


Al igual que me pasaba anteriormente el nombre, que es un string lo pasa sin problemas, pero si trato de mover toda la instancia de la clase no consigo nada.

Tal vez hay que hacer algo cuando se trabaja con una clase que has implementado tu mismo.

¿Más sugerencias?
  #5 (permalink)  
Antiguo 07/05/2010, 14:22
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Respuesta: Pasar clases por Post(otra vez ^^)

Mmmm no veo que en el primer archivo incluyas la clase que estás creando, de todas formas, algo te está faltando, ya que es muy básico lo que tratas de hacer.

Prueba de hacer un var_dump($_SESSION);, si no ves a tu instancia ahí, el problema lo tienes antes, no la estás cargando.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #6 (permalink)  
Antiguo 07/05/2010, 14:49
 
Fecha de Ingreso: mayo-2010
Mensajes: 3
Antigüedad: 14 años
Puntos: 0
Respuesta: Pasar clases por Post(otra vez ^^)

Buena idea, gracias Enrique.

Aqui tienes el contenido de la sesion en documento de destino.

array(2) { ["invitado"]=> object(__PHP_Incomplete_Class)#1 (3) { ["__PHP_Incomplete_Class_Name"]=> string(5) "guest" ["given_name"]=> NULL ["family_name"]=> string(6) "nombre" } ["nombre"]=> string(16) "nombre en sesion" } nombre en sesion


Como puedes ver, aparece la clase(inviado) pero parece que PHP no sabe de que tipo es(__PHP_Incomplete_Class).

Puede que la clase esté mal definida. Así es como la tengo:

class person{
public $given_name;
public $family_name;
}


class guest extends person {
}

Vamos avanzando, algo más?
  #7 (permalink)  
Antiguo 08/05/2010, 06:38
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Respuesta: Pasar clases por Post(otra vez ^^)

Lo que estoy viendo, si buscas el mensaje de error __PHP_Incomplete_Class_Name, es que tienes que hacer la inclusión del fuente antes de iniciar la sesión, ya que de otra forma no está pudiendo rearmar el objeto.

Saludos!
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #8 (permalink)  
Antiguo 08/05/2010, 06:44
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Respuesta: Pasar clases por Post(otra vez ^^)

Ejemplo completo:

Usuario.php
Código PHP:
<?php
class Usuario
{
    private 
$_nombre ='';

    public function 
__construct ($nombre)
    {
        
$this->_nombre $nombre;
    }
    public function 
__toString()
    {
        return 
$this->_nombre;
    }
    public function 
getTest()
    {
        return 
'este es un método de testing';
    }

}
index.php
Código PHP:
<?php
require_once 'Usuario.php';

session_start();

$_SESSION['usuario'] = new Usuario('enrique');

?>
<a href="siguiente.php">siguiente</a>
siguiente.php
Código PHP:
<?php
require_once 'Usuario.php';

session_start();

$usuario $_SESSION['usuario'];

echo 
'Hola, mi nombre es '.$usuario .' y '.$usuario->getTest();
Saludos!
__________________
Blog phpsenior.com Cursos a Distancia surforce.com

Etiquetas: clases, pasar
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 22:15.