Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] PHP OO Problema al llenar un combo

Estas en el tema de Problema al llenar un combo en el foro de PHP en Foros del Web. Buenas tardes! Estoy tratando de llenar un combo con los nombres de unas categoría que tengo en la base de datos pero no lo logro ...
  #1 (permalink)  
Antiguo 17/12/2014, 10:34
 
Fecha de Ingreso: septiembre-2011
Mensajes: 233
Antigüedad: 13 años, 2 meses
Puntos: 1
Problema al llenar un combo

Buenas tardes! Estoy tratando de llenar un combo con los nombres de unas categoría que tengo en la base de datos pero no lo logro hacerlo, creo que en la función tengo algo malo que por eso no lo mostrando, este es el código que utilizó:
Código:
<?php

	require_once('conexion.php');

	Class Categoria{

		private $idCategoriaArea;
		private $nombreCategoria;

		public function __construct($idCategoriaArea=null,$nombreCategoria=null)
		{
			$this->idCategoriaArea=$idCategoriaArea;
			$this->nombreCategoria=$nombreCategoria;
		}

		public function getIdCategoria(){
			return $this->idCategoriaArea;
		}
		public function getNombCategoria(){
			return $this->nombreCategoria;
		}
		public function setIdCategoria($idCategoriaArea){
			$this->idCategoriaArea=$idCategoriaArea;
		}
		public function setNombCategoria($nombreCategoria){
			$this->nombreCategoria=$nombreCategoria;
		}
//esta es la función que estoy utilizando para llenar el combo
public function ObtenerTodasCategoria(){
	$link=new Conexion();
	$conexion=$link->conectar();
	$categoria=array();
	$consulta=$conexion->prepare('SELECT idCategoriaArea, nombreCategoria FROM categoriaarea ORDER BY idCategoriaArea desc');
	$consulta->execute();
	$resultado = $consulta->get_result();
	while($fila=$resultado->fetch_assoc())
	{
		$cat=$this->__construct($fila['idCategoriaArea'],$fila['nombreCategoria']); //creo que esto esta malo
		array_push($categoria, $cat);
	}
	$conexion->close();
	return $categoria;	
		}
	}
?>
y en el html el código que tengo es este: prueba.html
Código:
<div>
<select >
<option value="0">Seleccione un Opción</option>
<?php
require_once('categoria.class.php');
$obj=new Categoria();
$categoria=$obj->ObtenerTodasCategoria();
foreach ($categoria as $categ){
echo '<option value="'.$categ->getIdCategoria.'">'.utf8_decode($categ->getNombCategoria).'</option>';
					}
?>
</select>
</div>
Me sale estos errores:
<b>Notice</b>: Trying to get property of non-object in <b>C:\xampp\htdocs\ include\prueba.php</b> on line <b>16</b><br />
<b>Notice</b>: Trying to get property of non-object in <b> C:\xampp\htdocs\ include\prueba.php</b> on line <b>16</b><br />
<option value=""></option><br />
<b>Notice</b>: Trying to get property of non-object in <b> C:\xampp\htdocs\ include\prueba.php</b> on line <b>16</b><br /><br />
  #2 (permalink)  
Antiguo 17/12/2014, 10:50
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Problema al llenar un combo

Cita:
$cat=$this->__construct($fila['idCategoriaArea'],$fila['nombreCategoria']); //creo que esto esta malo
Definitivamente ese es el problema.

Si la idea es crear una instancia nueva por cada resultado lo estás haciendo mal, mira:
Código PHP:
Ver original
  1. $cat=new Categoria($fila['idCategoriaArea'],$fila['nombreCategoria']);

Por favor consulta una referencia de OOP, te hace mucha falta.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 17/12/2014, 11:29
 
Fecha de Ingreso: septiembre-2011
Mensajes: 233
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: Problema al llenar un combo

Hola pateketrueke gracias por responderme, al modificarlo me dio este error:
<b>Fatal error</b>: Cannot access private property Categoria::$idCategoriaArea in <b>C:\xampp\htdocs\Modelo para el sistema en php\Modelo 4\include\prueba.php</b> on line <b>16</b><br />

pero en esa línea tenia este método:
Código:
public function getIdCategoria(){
			return $this->idCategoriaArea;
		}
Entonces le cambie las propiedades del atributos a public y funcionó, entiendo que la visibilidad public podrá ser leído o llamado en cualquier parte del código, sea desde la misma clase o desde fuera de ella, como la estoy llamando desde otra parte por eso debe de ser pública?

Cuando me dices:
Cita:
Iniciado por pateketrueke Ver Mensaje
Por favor consulta una referencia de OOP, te hace mucha falta.
Me preocupa no tengo mucho tiempo programando en php y en POO pero me gusta y estoy aprendiendo, gracias por recomendarme que consulte más sobre esa referencia, me gustaría saber que opinas del código que tengo?
  #4 (permalink)  
Antiguo 17/12/2014, 11:39
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Problema al llenar un combo

Cita:
Entonces le cambie las propiedades del atributos a public y funcionó, entiendo que la visibilidad public podrá ser leído o llamado en cualquier parte del código, sea desde la misma clase o desde fuera de ella, como la estoy llamando desde otra parte por eso debe de ser pública?
Creo que de entrada no comprendes bien la visibilidad en OOP.

Vamos, la propiedad está bien que sea privada, sin embargo es imposible acceder a ella públicamente.

Ese es el comportamiento esperado.

Código PHP:
Ver original
  1. public function getIdCategoria(){
  2.   return $this->idCategoriaArea;
  3. }

Ahora, deberías usar $categ->getIdCategoria() con paréntesis porque se trata de un método, no una propiedad.

La idea es usar dicho getter en lugar de la propiedad, ¿si no qué sentido tiene entonces el getter?

Por eso has terminado modificando la visibilidad: porque parece ser que no entiendes dicho concepto de OOP.

Cita:
Me preocupa no tengo mucho tiempo programando en php y en POO pero me gusta y estoy aprendiendo, gracias por recomendarme que consulte más sobre esa referencia, me gustaría saber que opinas del código que tengo?
Pues lo veo mal.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 17/12/2014, 13:20
 
Fecha de Ingreso: septiembre-2011
Mensajes: 233
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: Problema al llenar un combo

Ahora si te entiendo, con razón no funcionaba cuando usaba el getter, muchas gracias, voy a documetarme bien en la OOP y entender lo de la visibiblidad.

Etiquetas: combo, html, select
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:44.