Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: lokito1986 en 13 Abril 2012, 04:24 am



Título: PORQUE NO INSERTA DATOS PHP
Publicado por: lokito1986 en 13 Abril 2012, 04:24 am
 ;-)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   :-[


Título: Re: PORQUE NO INSERTA DATOS PHP
Publicado por: Graphixx en 13 Abril 2012, 05:16 am
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.


Título: Re: PORQUE NO INSERTA DATOS PHP
Publicado por: WHK en 13 Abril 2012, 15:01 pm
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
  1. public function grabarCategoria(){
  2.    $query="insert into categoria(nombre,descripcion)values('$this->_nombre','$this->_descripcion')";
  3.    $resultado = $this->_objcon->EjecutarConsulta($query);
  4.    return $resultado;
  5. }

por:
Código
  1. public function grabarCategoria(){
  2.    echo $query="insert into categoria(nombre,descripcion)values('$this->_nombre','$this->_descripcion')";
  3.    $resultado = $this->_objcon->EjecutarConsulta($query);
  4.    return $resultado;
  5. }

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.


Título: Re: PORQUE NO INSERTA DATOS PHP
Publicado por: Graphixx en 13 Abril 2012, 16:47 pm
Compa, no seria mejor que en vez de echo usara print_r ():
Código
  1. print_r ($query);
  2.  

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.


Título: Re: PORQUE NO INSERTA DATOS PHP
Publicado por: WHK en 13 Abril 2012, 16:56 pm
Tienes toda la razón, pero en este caso no hay objetos ni arrays para hacer un dump con print_r():

Código:
 $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.


Título: Re: PORQUE NO INSERTA DATOS PHP
Publicado por: lokito1986 en 13 Abril 2012, 17:21 pm
gracias a ambos Amigos por participar en mi post..les quiero decir que ya logre Implementarlo correctamente


Título: Re: PORQUE NO INSERTA DATOS PHP
Publicado por: lokito1986 en 13 Abril 2012, 17:24 pm
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 ....


Título: Re: PORQUE NO INSERTA DATOS PHP
Publicado por: 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


Título: Re: PORQUE NO INSERTA DATOS PHP
Publicado por: lokito1986 en 13 Abril 2012, 17:36 pm
::)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



Título: Re: PORQUE NO INSERTA DATOS PHP
Publicado por: Graphixx en 13 Abril 2012, 20:25 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


Título: Re: PORQUE NO INSERTA DATOS PHP
Publicado por: lokito1986 en 13 Abril 2012, 23:58 pm
gracias amigo pero loque yo quise decir es que en la clase producto yo coloque esto un atributo PRIVADO  private $objcon; sin guion  y cuando EJECUTE EL METODO grabarProducto() hacia referencia de Esta forma :
 $resultado = $this->_objcon->EjecutarConsulta($query); y eso estaba MAL  porque el  "_objcon" no lo habia declarado yo habia declarado un $objcon sin guion es DECIR EL PROBLEMA es HORROR MIO xD ......no se si me capataste amigo ..pero gracias por mostrarme esa informacion de get Y SETTer


Título: Re: PORQUE NO INSERTA DATOS PHP
Publicado por: lokito1986 en 14 Abril 2012, 00:04 am
de todas maneras me gustaria que copiaras UN PEDAZO DE TU PROPIO CODIGO a modo de ejemplo PARA VER COMO PROGRAMAS PHP POO PARA ASI PODER HACER MEJORAS A MI CODIGO YA QUE COMO TE DIGO RECIEN SOIY NOVATO Y NO ESTOY AUN 100% seguro QUE ESTOY PROGRAMANDO DE LA MANERA MAS CORRECTA ...
ojala puedasbrindarme un ejerciio para poder comparar y aprender mas ..gracias amigo por darte un time y leer mi post ..ns vemos