Foros del Web » Programando para Internet » PHP »

PHP OO php orientado a objetos funciones y su impresión en el documento

Estas en el tema de php orientado a objetos funciones y su impresión en el documento en el foro de PHP en Foros del Web. hola a todos mis compañeros, agradezco desde ya su ayuda.. les comento yo programo en php pero quiero iniciar a hacerlo en php orientado a ...
  #1 (permalink)  
Antiguo 06/12/2014, 19:46
Avatar de herzbazi  
Fecha de Ingreso: febrero-2012
Mensajes: 612
Antigüedad: 12 años, 2 meses
Puntos: 36
Desacuerdo php orientado a objetos funciones y su impresión en el documento

hola a todos mis compañeros, agradezco desde ya su ayuda..

les comento yo programo en php pero quiero iniciar a hacerlo en php orientado a objetos

estoy aprendiendo solo a pura lectura asi que espero entiendan si estoy algo perdido ..

gracias

la pregunta es esta bien esta funcion ? y la otra que ahi si estoy algo perdido como la llamo en el documento donde quiero que funcione

les dejo el codigo

INDEX

Código HTML:
Ver original
  1. <?php
  2. require_once('class/core.php');
  3. ?>
  4. <!DOCTYPE html>
  5. <html lang="en">
  6.     <meta charset="UTF-8">
  7.     <title>Administración</title>
  8.     <link rel="stylesheet" href="../css/bootstrap.min.css">
  9.     <link rel="stylesheet" href="../css/estilos.css">
  10.     <script type="text/javascript" src="../js/jquery.js"></script>
  11.     <script type="text/javascript" src="../js/bootstrap.min.js"></script>
  12. </head>
  13. <body id="validacion">
  14.     <div class="container">
  15.         <div class="row" id="form-ini">
  16.             <div class="col-xs-12 col-sm-7 col-sm-offset-2 col-md-6 col-md-offset-3 ">
  17.                 <form  action="" name="form-principal" method="POST" enctype="multipart/form-data">
  18.                   <div class="form-group">
  19.                     <label for="Intitucion">Nombre del establecimiento</label>
  20.                     <input type="text" class="form-control" id="establecimiento" value="" name="establecimiento">
  21.                   </div>
  22.                   <div class="form-group">
  23.                     <label for="usuario">Ingrese Usuario</label>
  24.                     <input type="text" class="form-control" id="user" value="" name="usuario">
  25.                   </div>
  26.                   <div class="form-group">
  27.                     <label for="email">Correo Electrónico</label>
  28.                     <input type="email" class="form-control" id="correo" value="" name="correo">
  29.                   </div>
  30.                   <div class="form-group">
  31.                     <label for="email">Confirme Correo Electrónico</label>
  32.                     <input type="email" class="form-control" id="correo2" value="" name="correo2">
  33.                   </div>
  34.                   <div class="form-group">
  35.                     <label for="password">Password</label>
  36.                     <input type="password" class="form-control" id="password" value="" name="password">
  37.                   </div>
  38.                   <div class="form-group">
  39.                     <label for="password2">Password</label>
  40.                     <input type="password" class="form-control" id="password2" value="" name="password2" >
  41.                   </div>
  42.                   <div class="form-group">
  43.                     <label for="logotipo">Seleccione logotipo</label>
  44.                     <input type="file" id="logotipo" value="" name="logotipo">
  45.                   </div>
  46.                   <button type="submit"  class="btn btn-primary" >Guardar Datos</button>
  47.                 </form>
  48.             </div>
  49.        
  50.         </div>
  51.     </div>
  52. </body>
  53. </html>

CORE.PHP

Código PHP:
Ver original
  1. <?php
  2.     Class Administracion{
  3.         //Atributos o variables
  4.         private $establecimiento;
  5.         private $usuario;
  6.         private $correo;
  7.         private $correo2;
  8.         private $password;
  9.         private $password2;
  10.         private $logotipo;
  11.         private $logotipo_formato;
  12.         private $nombrelogo;
  13.         private $formato;
  14.         // Metodos o funciones
  15.  
  16.         public function formulario(){
  17.             //Asignación a variables
  18.             $this->$establecimiento=$_POST['establecimiento'];
  19.             $this->$usuario=$_POST['usuario'];
  20.             $this->$correo=$_POST['correo'];
  21.             $this->$correo2=$_POST['correo2'];
  22.             $this->$password=$_POST['password'];
  23.             $this->$password2=$_POST['password2'];
  24.             $this->$logotipo=$_FILES["foto1"]['tmp_name'];
  25.             $this->$logotipo_formato=$_FILES['foto1']['type'];
  26.             // validaciones
  27.             if( $establecimiento !='' and $usuario !=''){
  28.                 $result = mysql_query("SELECT * FROM inicializadora");
  29.                 $numRegistros =mysql_num_rows($result);
  30.                     if($numRegistros == 0){
  31.                         if($correo == $correo2){
  32.                                 if($password == $password2){
  33.                                     if($logotipo!=''){
  34.                                         switch ($foto_formato){
  35.                                             case 'image/jpeg':
  36.                                             $formato=".jpg";
  37.                                             break;
  38.                                             case 'image/png':
  39.                                             $formato=".png";
  40.                                             break;
  41.                                         }      
  42.                                         $nombrelogo='img-inicializadora/logo'.mt_rand(0,1000).$formato;
  43.                                         mysql_query("INSERT INTO establecimiento (establecimiento,usuario,correo,correo2,password,password2,nombrelogo)
  44.                                         VALUES('".$establecimiento."','".$usuario."','".$correo."','".$correo2."','".$password."','".$password2."','".$nombrelogo."')");           
  45.                                     }
  46.                                 }
  47.                         }
  48.                     }  
  49.             }else{
  50.                     ?>
  51.                         <script>
  52.                              window.locationf="principal.php";
  53.                         </script>
  54.                     <?php
  55.             }
  56.         }
  57.  
  58.     }
  59. ?>
__________________
Enseña todo lo que sepas...
Aprende todo lo que puedas..
  #2 (permalink)  
Antiguo 06/12/2014, 22:04
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: php orientado a objetos funciones y su impresión en el documento

Definitivamente debes seguir estudiando más de OOP, y más allá del concepto, debes aprender bien la sintaxis.

Observa esto:
Código PHP:
Ver original
  1. class Foo {
  2.   private $bar;
  3.   public function candy() {
  4.     // MAL (así lo haces)
  5.     // usar ->$bar es un error
  6.     $this->$bar = $_POST['xyz'];
  7.     // BIEN
  8.     $this->bar = $_POST['xyz'];
  9.   }
  10. }

Otro problema conceptual es que, incluir código no hace que se ejecute por arte de magia: no importa que sea OOP o no, debes invocarlo.

¿En qué parte del código que muestras creas y utilizas una instancia de la clase Administración?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 07/12/2014, 11:07
Avatar de herzbazi  
Fecha de Ingreso: febrero-2012
Mensajes: 612
Antigüedad: 12 años, 2 meses
Puntos: 36
Respuesta: php orientado a objetos funciones y su impresión en el documento

Cita:
Iniciado por pateketrueke Ver Mensaje
Definitivamente debes seguir estudiando más de OOP, y más allá del concepto, debes aprender bien la sintaxis.

Observa esto:
Código PHP:
Ver original
  1. class Foo {
  2.   private $bar;
  3.   public function candy() {
  4.     // MAL (así lo haces)
  5.     // usar ->$bar es un error
  6.     $this->$bar = $_POST['xyz'];
  7.     // BIEN
  8.     $this->bar = $_POST['xyz'];
  9.   }
  10. }

Otro problema conceptual es que, incluir código no hace que se ejecute por arte de magia: no importa que sea OOP o no, debes invocarlo.

¿En qué parte del código que muestras creas y utilizas una instancia de la clase Administración?
Gracias por tu ayuda , y consejos creeme los valoro y mucho .

lo del problema conseptual de como se ejecuta yo se que tengo que hacer instancias


Código PHP:
Ver original
  1. $clase = new Administracion ();  
  2. $clase-> formulario();

imagino que este codigo debe ir en el documento donde esta el html del formulario , la cosa es que no estoy seguro de como ponerlo ya que en teoria o hace la consulta si esta tiene registros la base de datos me redirecciona y si no me inserta los datos


gracias , sigo leyendo
__________________
Enseña todo lo que sepas...
Aprende todo lo que puedas..
  #4 (permalink)  
Antiguo 07/12/2014, 13:15
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 3 meses
Puntos: 206
Respuesta: php orientado a objetos funciones y su impresión en el documento

Usa getters y setters. No uses constructores con muchos argumentos, es mejor constructores vacios, que pongan variables por defecto, y llamar a cada set por separado. No hagas metodos con dos mil funcionalidades. Un método sólo debe hacer una cosa, y hacerla bien. Esto te obligará a partir métodos en otros más pequeños; o incluso sacar funcionalidad poco relacionada a una clase a otra clase mas específica.

Las variables globales cono :GET y _POST sólo deberían ser accedidas por el método de la clase que haga de MAIN, es decir, de punto de entrada a tu "programa", o como mucho, por clases creadas específicamente para recuperar esas variables globales contenidas en _GET, _POST, _SESSION, etc. Las variables globales son cosas de la programación estructurada, pero están prohibídas en POO. La "singletonitis", es decir, usar singletons para todo, también es una muy mala idea en PHP.

Nadie escribe una buena clase a la primera, ni aunque funcione bien. Nunca olvides releer mil veces tus clases, y mejorarlas siempre que puedas. La orientación a objetos no es solo crear clases, es reusabilidad, abstracción, herencia, polimorfismo, encapsulamiento y ocultación. Si no sabes usar todo lo que conlleva cada una de estas caracterísitcas, o peor, no las conoces, no estarás programando POO aunque uses clases.

Por ejemplo, una versión muy recortada de tu código podría parecerse a esto:

Código PHP:
Ver original
  1. <?php
  2.     class NuevoUsuario{
  3.         //Atributos o variables
  4.         private $usuario;
  5.         private $correo;
  6.         private $password;
  7.         private $password2;
  8.  
  9.         private $conexion;
  10.    
  11.         public function __construct($conexion)
  12.         {
  13.             $this->conexion = $conexion;
  14.  
  15.             $this->usuario = null;
  16.             $this->correo = null;
  17.             $this->password = null;
  18.             $this->password2 = null;
  19.         }
  20.  
  21.         /* Getter y setter */
  22.         public function getUsuario()
  23.         {
  24.             return $this->usuario
  25.         }
  26.         public function setUsuario($usuario)
  27.         {
  28.             $this->usuario = mysqli_real_escape_string($this->conexion, $usuario);
  29.         }
  30.  
  31.         public function getCorreo()
  32.         {
  33.             return $this->correo
  34.         }
  35.         public function setCorreo($correo)
  36.         {
  37.             $this->correo = mysqli_real_escape_string($this->conexion, $correo);
  38.         }
  39.  
  40.         public function getPassword()
  41.         {
  42.             return $this->password
  43.         }
  44.         public function setPassword($password)
  45.         {
  46.             $this->password = mysqli_real_escape_string($this->conexion, $password);
  47.         }
  48.  
  49.         public function getPassword2()
  50.         {
  51.             return $this->password2
  52.         }
  53.         public function setPassword2($password2)
  54.         {
  55.             $this->password2 = mysqli_real_escape_string($this->conexion, $password2);
  56.         }
  57.  
  58.         /* Validaciones */
  59.         private function validarUsuario()
  60.         {
  61.             return !empty($this->getUsuario());
  62.         }
  63.  
  64.         private function validarCorreo()
  65.         {
  66.             return filter_var($this->correo, FILTER_VALIDATE_EMAIL) !== false;
  67.         }
  68.  
  69.         private function validarPassword()
  70.         {
  71.             return !empty($this->password) && !empty($this->password2) && $this->password == $this->password2;
  72.         }
  73.  
  74.         public function isValido()
  75.         {
  76.             return $this->validarUsuario() && $this->validarUsuario() && $this->validarPassword();
  77.         }
  78.  
  79.         /* Guardar BD */
  80.         public function guardar(){
  81.             if ($this->isValido()) {            
  82.                 $sql = "INSERT INTO usuarios (usuario, correo, password)
  83.                        VALUES ('{$this->getUsuario()}', '{$this->getCorreo()}', '{$this->getPassword()}')";
  84.                 return mysqli_query($this->conexion, $sql);                
  85.             } else {
  86.                 return false;
  87.             }
  88.         }
  89.  
  90.     }


Programa principal

Código PHP:
Ver original
  1. $conexion = mysqli_connect("127.0.0.1", "root", "12345", "gestor_usuarios");
  2. $nuevo_usuario = new Nuevo_Usuario($conexion);
  3. $nuevo_usuario->setUsuario($_POST['usuario']);
  4. $nuevo_usuario->setCorreo($_POST['correo']);
  5. $nuevo_usuario->setPassword($_POST['password']);
  6. $nuevo_usuario->setPassword2($_POST['password2']);
  7.  
  8. if ($nuevo_usuario ->guardar()) {
  9.     echo "Nuevo usuario creado.";
  10. } else {
  11.     echo "No se ha podido crear el usuario.";
  12. }

Última edición por marlanga; 07/12/2014 a las 13:21
  #5 (permalink)  
Antiguo 07/12/2014, 14:11
Avatar de herzbazi  
Fecha de Ingreso: febrero-2012
Mensajes: 612
Antigüedad: 12 años, 2 meses
Puntos: 36
Respuesta: php orientado a objetos funciones y su impresión en el documento

Cita:
Iniciado por marlanga Ver Mensaje
Usa getters y setters. No uses constructores con muchos argumentos, es mejor constructores vacios, que pongan variables por defecto, y llamar a cada set por separado. No hagas metodos con dos mil funcionalidades. Un método sólo debe hacer una cosa, y hacerla bien. Esto te obligará a partir métodos en otros más pequeños; o incluso sacar funcionalidad poco relacionada a una clase a otra clase mas específica.

Las variables globales cono :GET y _POST sólo deberían ser accedidas por el método de la clase que haga de MAIN, es decir, de punto de entrada a tu "programa", o como mucho, por clases creadas específicamente para recuperar esas variables globales contenidas en _GET, _POST, _SESSION, etc. Las variables globales son cosas de la programación estructurada, pero están prohibídas en POO. La "singletonitis", es decir, usar singletons para todo, también es una muy mala idea en PHP.

Nadie escribe una buena clase a la primera, ni aunque funcione bien. Nunca olvides releer mil veces tus clases, y mejorarlas siempre que puedas. La orientación a objetos no es solo crear clases, es reusabilidad, abstracción, herencia, polimorfismo, encapsulamiento y ocultación. Si no sabes usar todo lo que conlleva cada una de estas caracterísitcas, o peor, no las conoces, no estarás programando POO aunque uses clases.

Por ejemplo, una versión muy recortada de tu código podría parecerse a esto:

Código PHP:
Ver original
  1. <?php
  2.     class NuevoUsuario{
  3.         //Atributos o variables
  4.         private $usuario;
  5.         private $correo;
  6.         private $password;
  7.         private $password2;
  8.  
  9.         private $conexion;
  10.    
  11.         public function __construct($conexion)
  12.         {
  13.             $this->conexion = $conexion;
  14.  
  15.             $this->usuario = null;
  16.             $this->correo = null;
  17.             $this->password = null;
  18.             $this->password2 = null;
  19.         }
  20.  
  21.         /* Getter y setter */
  22.         public function getUsuario()
  23.         {
  24.             return $this->usuario
  25.         }
  26.         public function setUsuario($usuario)
  27.         {
  28.             $this->usuario = mysqli_real_escape_string($this->conexion, $usuario);
  29.         }
  30.  
  31.         public function getCorreo()
  32.         {
  33.             return $this->correo
  34.         }
  35.         public function setCorreo($correo)
  36.         {
  37.             $this->correo = mysqli_real_escape_string($this->conexion, $correo);
  38.         }
  39.  
  40.         public function getPassword()
  41.         {
  42.             return $this->password
  43.         }
  44.         public function setPassword($password)
  45.         {
  46.             $this->password = mysqli_real_escape_string($this->conexion, $password);
  47.         }
  48.  
  49.         public function getPassword2()
  50.         {
  51.             return $this->password2
  52.         }
  53.         public function setPassword2($password2)
  54.         {
  55.             $this->password2 = mysqli_real_escape_string($this->conexion, $password2);
  56.         }
  57.  
  58.         /* Validaciones */
  59.         private function validarUsuario()
  60.         {
  61.             return !empty($this->getUsuario());
  62.         }
  63.  
  64.         private function validarCorreo()
  65.         {
  66.             return filter_var($this->correo, FILTER_VALIDATE_EMAIL) !== false;
  67.         }
  68.  
  69.         private function validarPassword()
  70.         {
  71.             return !empty($this->password) && !empty($this->password2) && $this->password == $this->password2;
  72.         }
  73.  
  74.         public function isValido()
  75.         {
  76.             return $this->validarUsuario() && $this->validarUsuario() && $this->validarPassword();
  77.         }
  78.  
  79.         /* Guardar BD */
  80.         public function guardar(){
  81.             if ($this->isValido()) {            
  82.                 $sql = "INSERT INTO usuarios (usuario, correo, password)
  83.                        VALUES ('{$this->getUsuario()}', '{$this->getCorreo()}', '{$this->getPassword()}')";
  84.                 return mysqli_query($this->conexion, $sql);                
  85.             } else {
  86.                 return false;
  87.             }
  88.         }
  89.  
  90.     }


Programa principal

Código PHP:
Ver original
  1. $conexion = mysqli_connect("127.0.0.1", "root", "12345", "gestor_usuarios");
  2. $nuevo_usuario = new Nuevo_Usuario($conexion);
  3. $nuevo_usuario->setUsuario($_POST['usuario']);
  4. $nuevo_usuario->setCorreo($_POST['correo']);
  5. $nuevo_usuario->setPassword($_POST['password']);
  6. $nuevo_usuario->setPassword2($_POST['password2']);
  7.  
  8. if ($nuevo_usuario ->guardar()) {
  9.     echo "Nuevo usuario creado.";
  10. } else {
  11.     echo "No se ha podido crear el usuario.";
  12. }
no sabes lo mucho que te agradezco esa orientación que me has dado, la tomare en cuenta para futuras oportunidades , mientras leere varias veces el código que me has dado y si surgen dudas , seguro que investigo en San Google, tendre que seguir leyendo para poder llegar a hacer esto.

por lo menos de la mejor forma , ya que muchos son programadores, pero pocos son realmente buenos..

un puntillo para ti

muy agradecido
__________________
Enseña todo lo que sepas...
Aprende todo lo que puedas..

Etiquetas: funcion, funciones, objetos, orientado, resultado
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 10:35.