PORQUE NO INSERTA DATOS PHP

Iniciado por lokito1986, 13 Abril 2012, 04:24 AM

0 Miembros y 2 Visitantes están viendo este tema.

lokito1986

 ;-)Observacion : Corregido Al FINAL PUSE EL CODIGO COMPLETO FUNCIONANDO PERFECTAMENTE
ME GUSTARIA RECIBIR OPINIONES SI LO QUE E CODIFICADO ES CORRECTO O DE QUE MANERA PUEDO MEJORARLO ...
;D
***********************************************
ante todos gracias por darse Un tiempo para ller este mensaje ..pero lo k pasa que soy un novato que estoy programando en PHP ...
bueno al intentar grabar no se puede y sale este error ...
Categoria si inserta Normal ..el problema viene cuando intento grabar UN PRODUcTO
Estoy Haciendo Lo correcto en progrmar de Esta forma ..si no es asi me gustaria que me hiceran ver donde ESTAN MIS HORRORES xD..

Error MOSTRADO :

Fatal error: Call to a member function EjecutarConsulta() on a non-object in C:\AppServ\www\trabajoMadrugada\Clases\Producto.ph p on line 34

Categoria.php
<?php
 
require_once 'Conexion.php';
class 
Categoria {
    private 
$codigoCategoria;
    private 
$_nombre;
    private 
$_descripcion;
    private 
$_objcon;
   
    public function 
getCodigoCategoria() {
        return 
$this->codigoCategoria;
    }
 
    public function 
setCodigoCategoria($codigoCategoria) {
        
$this->codigoCategoria $codigoCategoria;
    }
 
        function 
__construct() {
        
$this->_objcon=new Conexion();
    }
 
    public function 
get_nombre() {
        return 
$this->_nombre;
    }
 
    public function 
set_nombre($_nombre) {
        
$this->_nombre $_nombre;
    }
 
    public function 
get_descripcion() {
        return 
$this->_descripcion;
    }
 
    public function 
set_descripcion($_descripcion) {
        
$this->_descripcion $_descripcion;
    }
 
public function 
grabarCategoria(){
    
$query="insert into categoria(nombre,descripcion)values('$this->_nombre','$this->_descripcion')";
    
$resultado $this->_objcon->EjecutarConsulta($query);
    return 
$resultado;
}
}
?>


Producto.php
<?php
require_once 'Categoria.php';
 
class 
Producto {
    private 
$nombre;
    private  
$objCat;
    private 
$objcon;
   
   
    function 
__construct() {
        
$this->objcon=new Conexion();
        
$this->objCat=new Categoria();
    }
    public function 
getNombre() {
        return 
$this->nombre;
    }
 
    public function 
setNombre($nombre) {
        
$this->nombre $nombre;
    }
 
    public function 
getObjCat() {
        return 
$this->objCat;
    }
 
    public function 
setObjCat(Categoria $objcat) {
        
$this->objCat=$objcat;
    }
 
    public function 
grabarProducto(){
     
        
$micod=  $this->objCat->getCodigoCategoria();
    
$query="insert into producto (nombre,codcategoria)values('$this->nombre','$micod')";
    
$resultado $this->_objcon->EjecutarConsulta($query);
    return 
$resultado;
}
 
}

Prueba.php
<?php require_once '../Clases/Producto.php';
 
$objproducto=new Producto();
$objcat=new Categoria();
$objcat->setCodigoCategoria("2");
$objcat->set_nombre("lacteos");
$objcat->set_descripcion("tiene Calcio");
 
$objproducto->setNombre("Leche ");
$objproducto->setObjCat($objcat);
 
$resp $objproducto->grabarProducto();
 
if (
$resp) {
  echo 
'Grabo exitosamente';
}
else{
    echo 
'fallo algo';
}
 
?>


 
?>


ojala me pudieran ayudar porque en verdad este problema ya me tiene loco..
posdta : estoy tratando de Aprender a Usar POO con MVC basico no estoy utilizando PDO  ...gracias a todos por leer mi post   :-[

Graphixx

Intenta agregar a la clase  Producto.php:
require_once 'Conexion.php';

ya que estas creando un objeto:
$this->objcon=new Conexion();

el cual lo llama en la linea con el error:
$resultado = $this->_objcon->EjecutarConsulta($query);

Y segun el error no se creo satisfactoriamente el objeto, yo supondria que es por que no esta incluida la clase con el objeto Conexion.
Nada tiene fin solo hay pequeñas pausas, pausas que determinan el comienzo de otros. Graphixx
Mi blog

WHK

Habilita el error reporting en tu php.ini y podrás ver que error te da php, o toma la query y pegala en el phpmyadmin y verás porque no se inserta, eso se llama depurar el código e ir viendo como se solucionan los problemas.

Creo que mas adelante haré un post sobre como depurar un script en php.

reemplaza:
Código (php) [Seleccionar]
public function grabarCategoria(){
    $query="insert into categoria(nombre,descripcion)values('$this->_nombre','$this->_descripcion')";
    $resultado = $this->_objcon->EjecutarConsulta($query);
    return $resultado;
}


por:
Código (php) [Seleccionar]
public function grabarCategoria(){
    echo $query="insert into categoria(nombre,descripcion)values('$this->_nombre','$this->_descripcion')";
    $resultado = $this->_objcon->EjecutarConsulta($query);
    return $resultado;
}


y te saldrá la query, copiala y pegala en el phpmyadmin y verás que error te sale, o si no utiliza mysql_error()

Saludos.

Graphixx

Compa, no seria mejor que en vez de echo usara print_r ():
Código (php) [Seleccionar]

print_r ($query);


ya que para objetos, muchas veces los valores quedan almacenados en la variable de respuesta como un Array, y con echo solo le imprimiria Array, es una sugerencia para que el compañero que apenas empieza con POO tenga en cuenta a futuro.
Nada tiene fin solo hay pequeñas pausas, pausas que determinan el comienzo de otros. Graphixx
Mi blog

WHK

Tienes toda la razón, pero en este caso no hay objetos ni arrays para hacer un dump con print_r():

$query="insert into categoria(nombre,descripcion)values('$this->_nombre','$this->_descripcion')";

La query va en texto plano sin objetos ya que contiene strings y si hubiera dado un objeto o un array le hubiera dado error de sintaxis, por eso le dije que hiciera un echo en ves de un print_r(), de todas formas en este caso da lo mismo si lo haces de ambas formas, tendrás el mismo resultado.

lokito1986

gracias a ambos Amigos por participar en mi post..les quiero decir que ya logre Implementarlo correctamente

lokito1986

amigos el problema que yo lers comente que si intento GRABAR UNA CATEGORIA LO HACE CORRECTAMENTE ::::el PROBLEMA QUE YO TENIA ERA QUE NO PODIA GRABAR UN PRODUCTO pero gracias a Dios ya logre solucionarlo ....

lokito1986

el problema era aqui :
public function grabarProducto(){
     
    ...........
    $resultado = $this->_objcon->EjecutarConsulta($query);
    return $resultado;
}
no era _objcon sino SIMPLEMENTE objcon sin guion bajo ....

asi que ahi les pego el codigo corriendo perfectamente :.

posdata : Ustedes foreros que tienen mas tiempo programndo en PHP  ...esta bien mi codificacion orientado a Objetos ...me gustaria escucar opiniones al respecto ..gracias

lokito1986

#8
::)Codigo Correegido Y funcionando Perfectamente >:D

Conexion.php
<?php

class Conexion {

   private $servidor;
   private $usuario;
   private $clave;
   private $bd;
   private $link;

   public function __construct() {
       $this->servidor = "localhost";
       $this->usuario = "root";
       $this->clave = "root";
       $this->bd = "vargas";
   }

   public function RetornaConexion() {
       $this->link = @mysql_connect($this->servidor, $this->usuario, $this->clave) or die('Error al Conectar Con el Servidor : ' . mysql_error());
       mysql_select_db($this->bd, $this->link) or die("error al Seleccionar La BD : " . mysql_error());
       return $this->link;
   }

   public function EjecutarConsulta($query) {
       $data = mysql_query($query, $this->RetornaConexion());
       if (!$data) {
           echo 'error En la consulta : ' . mysql_error();
       }
       return $data;
   }

   public function CierraConexion() {
       return mysql_close();
   }

   public function CantidadRegistros($result) {
       return mysql_num_rows($result);
   }

   public function DevolverXFilas($result) {
       return mysql_fetch_array($result);
   }

}

?>

************************
Categoria.php

<?php
require_once 'Conexion.php';
class Categoria {
   private $codigoCategoria;
   private $_nombre;
   private $_descripcion;
   private $_objcon;
   
   public function getCodigoCategoria() {
       return $this->codigoCategoria;
   }

   public function setCodigoCategoria($codigoCategoria) {
       $this->codigoCategoria = $codigoCategoria;
   }

       function __construct() {
       $this->_objcon=new Conexion();
   }

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

   public function set_nombre($_nombre) {
       $this->_nombre = $_nombre;
   }

   public function get_descripcion() {
       return $this->_descripcion;
   }

   public function set_descripcion($_descripcion) {
       $this->_descripcion = $_descripcion;
   }

public function grabarCategoria(){
    $query="insert into categoria(nombre,descripcion)values('$this->_nombre','$this->_descripcion')";
   $resultado = $this->_objcon->EjecutarConsulta($query);
   return $resultado;
}
}
?>

******************************************
Producto.php

<?php
require_once 'Categoria.php';

class Producto {
   private $nombre;
   private  $objCat;
   private $objcon;
   
   
   function __construct() {
       $this->objcon=new Conexion();
       $this->objCat=new Categoria();
     
   }
   public function getNombre() {
       return $this->nombre;
   }

   public function setNombre($nombre) {
       $this->nombre = $nombre;
   }

public function SetCategoria(Categoria $objCat){
   $this->objCat=$objCat;
   }
 
   public function grabarProducto(){
      $micod=  $this->objCat->getCodigoCategoria();
  $query="insert into producto (nombre,codcategoria)values('$this->nombre','$micod')";
   $resultado = $this->objcon->EjecutarConsulta($query);
   return $resultado;
}
   
   
}

?>

*********************
Prueba.php

<?php
require_once '../Clases/Producto.php';

$objC=new Categoria();
$objC->set_nombre("Artefactos");
$objC->setCodigoCategoria(6);
$objC->set_descripcion("De Importacion");
$objC->grabarCategoria();

$objP=new Producto();
$objP->setNombre("Laptops");
$objP->SetCategoria($objC);
$objP->grabarProducto();

obviamente que este es UN EJEMPLO para COMPROBAR SOLAMENTE QUE SI GRABA ...ME GUSTARIA ESCUCHAR OPINIONES


Graphixx

Cita de: lokito1986 en 13 Abril 2012, 17:29 PM
el problema era aqui :
public function grabarProducto(){
     
    ...........
    $resultado = $this->_objcon->EjecutarConsulta($query);
    return $resultado;
}
no era _objcon sino SIMPLEMENTE objcon sin guion bajo ....

asi que ahi les pego el codigo corriendo perfectamente :.

posdata : Ustedes foreros que tienen mas tiempo programndo en PHP  ...esta bien mi codificacion orientado a Objetos ...me gustaria escucar opiniones al respecto ..gracias

Eso del guion bajo se llama Metodos magicos en PHP, no hay mucha documentacion al respecto pero aca te puse algo:
http://foro.elhacker.net/php/metodos_magicos_set_y_get_definicion_y_uso_con_call_en_php-t359079.0.html
Nada tiene fin solo hay pequeñas pausas, pausas que determinan el comienzo de otros. Graphixx
Mi blog