Regresar   Foros del Web > Programación para sitios web > PHP > PHP orientado a objetos

El registro es Gratis en Foros del Web
Respuesta
 
Herramientas Buscar en Tema Desplegado
Antiguo 05/05/08, 20:38:17   #1 (permalink)
hugosalcedo ha deshabilitado el Karma
 
Registrado: may 2008
Ubicación: En Lima - Perú
Mensajes: 3
hugosalcedo is offline  
¿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 fecha: 05/05/08 a las 20:50:30. Razón: para darle color
  Responder Con Cita
Antiguo 05/05/08, 21:56:54   #2 (permalink)
Moderador
GatorV tiene un muy buen nivel de karmaGatorV tiene un muy buen nivel de karmaGatorV tiene un muy buen nivel de karmaGatorV tiene un muy buen nivel de karma
 
Registrado: may 2006
Ubicación: Queretaro, Mexico
Mensajes: 9.143
GatorV is offline  
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.
__________________
Blog Web
  Responder Con Cita
Antiguo 06/05/08, 23:28:59   #3 (permalink)
hugosalcedo ha deshabilitado el Karma
 
Registrado: may 2008
Ubicación: En Lima - Perú
Mensajes: 3
hugosalcedo is offline  
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)
  Responder Con Cita
Antiguo 06/05/08, 23:37:37   #4 (permalink)
emiliodeg tiene un saldo positivo de karma
 
Registrado: sep 2005
Mensajes: 686
emiliodeg is offline  
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
mi neurona
  Responder Con Cita
Antiguo 07/05/08, 22:11:27   #5 (permalink)
hugosalcedo ha deshabilitado el Karma
 
Registrado: may 2008
Ubicación: En Lima - Perú
Mensajes: 3
hugosalcedo is offline  
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 fecha: 07/05/08 a las 22:44:01.
  Responder Con Cita
Antiguo 08/05/08, 07:43:14   #6 (permalink)
zsamer tiene algunos puntos positivos de karma
 
Registrado: nov 2003
Mensajes: 738
zsamer is offline  
Re: ¿como pasar $_POST a una clase?

Cita:
Originalmente publicado 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 fecha: 08/05/08 a las 20:47:47.
  Responder Con Cita
Respuesta


Califica este Tema - ¿como pasar $_POST a una clase?.

Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado Califica este Tema
Califica este Tema:

Reglas del foro
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está activado
Las caritas están activado
Código [IMG] está activado
Código HTML está desactivado


Todas las horas son GMT -6. La hora es 06:36:40.

Message Board Statistics

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96