Duda sobre variables

Iniciado por Grave, 17 Junio 2014, 10:59 AM

0 Miembros y 1 Visitante están viendo este tema.

Grave

Alguien sabe porque este codigo me da error?

<?php
 
//no direct access
defined('_JEXEC') or die('Acceso restringido'); 

class 
Organismo
{
  private 
$idorganismo=0;
  private 
$nombre="";
  private 
$pais="";
  private 
$descripcion="";
  
  public function 
__construct() { 
    
$idorganismo=$_POST['codigo'];
    
$nombre=$_POST['nombre'];
    
$pais=$_POST['continente'];
    
$descripcion=$_POST['informacion'];
    
$db = JFactory::getDBO();   
  }
  public function 
crear(){
    
$query = "INSERT INTO organismos VALUES(" . $idorganismo . ", '" . $nombre . "', '" . $pais . "', '" . $descripcion . "');";
    
$db->setQuery($query); 
    return 
$db->query();
  }
  public function 
editar(){
    echo 
$nombre;
    
$query = "UPDATE organismos SET nombre='" . $nombre . "', continente='" . $pais . "', informacion='" . $descripcion . "' WHERE codigo=". $idorganismo . ";";
    
$db->setQuery($query); 
    return 
$db->query();
  }
  public function 
eliminar(){
    
$query = "DELETE FROM organismos WHERE codigo='" . $idorganismo . "';";
    
$db->setQuery($query); 
    return 
$db->query();
  }
}
$input = new JInput;
$event = $input->get('event', '','string');
$res=false;
if(
$event != "")
{
  
$org = new Organismo;
  if(
$event  == 'new')
    
$res = $org->crear();
  if(
$event == 'edit')
    
$res = $org->editar();
  if(
$event == 'del')
    
$res = $org->eliminar();
}
$layout = $params->get('layout', 'default');
require 
JModuleHelper::getLayoutPath('mod_catorg', $layout); 

 
?>




Notice: Undefined variable: nombre in C:\xampp\htdocs\joomla\modules\mod_catorg\mod_catorg.php on line 26

Notice: Undefined variable: nombre in C:\xampp\htdocs\joomla\modules\mod_catorg\mod_catorg.php on line 27

Notice: Undefined variable: pais in C:\xampp\htdocs\joomla\modules\mod_catorg\mod_catorg.php on line 27

Notice: Undefined variable: descripcion in C:\xampp\htdocs\joomla\modules\mod_catorg\mod_catorg.php on line 27

Notice: Undefined variable: idorganismo in C:\xampp\htdocs\joomla\modules\mod_catorg\mod_catorg.php on line 27

Notice: Undefined variable: db in C:\xampp\htdocs\joomla\modules\mod_catorg\mod_catorg.php on line 28

Fatal error: Call to a member function setQuery() on a non-object in C:\xampp\htdocs\joomla\modules\mod_catorg\mod_catorg.php on line 28
"y el conocimiento os hara libres"

Module Console1
   Console.Write("Hello Word")
   Console.ReadLine()
End Module
http://aion.cr0n0triger.operaunite.com/

engel lex

Estoy en el cel asi que no veo muy bien, pero casi seguro que estas accediendo a la variable mal

Para acceder a las variabled de otro scope en una misma clase, debea usar $this->variable
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

marko1985

#2
Hola,

En el constructor deber llamar a los atributos que has definido con la siguiente sintáxis.

$this->TU_VARIABLE, sino las variables que has definido dentro de __construct se quedan cómo locales y no son visibles al resto de métodos, por otra parte tampoco estarás modificando $idorganismo.

Para acceder a estas variables lo mismo debes llamarlas mediante this->TUVARIABLE
si fueran constantes con self::

Prueba de esta forma

Código (php) [Seleccionar]
<?php
 
//no direct access
defined('_JEXEC') or die('Acceso restringido'); 

class 
Organismo
{
  protected 
$idorganismo=0;
  protected 
$nombre;
  protected 
$pais;
  protected 
$descripcion;
  public      
$db;
  
  public function 
__construct() { 
    
$this->$idorganismo=$_POST['codigo'];
    
$this->$nombre=$_POST['nombre'];
    
$this->$pais=$_POST['continente'];
    
$this->$descripcion=$_POST['informacion'];
    
$this->$db = JFactory::getDBO();   
  }
  public function 
crear(){
    
$query = "INSERT INTO organismos VALUES(" . $this->$idorganismo . ", '" . $this->$nombre . "', '" . $this->$pais . "', '" . $this->$descripcion . "');";
    
$this->db->setQuery($query); 
    return $
$this->db->query();
  }
  public function 
editar(){
    echo 
$nombre;
    
$query = "UPDATE organismos SET nombre='" . $this->$nombre . "', continente='" . $this->$pais . "', informacion='" . $this->$descripcion . "' WHERE codigo=". $this->$idorganismo . ";";
    
$this->$db->setQuery($query); 
    return 
$db->query();
  }
  public function 
eliminar(){
    
$query = "DELETE FROM organismos WHERE codigo='" . $this->$idorganismo . "';";
    
$this->$db->setQuery($query); 
    return 
$this->$db->query();
  }
}
$input = new JInput;
$event = $input->get('event', '','string');
$res=false;
if(
$event != "")
{
  
$org = new Organismo;
  if(
$event  == 'new')
    
$res = $org->crear();
  if(
$event == 'edit')
    
$res = $org->editar();
  if(
$event == 'del')
    
$res = $org->eliminar();
}
$layout = $params->get('layout', 'default');
require 
JModuleHelper::getLayoutPath('mod_catorg', $layout); 

 
?>


Espero que no se me haya escapado ningun te recomiento esta página sobre visibilidad en PHP http://www.php.net//manual/es/language.oop5.properties.php

Grave

gracias por la ayuda me ha funcionado :)
"y el conocimiento os hara libres"

Module Console1
   Console.Write("Hello Word")
   Console.ReadLine()
End Module
http://aion.cr0n0triger.operaunite.com/