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

¿como pasar $_POST a una clase?

Estas en el tema de ¿como pasar $_POST a una clase? en el foro de Frameworks y PHP orientado a objetos en Foros del Web. He estado probando pasar una variable post a una clase pero no me imprime resultados y este es el codigo que estoy usando. Quisiera saber ...
  #1 (permalink)  
Antiguo 05/05/2008, 20:38
 
Fecha de Ingreso: mayo-2008
Ubicación: En Lima - Perú
Mensajes: 3
Antigüedad: 16 años
Puntos: 0
¿como pasar $_POST a una clase?

He estado probando pasar una variable post a una clase pero no me imprime resultados y este es el codigo que estoy usando.
Quisiera saber si es posible pasar la variable de alguna manera y pueda implemantarse el modelo vista controlador

index.html -->esta seria la vista

Código HTML:
<form name="area" method="POST" action="ControlArea.php">
<input type="text" name="busqueda" size="15">
<input type="hidden" name="op" value="buscar">
<input type="submit" value="Buscar Area">
</form> 
ControlArea.php -->esta clase es el controlador

Código PHP:
<?php
class ControlArea{

    switch(
$_POST['op']){
           case 
'buscar'$this->Buscar();
                }

    public function 
Buscar()
        {
    
$busqueda $_POST['busqueda'];
    
    
$are = new Area(); 
    
$Resultado $are->Buscar($busqueda);
    
$row $Resultado->num_rows;
    if (
$row 0)    
        {    
    
$contenido ="<div id='tablabuscar'><table>".
                
"<tr>".
                
"<th><b>Codigo</b></th>".
                
"<th ><b>Nombre</b></th></tr>";        
    while(
$Fila $Resultado->fetch_assoc())
            {
    
$contenido .=    "<tr><th>".
            
"<a href='?op=Editar&Id=".$Fila["cod_are"]."'>".
        
$Fila["cod_are"]."</a></th><td class='clsTxtCelda'>".
        
$Fila["nom_are"]."</td></tr>";
            }
        }    
    
$contenido .= "</table>"
    echo 
$contenido;
        }
    }
?>
Area.php -->esta clase es el modelo

Código PHP:
<?php

class Area{

public function 
Buscar($busqueda)
    {
    
$con = new Librerias();// esta la conexion a la bases de datos
    
$con->Conecta();
    if (
ord($busqueda) == OR ord($busqueda) == 32)
    {
                   
$cadbusca="SELECT cod_are, nom_are FROM area ORDER BY cod_are LIMIT 200";
    }    
    
                if (isset(
$busqueda) <> )
                   {
        
$trozos=explode(" ",$busqueda);
        
$numero=count($trozos);
        if (
$numero==1)
                   {
                   
$cadbusca="SELECT cod_are, nom_are FROM area WHERE cod_are LIKE '%".$busqueda."%' ORDER BY cod_are LIMIT 200";
                   } 
        } 
        
$Resultado $con->Bdd->query($cadbusca);
        return 
$Resultado;
                   }
    }
?>

Última edición por hugosalcedo; 05/05/2008 a las 20:50 Razón: para darle color
  #2 (permalink)  
Antiguo 05/05/2008, 21:56
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: ¿como pasar $_POST a una clase?

El switch en tu clase ControlArea, no debe de ir ahi, debe de ir dentro de otra clase por ejemplo una clase Main, donde posteriormente llames a tu clase:
Código PHP:
<?php
class ControlArea{
     public static function 
Main() {
             switch(
$_POST['op']){
                         case 
'buscar'$this->Buscar();
                }
     }

    public function 
Buscar()
        {
    
$busqueda $_POST['busqueda'];
    
    
$are = new Area(); 
    
$Resultado $are->Buscar($busqueda);
    
$row $Resultado->num_rows;
    if (
$row 0)    
        {    
    
$contenido ="<div id='tablabuscar'><table>".
                
"<tr>".
                
"<th><b>Codigo</b></th>".
                
"<th ><b>Nombre</b></th></tr>";        
    while(
$Fila $Resultado->fetch_assoc())
            {
    
$contenido .=    "<tr><th>".
            
"<a href='?op=Editar&Id=".$Fila["cod_are"]."'>".
        
$Fila["cod_are"]."</a></th><td class='clsTxtCelda'>".
        
$Fila["nom_are"]."</td></tr>";
            }
        }    
    
$contenido .= "</table>"
    echo 
$contenido;
        }
    }

ControlArea::Main();
?>
Saludos.
  #3 (permalink)  
Antiguo 06/05/2008, 23:28
 
Fecha de Ingreso: mayo-2008
Ubicación: En Lima - Perú
Mensajes: 3
Antigüedad: 16 años
Puntos: 0
Re: ¿como pasar $_POST a una clase?

Hola GatorV, te doy las gracias de antemano por resolver mi inquietud.
Ya hice las modificaciones que me indicaste y funciona.

ahora el cogido funciona de esta manera:

index.html -->es el mismo codigo html

ControlArea.php -->esta clase es el controlador que he cambiado

Código PHP:
<?php 
    
function __autoload($clase) {
    include 
$clase.'.php';
        }

class 
ControlArea{
    
    
public static function 
Main()  {
             switch(
$_POST['op']){
     
//case 'buscar': $this->Buscar();
                 
case 'buscar'ControlArea::Buscar();
                }
     }

public function 
Buscar()
        {
    
$busqueda $_POST['busqueda'];
    
    
$are = new Area(); 
    
$Resultado $are->Buscar($busqueda);
    
$row $Resultado->num_rows;
 
    
    if (
$row 0)    
        {    
    
$contenido ="<div id='tablabuscar'><table>".
                
"<tr>".
                
"<th><b>Codigo</b></th>".
                
"<th ><b>Nombre</b></th></tr>";        
    while(
$Fila $Resultado->fetch_assoc())
            {
    
$contenido .=    "<tr><th>".
            
"<a href='?op=Editar&Id=".$Fila["cod_are"]."'>".
        
$Fila["cod_are"]."</a></th><td class='clsTxtCelda'>".
        
$Fila["nom_are"]."</td></tr>";
            }
        }    
    
$contenido .= "</table>"
    echo 
$contenido;
        
        }
 }

ControlArea::Main();

?>
Area.php -->esta clase es el modelo y es el mismo codigo

Librerias.php -->esta clase se conecta a la base de datos

Código PHP:
<?php
  
class Librerias {
  public function 
Conecta()
    {
      try {
        
$this->Bdd = new mysqli('localhost''root','''colegio');
        return 
TRUE;
      } catch(
Exception $e) { 
        return 
FALSE;
      }
    }
 }
?>
Ahora en la clase ControlArea.php, en la funcion Main puse
case 'buscar': $this->Buscar();
y me salio un error de
Fatal error: Using $this when not in object context in c:\wamp\www\mvc\controlarea.php on line 12

y luego puse

case 'buscar': ControlArea::Buscar();
y funciono ¿quisiera saber si esta bien?

y la otra pregunta es: en la clase ControlArea esta la funcion buscar() esta funcion inprime los resultados en el controlador osea en http://localhost/mvcmvc/ControlArea.php y seria posible que los datos se muetren en la vista (index.html)
  #4 (permalink)  
Antiguo 06/05/2008, 23:37
Avatar de emiliodeg  
Fecha de Ingreso: septiembre-2005
Ubicación: Córdoba
Mensajes: 1.830
Antigüedad: 18 años, 8 meses
Puntos: 55
Re: ¿como pasar $_POST a una clase?

para poder utilizar $this-> dentro de una clase primero esta tiene que haber sido referenciada con un new y ademas para tener new lo ideal seria tener un constructor aunq no sea de error fatal

de la forma que la pusiste esta bien case 'buscar': ControlArea::Buscar();
pero se podria haber hecho lo mismo y un poquito mejor con self::Buscar();

si usas self recorda agregar static a tus funciones
__________________
Degiovanni Emilio
developtus.com
  #5 (permalink)  
Antiguo 07/05/2008, 22:11
 
Fecha de Ingreso: mayo-2008
Ubicación: En Lima - Perú
Mensajes: 3
Antigüedad: 16 años
Puntos: 0
Re: ¿como pasar $_POST a una clase?

Hola emiliodeg, muchas gracias por la respuesta, cambie el codigo de acuerdo a tu sugerencia y funciono.

Este es el codigo de ControlArea.php

Código PHP:
<?php 
    
function __autoload($clase) {
                            include 
$clase.'.php';
                            }

class 
ControlArea{
    
    
public static function 
Main()  {
             switch(
$_POST['op']){
                  case 
'buscar'self::Buscar();
                 }
     }

public static function 
Buscar()
        {
    
$busqueda $_POST['busqueda'];
    
    
$are = new Area(); 
    
$Resultado $are->Buscar($busqueda);
    
$row $Resultado->num_rows;
 
    
    if (
$row 0)    
        {    
    
$contenido ="<div id='tablabuscar'><table>".
                
"<tr>".
                
"<th><b>Codigo</b></th>".
                
"<th ><b>Nombre</b></th></tr>";        
    while(
$Fila $Resultado->fetch_assoc())
            {
    
$contenido .=    "<tr><th>".
            
"<a href='?op=Editar&Id=".$Fila["cod_are"]."'>".
        
$Fila["cod_are"]."</a></th><td class='clsTxtCelda'>".
        
$Fila["nom_are"]."</td></tr>";
            }
        }    
    
$contenido .= "</table>"
    echo 
$contenido;
        
        }
 }

ControlArea::Main();

?>

la otra pregunta es: ¿COMO logro mostrar los resultados en la vista y no en el controlador ?

Muchas gracias Emilio, he aprendido bastante en este foro.

Última edición por hugosalcedo; 07/05/2008 a las 22:44
  #6 (permalink)  
Antiguo 08/05/2008, 07:43
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 20 años, 5 meses
Puntos: 8
Re: ¿como pasar $_POST a una clase?

Cita:
Iniciado por hugosalcedo Ver Mensaje
Hola emiliodeg, muchas gracias por la respuesta, cambie el codigo de acuerdo a tu sugerencia y funciono.

Este es el codigo de ControlArea.php

Código PHP:
<?php 
    
function __autoload($clase) {
                            include 
$clase.'.php';
                            }

class 
ControlArea{
    
    
public static function 
Main()  {
             switch(
$_POST['op']){
                  case 
'buscar'self::Buscar();
                 }
     }

public static function 
Buscar()
        {
    
$busqueda $_POST['busqueda'];
    
    
$are = new Area(); 
    
$Resultado $are->Buscar($busqueda);
    
$row $Resultado->num_rows;
 
    
    if (
$row 0)    
        {    
    
$contenido ="<div id='tablabuscar'><table>".
                
"<tr>".
                
"<th><b>Codigo</b></th>".
                
"<th ><b>Nombre</b></th></tr>";        
    while(
$Fila $Resultado->fetch_assoc())
            {
    
$contenido .=    "<tr><th>".
            
"<a href='?op=Editar&Id=".$Fila["cod_are"]."'>".
        
$Fila["cod_are"]."</a></th><td class='clsTxtCelda'>".
        
$Fila["nom_are"]."</td></tr>";
            }
        }    
    
$contenido .= "</table>"
    echo 
$contenido;
        
        }
 }

ControlArea::Main();

?>

la otra pregunta es: ¿COMO logro mostrar los resultados en la vista y no en el controlador ?

Muchas gracias Emilio, he aprendido bastante en este foro.
Excelente pregunta , pensando en MVC tendrás que tener una clase ViewEngine:



Código PHP:
<?php
class View
{
    private 
$vars = array();
    
    const 
SITE_PATH ='';
    
    const 
VIEW_EXTENSION 'phtml';
    
    const 
SITE_PATH ='';
    
    const 
DIRSEP ='/';
    
    public function 
__construct()
    {}

    public function 
__get($key)
    {
        if (
'_' != substr($key01) && isset($this->vars[$key])) {
            return 
$this->vars[$key];
        }

        return 
null;
    }
    
    public function 
__set($key$val)
    {
        if (
'_' != substr($key01)) {
            
$this->assign($key$val);
            return 
true;
        }
        throw new 
Exception('Setting private or protected class members is not allowed'$this);
    }

    public function 
__isset($key)
    {
        if (
'_' != substr($key01)) {
            return isset(
$this->vars[$key]);
        }

        return 
false;
    }
    
    
/**
     * Allows unset() on object properties to work
     *
     * @param string $key
     * @return void
     */
    
public function __unset($key)
    {
        if (
'_' != substr($key01) && isset($this->vars[$key])) {
            unset(
$this->vars[$key]);
        }
    }
    
    public function 
assign($varname$value$overwrite=false) {
        if (isset(
$this->vars[$varname]) == true AND $overwrite == false) {
            throw new 
Exception('Unable to set var `' $varname '`. Already set, and overwrite not allowed.'E_USER_NOTICE);
            return 
false;
        }

        
$this->vars[$varname] = $value;
 
        return 
true;
    }

    public function 
remove($varname) {
        unset(
$this->vars[$varname]);
        return 
true;
    }

    public function 
render($name) {
        
$path self::SITE_PATH 'views' self::DIRSEP $name '.' self::VIEW_EXTENSION;
        if (
file_exists($path) == false) {
            throw new 
Exception('View `' $name '` does not exist.'E_USER_NOTICE);
            return 
false;
        }

        
// Load variables
        
foreach ($this->vars as $key => $value) {
            
$this->{$key} = $value;
        }
        
        
ob_start();
        include (
$path);
        
$output ob_get_contents();
        
ob_get_clean();
        return 
$output;
    }
}
uso en el controlador:
Código PHP:
# Load View object
$view = new View();
$view->assign('first_name''Andrés');

//otra forma de setear variables a la vista
$view->first_name 'Andrés';
print 
$view->render('sample'); 
Vista sample.phtml
Código PHP:
Hello from the View, <?php echo $this->first_name?>!
Tu vista tiene que estar en una carpeta views en tu proyecto.

Te recomiendo usar un Framework ya que trae todas estas prácticas MVC y muchísimo más, usa Zend_Framework, en mi firma encontrarás tutoriales.


Saludos.

Última edición por zsamer; 08/05/2008 a las 20:47
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

SíEste tema le ha gustado a 3 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 19:33.