Foros del Web » Programando para Internet » PHP »

PHP OO Consulta imprimir Datos

Estas en el tema de Consulta imprimir Datos en el foro de PHP en Foros del Web. Estimados me pueden explicar como puedo imprimir dato ejemplo El getNombre() ya que siempre me sale que es un array y no lo puedo imprimir ...
  #1 (permalink)  
Antiguo 13/06/2014, 11:18
 
Fecha de Ingreso: junio-2014
Mensajes: 6
Antigüedad: 9 años, 10 meses
Puntos: 0
Pregunta Consulta imprimir Datos

Estimados me pueden explicar como puedo imprimir dato ejemplo El getNombre()
ya que siempre me sale que es un array y no lo puedo imprimir
dejo mi clase:
Código:
<?php
/**
 * Created by PhpStorm.
 * User: Claudio
 * Date: 13-06-14
 * Time: 10:03 AM
 */

class Pregunta
{
    private $_nombre = array();
    private $_valor = array();
    private $_class = array();
    private $_preguntas= array();


    public function addPregunta($pregunta, $nom,$valor,$class)
    {
        $this->_preguntas[] = $pregunta;
        $this->_nombre[] = $nom;
        $this->_valor[] = $valor ;
        $this->_class[] = $class ;
    }

    public function recorrerPregunta()
    {
        $salida = '';
        for ($i = 0; $i < sizeof($this->_preguntas); $i++)
        {
            $this->_preguntas[$i];
            $this->_nombre[$i];
            $this->_class[$i];
            $this->_valor[$i];
        $salida.= getNombre();
        }
        return $salida;
    }
    public function getPregunta()
    {
        return $this->_preguntas;
    }

    public function getNombre()
    {
        return $this->_nombre;
    }

    public function tipoPregunta($tipo)
    {
        switch ($tipo) {
            case 'radio':
                echo "<input name='radio' type='radio' id='".$this->getNombre()."'  value='' class='' />";
                break;
            case 1:
                echo "i es igual a 1";
                break;
            case 2:
                echo "i es igual a 2";
                break;
        }

    }
}
GRacias po su apoyo ...
  #2 (permalink)  
Antiguo 13/06/2014, 11:44
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Consulta imprimir Datos

Pues es un array... tu mismo lo declaraste asi ... como quieres imprimir eso como string directamente ?

Otro errror, te falto el $this-> aqui:

Cita:
$salida.= getNombre();
$salida.= $this->getNombre();


Volviendo a tu pregunta...estas confundido pues getNombre() daria el nombre pero del CUESTIONARIO!

Cita:
class Pregunta
{
...
public function addPregunta()
<< otra falla...... en todo caso.. la clase es "Cuestionario"


Otros "detalles":


- No debes hacer ningun recorrePregunta(), que seria en realidad... recorreCuestionario() sino implementar la interfaz Iterator

- Implementa tambien el metodo __toString() para poder imprimir el cuestionario haciendo un simple echo del objeto

- addPregunta() creo seria mejor asi:

Código PHP:
Ver original
  1. public function addPregunta($nombre, $cadena,$respuesta=null,$categoria=null){..}
__________________
Salu2!

Última edición por Italico76; 13/06/2014 a las 12:14
  #3 (permalink)  
Antiguo 13/06/2014, 12:25
 
Fecha de Ingreso: junio-2014
Mensajes: 6
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Consulta imprimir Datos

Oka en tiendo lo de la interface.
lo del array lo entiendo asi (Por favor corrigeme)
Creo el objeto Cuestionario (estecontiene el titulo y la descripcion)..
Despues creo las preguntas...
Código:
$pregunta = new Pregunta();
$pregunta->addPregunta("Pregunta1","nombre_input","Valo_input","tipo(radio,textare,etc)");
las preguntas las almaceno en un array ($_preguntas[])

Código:
 public function addPregunta($pregunta, $nom,$valor,$class)
    {
        $this->_preguntas[] = $pregunta;
        $this->_nombre[] = $nom;
        $this->_valor[] = $valor ;
        $this->_class[] = $class ;
    }

recorro las preguntas que estan en el array:
Código:
public function recorrerPregunta()
    {
        $salida = '';
        for ($i = 0; $i < sizeof($this->_preguntas); $i++)
        {
            $this->_nombre[$i];
           
        $salida.= $this->getNombre();
        }
        return $salida;
    }
// aqui esta lo que me complica,, y no entiendo como podria hacer que cada vez que recorra el array $_nombre[] enviar ese valor al getNombre() y lo imprima al en el metodo:
Código:
public function tipoPregunta($tipo)
    {
        switch ($tipo) {
            case 'radio':
                echo "<input name='radio' type='radio' id='".$this->getNombre()."'  value='' class='' />";
                break;
                }

Esta es mi clase cuestionario;
Cuestionario.php
Código PHP:
Ver original
  1. <?php
  2.  
  3.  
  4. class Cuestionario
  5. {
  6.     private $_nombre;
  7.     private $_descripcion;
  8.  
  9.     public function __construct($nom,$descrip)
  10.     {
  11.         $this->_nombre = $nom;
  12.         $this->_descripcion = $descrip;
  13.     }
  14.  
  15.     public function getNombre()
  16.     {
  17.         return $this->_nombre;
  18.     }
  19.     public function getDescripcion()
  20.     {
  21.         return $this->_descripcion;
  22.     }
  23. }

aqui creo las preguntas:
Código PHP:
Ver original
  1. <?php
  2.  
  3. include("class/Cuestionario.php");
  4. include("class/Pregunta.php");
  5. $cuestionario = new Cuestionario("Test de Autoevaluacion","Teste numero 3 Porfavor respondes todaslas preguntas");
  6. $pregunta = new Pregunta();
  7. $pregunta->addPregunta("Me va bien en los certámenes de desarrollo","pg1","V","_radio");



se entiendo el problema... y lo de la interface lo voy hacer como dices

Gracias..

Última edición por javo27; 13/06/2014 a las 12:31
  #4 (permalink)  
Antiguo 13/06/2014, 12:43
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Consulta imprimir Datos

No has leido nada de nada... solo repites lo que has mal-hecho

Cita:
aqui esta lo que me complica,, y no entiendo como podria hacer que cada vez que recorra el array $_nombre[] enviar ese valor al getNombre() y lo imprima al en el metodo:
<< si sigues con la terquedad (no lees nada)... entonces define un indice interno tambien y lo actualizas... siempre apuntará a esa posicion en todos los arreglos...... pero vas por mal camino por ahi..... debes implementar Iterator y leer mis observaciones
__________________
Salu2!
  #5 (permalink)  
Antiguo 13/06/2014, 14:09
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Consulta imprimir Datos

Relajate Italico76 es su clase, el puede hacer con ella lo que quiera.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #6 (permalink)  
Antiguo 13/06/2014, 16:39
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Consulta imprimir Datos

Código PHP:
Ver original
  1. $preguntas = new Cuestionario("America");
  2. $preguntas->addPregunta("Cuando los europeos descubrieron oficialmente de America ?",array(1942,1542,1492),3,"historia");
  3. $preguntas->addPregunta("Quien era Atahuala?",array("un espanol conquistador","un jeque americano"),2,"historia");
  4. $preguntas->addPregunta("De que nacionalidad era Cristobal Colon ?",array("No se sabe con certeza","italiano","portugues","ingles"),1,"historia");
  5.  
  6. echo $preguntas;

RESULTADO:

Código HTML:
Ver original
  1. Cuestionario: America
  2.  
  3.  
  4. Cuando los europeos descubrieron oficialmente de America ?
  5.  
  6. ( ) 1942
  7.  
  8. ( ) 1542
  9.  
  10. ( ) 1492
  11.  
  12.  
  13. Quien era Atahuala?
  14.  
  15. ( ) un espanol conquistador
  16.  
  17. ( ) un jeque americano
  18.  
  19.  
  20. De que nacionalidad era Cristobal Colon ?
  21.  
  22. ( ) No se sabe con certeza
  23.  
  24. ( ) italiano
  25.  
  26. ( ) portugues
  27.  
  28. ( ) ingles

CODIGO:

Código PHP:
Ver original
  1. <?php
  2.  
  3. /*
  4.     @author: Pablo Bozzolo (italico76)
  5.     usando notepad :)
  6. */
  7. Class Cuestionario implements Countable, Iterator
  8. {
  9.     private $_nombre = NULL;  // del cuestionario
  10.     private $_preguntas= array();
  11.     private $_mode = NULL;
  12.        
  13.     /*
  14.         @param nombre del cuestionario
  15.         @param modo ('OBJECT' o 'ASSOCIATIVE')
  16.         @return void   
  17.     */ 
  18.     public function __construct($nombre,$mode='OBJECT')
  19.     {
  20.         if (($mode != 'OBJECT') and ($mode != 'ASSOCIATIVE') )
  21.             throw new Exception ("Modo incorrecto: $mode");
  22.            
  23.         $this->_nombre=$nombre;
  24.         $this->_mode = $mode;      
  25.     }
  26.    
  27.     public function getNombre()
  28.     {
  29.         return $this->_nombre;
  30.     }
  31.  
  32.     public function addPregunta($cadena, $opciones=null, $respuesta=null, $categoria=null)
  33.     {  
  34.         $preguntas = array ('pregunta'=>$cadena,'opciones'=>$opciones,'respuesta'=>$opciones[$respuesta-1],'categoria'=>$categoria);
  35.        
  36.         if ($this->_mode == 'OBJECT')
  37.             $this->_preguntas[]= (object) $preguntas;
  38.         else
  39.             $this->_preguntas[]= $preguntas;
  40.        
  41.         return $this;
  42.     }
  43.  
  44.     function rewind() {        
  45.         reset($this->_preguntas);
  46.     }
  47.  
  48.     function current()
  49.     {
  50.         return current($this->_preguntas);
  51.     }
  52.  
  53.     function key()
  54.     {        
  55.         return key($this->_preguntas);
  56.     }
  57.  
  58.     function next()
  59.     {
  60.         next($this->_preguntas);        
  61.     }
  62.  
  63.     function valid()
  64.     {  
  65.         return isset($this->_preguntas[$this->key()]);
  66.     }
  67.    
  68.     // contable
  69.     function count()
  70.     {  
  71.         return count($this->_preguntas);
  72.     }
  73.    
  74.     function __toString()
  75.     {
  76.         $out = "<h3>Cuestionario: {$this->_nombre}</h3><br/>";
  77.        
  78.         foreach ($this->_preguntas as $pregunta)
  79.         {
  80.             $out .= "<span>{$pregunta->pregunta}</span><p/>";
  81.            
  82.             foreach ($pregunta->opciones as $option)   
  83.                 $out .= "<input  type=\"radio\" name=\"{$this->_nombre}[]\" value=\"\"/>{$option}</option><p/>";       
  84.             $out .= "<br/>";           
  85.         }
  86.        
  87.         return $out;   
  88.     }
  89.    
  90. }
  91.  
  92. $preguntas = new Cuestionario("America",'OBJECT');
  93. $preguntas->addPregunta("Cuando los europeos descubrieron oficialmente de America ?",array(1942,1542,1492),3,"historia");
  94. $preguntas->addPregunta("Quien era Atahuala?",array("un espanol conquistador","un jeque americano"),2,"historia");
  95. $preguntas->addPregunta("De que nacionalidad era Cristobal Colon ?",array("No se sabe con certeza","italiano","portugues","ingles"),1,"historia");
  96.  
  97. echo $preguntas;

OTRA FORMA... mas manual:

Código PHP:
Ver original
  1. // en vez de hacer un "echo" ...  dandote la posibilidad de personalizar el HTML generado
  2.  
  3. $nombre = $preguntas->getNombre();
  4.  
  5. foreach ($preguntas as $pregunta)
  6. {
  7.     echo "<span>{$pregunta->pregunta}</span><p/>";
  8.            
  9.     foreach ($pregunta->opciones as $option)   
  10.         echo "<input  type=\"radio\" name=\"{$nombre}[]\" value=\"\"/>{$option}</option><p/>";
  11.        
  12.     echo "<br/>";  
  13. }


COMO RECUPERAR LAS RESPUESTAS "CORRECTAS" para COMPARAR:

Código PHP:
Ver original
  1. foreach ($preguntas as $key => $pregunta)
  2.     echo "Respuesta correcta a la pregunta #$key : {$pregunta->respuesta}<br/>";

Si te fijas... no me enredé manteniendo un indice interno ($this->_indice) sino que agrupe todo para manejar todo junto ***


RESULTADO:

Cita:
Respuesta correcta a la pregunta #0 : 1492
Respuesta correcta a la pregunta #1 : un jeque americano
Respuesta correcta a la pregunta #2 : No se sabe con certeza
__________________
Salu2!

Última edición por Italico76; 13/06/2014 a las 18:59
  #7 (permalink)  
Antiguo 13/06/2014, 20:15
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Consulta imprimir Datos

Esta muy bien la aproximacion Italico. Lo unico que me hace ruido es el toString de cuestionario. Y creo que seria buena idea que las respuestas fueran otro objeto. Las preguntas debieran ser intercambiables para soportar ptro tipo de pregutas
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #8 (permalink)  
Antiguo 13/06/2014, 20:20
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Consulta imprimir Datos

Gracias @hhs, la verdad es que el __toString() no deberia ir..... en principio lo usaba para mostrar por consola el cuestionario (como un var_dump), en fin... no sirve... de acuerdo, debe irse ese metodo o quedar como lo habia pensado originalmente:

Código PHP:
Ver original
  1. // para consola
  2.     function __toString()
  3.     {
  4.         $out = "Cuestionario: {$this->_nombre}\n\n";
  5.        
  6.         foreach ($this->_preguntas as $pregunta)
  7.         {
  8.             $out .= "{$pregunta->pregunta}\n\n";
  9.            
  10.             foreach ($pregunta->opciones as $option)   
  11.                 $out .= "( ) {$option}\n";     
  12.             $out .= "\n";          
  13.         }
  14.        
  15.         return $out;   
  16.     }

Lo de las preguntas intercambiables...mm... creo te entiendo... al ser objetos podrian tener un metodo para por ejemplo desordenarlas ... buena idea.... pero era solo "una mano" al compañero que pregunto
__________________
Salu2!
  #9 (permalink)  
Antiguo 13/06/2014, 20:56
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Consulta imprimir Datos

Italico, perdon se me fue mal la redaccion lo ultimo eran recomendaciones pero no para ti. De echo ya ayudaste mucho con el ejemplo
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #10 (permalink)  
Antiguo 13/06/2014, 22:13
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Consulta imprimir Datos

Cita:
Iniciado por hhs Ver Mensaje
Italico, perdon se me fue mal la redaccion lo ultimo eran recomendaciones pero no para ti. De echo ya ayudaste mucho con el ejemplo
Si yo se amigo @hhs ... que tu eres de los que quieren que los usuarios hagan el maximo esfuerzo.

Publico de todas formas la implementacion de tu idea de mejora:

Código PHP:
Ver original
  1. <?php
  2. /*
  3.     @author: Pablo Bozzolo (italico76) 
  4. */
  5. Class PreguntaCuestionario implements Countable, Iterator
  6. {
  7.     private $_pregunta = NULL;
  8.     private $_respuestas  = [];
  9.     private $_respuesta_correcta = null;
  10.  
  11.    
  12.     public function __construct($pregunta)
  13.     {
  14.         // texto de la pregunta
  15.         $this->_pregunta=$pregunta;
  16.     }
  17.        
  18.     public function getPregunta()
  19.     {
  20.         return $this->_pregunta;
  21.     }
  22.    
  23.     // alias de getPregunta
  24.     public function getNombre()
  25.     {
  26.         return $this->_pregunta;
  27.     }
  28.    
  29.     // una posible repuesta
  30.     public function addRespuesta($respuesta)
  31.     {
  32.         $this->_respuestas[] = $respuesta;
  33.         return $this;
  34.     }
  35.    
  36.     // posibles repuestas
  37.     public function addRespuestas(array $respuestas)
  38.     {
  39.         foreach ($respuestas as $respuesta)
  40.             $this->_respuestas[] = $respuesta; 
  41.            
  42.         return $this;
  43.     }
  44.        
  45.     // la respuesta considerada 'correcta', si la hay
  46.     // posicion como rango {1...N}
  47.     public function setRespuestaCorrecta($posicion)
  48.     {
  49.         $this->_respuesta_correcta = $this->_respuestas[$posicion-1];
  50.         return $this;
  51.     }
  52.    
  53.     public function getRespuestaCorrecta()
  54.     {
  55.         return $this->_respuesta_correcta;
  56.     }
  57.  
  58.     // desordena respuestas
  59.     public  function desordenar()
  60.     {
  61.         shuffle($this->_respuestas);
  62.         return $this;
  63.     }
  64.    
  65.     /* Iterator */
  66.     function rewind() {        
  67.         reset($this->_respuestas);
  68.     }
  69.  
  70.     function current()
  71.     {
  72.         return current($this->_respuestas);
  73.     }
  74.  
  75.     function key()
  76.     {        
  77.         return key($this->_respuestas);
  78.     }
  79.  
  80.     function next()
  81.     {
  82.         next($this->_respuestas);        
  83.     }
  84.  
  85.     function valid()
  86.     {  
  87.         return isset($this->_respuestas[$this->key()]);
  88.     }
  89.    
  90.     /* Countable */
  91.     function count()
  92.     {  
  93.         return count($this->_respuestas);
  94.     }  
  95.    
  96. }
  97.  
  98.  
  99. Class Cuestionario implements Countable, Iterator
  100. {
  101.     private $_nombre = NULL;
  102.     private $_preguntas= array();
  103.     private $_mode = NULL;
  104.        
  105.     /*
  106.         @param nombre del cuestionario     
  107.         @return void   
  108.     */ 
  109.     public function __construct($nombre)
  110.     {          
  111.         $this->_nombre=$nombre;
  112.     }
  113.    
  114.     public function getNombre()
  115.     {
  116.         return $this->_nombre;
  117.     }
  118.  
  119.     public function addPregunta(PreguntaCuestionario $pregunta)
  120.     {  
  121.         $this->_preguntas[]= $pregunta;    
  122.         return $this;
  123.     }
  124.  
  125.     // desordena preguntas
  126.     public  function desordenar($tambien_respuestas=true)
  127.     {
  128.         shuffle($this->_preguntas);
  129.         if ($tambien_respuestas)
  130.             foreach ($this->_preguntas as $pregunta)
  131.                 $pregunta->desordenar();
  132.        
  133.         return $this;
  134.     }
  135.  
  136.     /* Iterator */
  137.     function rewind() {        
  138.         reset($this->_preguntas);
  139.     }
  140.  
  141.     function current()
  142.     {
  143.         return current($this->_preguntas);
  144.     }
  145.  
  146.     function key()
  147.     {        
  148.         return key($this->_preguntas);
  149.     }
  150.  
  151.     function next()
  152.     {
  153.         next($this->_preguntas);        
  154.     }
  155.  
  156.     function valid()
  157.     {  
  158.         return isset($this->_preguntas[$this->key()]);
  159.     }
  160.    
  161.     /* Countable */
  162.     function count()
  163.     {  
  164.         return count($this->_preguntas);
  165.     }
  166.    
  167.        
  168.     // para consola
  169.     function __toString()
  170.     {
  171.         $out = "Cuestionario: {$this->_nombre}\n\n";
  172.        
  173.         foreach ($this->_preguntas as $pregunta)
  174.         {  
  175.             $out .= $pregunta->getNombre()."\n\n";
  176.    
  177.             foreach ($pregunta as $option)         
  178.                 $out .= "( ) $option\n";
  179.        
  180.                 $out .= "\n(RTA: ".$pregunta->getRespuestaCorrecta().")\n\n";
  181.             $out .= "\n";  
  182.         }
  183.        
  184.         return $out;   
  185.     }
  186.  
  187. }
  188.  
  189. // creo Cuestionario:
  190.  
  191. $pregs = new Cuestionario("America");
  192.  
  193. $pregs  ->addPregunta(
  194.             (new PreguntaCuestionario("Cuando los europeos descubrieron oficialmente de America ?"))
  195.             ->addRespuesta(1942)->addRespuesta(1542)->addRespuesta(1492)
  196.             ->setRespuestaCorrecta(3)
  197.             )
  198.  
  199.         ->addPregunta( 
  200.             (new PreguntaCuestionario("Quien era Atahuala ?"))
  201.             ->addRespuestas(["un espanol conquistador","un jeque americano"])      
  202.             ->setRespuestaCorrecta(2)
  203.             )
  204.            
  205.         ->addPregunta( 
  206.             (new PreguntaCuestionario("De que nacionalidad era Cristobal Colon ?"))
  207.             ->addRespuestas(["No se sabe con certeza","italiano","portugues","ingles"])    
  208.             ->setRespuestaCorrecta(1)
  209.            
  210.             )->desordenar();
  211.  
  212.            
  213.            
  214.  
  215. // Lo recupero:
  216. $nombre = $pregs->getNombre();
  217.  
  218. foreach ($pregs as $pregunta)
  219. {  
  220.     echo "<span>".$pregunta->getNombre()."</span><p/>";
  221.    
  222.     foreach ($pregunta as $option)         
  223.         echo "<input  type=\"radio\" name=\"{$nombre}[]\" value=\"\"/>{$option}</option><p/>";
  224.        
  225.     //echo $pregunta->getRespuestaCorrecta();
  226.     echo "<br/>";  
  227. }
  228.  
  229. // recupero respuestas
  230. foreach ($pregs as $pregunta)  
  231.     echo $pregunta->getRespuestaCorrecta()."<br/>";
  232.  
  233. // para consola:
  234. echo $pregs;

Ahora se puede desordenar todo el formulario tanto preguntas como respuestas con llamado al metodo desordenar() en el cuestionario
__________________
Salu2!

Etiquetas: oop
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 04:56.