Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

problema de registrar datos utilizando clases

Estas en el tema de problema de registrar datos utilizando clases en el foro de Frameworks y PHP orientado a objetos en Foros del Web. buenas. tengo una consulta. estoy haciendo un administrador para ingresar productos. para insertar los datos lo hago con una clase de conexion. pero al momento ...
  #1 (permalink)  
Antiguo 03/02/2010, 13:59
(Desactivado)
 
Fecha de Ingreso: abril-2008
Mensajes: 787
Antigüedad: 16 años
Puntos: 7
Pregunta problema de registrar datos utilizando clases

buenas. tengo una consulta. estoy haciendo un administrador para ingresar productos. para insertar los datos lo hago con una clase de conexion. pero al momento de ingresar datos me muestra el siguiente error:

Fatal error: Call to a member function query() on a non-object in /home/comunova/public_html/teirsac/admin/servicios/funciones.php on line 7

clase conexion.

Código PHP:
Ver original
  1. class Conexion{
  2.    var $host = DB_SERVER1;
  3.    var $port = DB_PORT1;
  4.    var $user = DB_USER1;
  5.    var $password = DB_PWD1;
  6.    var $db  = DB_1;
  7.    var $idError = 0;
  8.    var $error = "";
  9.    var $link = NULL; // variable compartida para todas las instanicias de la clase
  10.    function Conexion($host = DB_SERVER1, $port = DB_PORT1, $user = DB_USER1, $password = DB_PWD1, $db = DB_1){
  11.     // parametros opcionales, tienen valores por defecto
  12.        $this->host = $host;
  13.        $this->port = $port;
  14.        $this->db    = $db;
  15.        $this->user = $user;
  16.        $this->password = $password;
  17.    }
  18.    // solo se conecta si es que la variable $link no esta cargada
  19.    // o no esta activa la conexion
  20.    function conectarse(){
  21.         if(!$this->estaConectada()){// si la conexion NO esta activa
  22.             $this->link = @mysql_connect($this->host,$this->user,$this->password);
  23.             // la @ evita que se imprima el error
  24.             if (!$this->link) {
  25.                 die( "<p class='error'>Problemas de conexion con la base de datos.</p>");
  26.             }
  27.             if(!(mysql_select_db($this->db,$this->link)))
  28.                 die( "<p class='error'>No puede utilizar la base de datos $this->db.</p>");
  29.         }
  30.    }
  31.    // cierra la conexion si es que esta conectada
  32.    function cerrar_conexion(){
  33.         if($this->estaConectada())
  34.         // se asegura que la conexion no se rompio bruscamente (fuera del close)
  35.             mysql_close($this->link);
  36.         $this->link = NULL;
  37.    }
  38.    // ejecuta la query cargada en $sql
  39.    // en caso de error carga el codigo y mensaje de error en idError y error respectivamente.
  40.    function query($sql){
  41.         $result = mysql_query($sql,$this->link);
  42.         if(!$result){
  43.             //echo $sql;       
  44.             $this->idError = mysql_errno($this->link);
  45.             $this->error = mysql_error($this->link);
  46.         }
  47.         return $result; // FALSE si la query falla
  48.    }
  49.    // retona la siguiente fila en un array asociativo
  50.    function fetch_array($result){
  51.         $fila = mysql_fetch_array($result);
  52.         return $fila;
  53.    }
  54.    // retorna el numero de filas del result_set ($result)
  55.    function num_rows($result){
  56.         $num_rows = mysql_num_rows($result);
  57.         return $num_rows;
  58.    }
  59.    // retorna un booleano indicando si la conexion esta activa
  60.    function estaConectada(){
  61.         if( $this->link != NULL && mysql_ping($this->link) )
  62.             return true;
  63.         else
  64.             return false;
  65.    }
  66. }

config.inc.php

Código PHP:
Ver original
  1. define("HOST","http://localhost");
  2. define("HOST1","http://localhost");
  3. // Postgres 1 o Mysql
  4. define("DB_SERVER1","localhost");
  5. define("DB_PORT1","3306");
  6. define("DB_USER1","root");
  7. define("DB_PWD1","123456");
  8. define("DB_1","teirsac");

funciones.php

Código PHP:
Ver original
  1. function agregarservicios($idtiposervicio,$descripcion){
  2.     $sql_servicios  = "insert into teirsac_servicios(idtiposervicio,descripcion)";
  3.     $sql_servicios .= "values('$idtiposervicio','$descripcion')";
  4.    
  5.     $cn->query($sql_servicios) or die(mysql_error());
  6.    
  7.     header("Location:index.php");
  8.    
  9. }
  10.  
  11. function editarservicios($codigo,$idtiposervicio,$descripcion){
  12.     $sql_edit  = "update teirsac_servicios set idtiposervicio = '$idtiposervicio', descripcion = '$descripcion' ";
  13.     $sql_edit .= "where idservicio = '$codigo'";
  14.    
  15.     $cn->query($sql_edit) or die(mysql_error());
  16.    
  17.     header("Location:index.php");
  18.    
  19. }
  20.  
  21. function borrarservicios($cod){
  22.     $sql_del = "delete from teirsac_servicios where idservicio = '$cod'";
  23.     $cn->query($sql_del) or die(mysql_error());
  24.    
  25.     header("Location:index.php");
  26.    
  27. }

procesar.php

Código PHP:
Ver original
  1. include("../../includes/Conexion.class.php");
  2. include("../../includes/config.inc.php");
  3. include("funciones.php");
  4.  
  5. $cn= new Conexion();
  6. $cn->conectarse();
  7.  
  8. $tipos_servicios    = $_POST['tipos_servicios'];
  9. $descripcion        = $_POST['descripcion'];
  10.  
  11. if(!isset($_POST['editar'])){
  12.     agregarservicios($tipos_servicios,$descripcion);
  13. }
  14.  
  15. if(isset($_POST['editar'])){
  16.     if($_POST['editar']=='1'){                                             
  17.         editarservicios($_POST['codigo'],$tipos_servicios,$descripcion);
  18.     }
  19.    
  20. }

a que se debe ese error ?
  #2 (permalink)  
Antiguo 03/02/2010, 16:34
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Tema movido desde PHP a PHP orientado a objetos

Te faltaría agregar global $cn en tus funciones o pasarlas como parámetros a la función ya que $cl no esta dentro del scope.

Saludos.
  #3 (permalink)  
Antiguo 03/02/2010, 17:20
(Desactivado)
 
Fecha de Ingreso: abril-2008
Mensajes: 787
Antigüedad: 16 años
Puntos: 7
Respuesta: problema de registrar datos utilizando clases

gracias por responder gatorv. entonces debo colocarle global $cn a mi clase o a mi funcion ?.

cualquier consulta te lo hare saber.

saludos.

Última edición por esaenz22; 03/02/2010 a las 17:21 Razón: correccion.
  #4 (permalink)  
Antiguo 03/02/2010, 21:13
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 14 años, 5 meses
Puntos: 65
Respuesta: problema de registrar datos utilizando clases

Y si pones asi esta linea?

Código PHP:
Ver original
  1. $cn = Conexion::query($sql_servicios) or die(mysql_error());
__________________
HV Studio
Diseño y desarrollo web
  #5 (permalink)  
Antiguo 03/02/2010, 21:31
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: problema de registrar datos utilizando clases

En la funcion, te recomiendo leas en el Manual para que sirven las variables globales.

Saludos.
  #6 (permalink)  
Antiguo 03/02/2010, 21:37
(Desactivado)
 
Fecha de Ingreso: abril-2008
Mensajes: 787
Antigüedad: 16 años
Puntos: 7
Respuesta: problema de registrar datos utilizando clases

gracias por las respuestas. revisare para que sirven las funciones globales.

una pregunta jackson666. en la linea de codigo que coloco:

Código PHP:
Ver original
  1. $cn = Conexion::query($sql_servicios) or die(mysql_error());

para que sirve los 2 puntos colocado en la clase Conexion ?.

saludos.

Última edición por esaenz22; 03/02/2010 a las 21:42 Razón: correccion.
  #7 (permalink)  
Antiguo 03/02/2010, 21:46
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: problema de registrar datos utilizando clases

El manual lo explica todo: http://www.php.net/::

Saludos.
  #8 (permalink)  
Antiguo 04/02/2010, 09:45
(Desactivado)
 
Fecha de Ingreso: abril-2008
Mensajes: 787
Antigüedad: 16 años
Puntos: 7
Respuesta: problema de registrar datos utilizando clases

buenas. he colocado en la funcion el scope:

Código PHP:
Ver original
  1. function agregarservicios($idtiposervicio,$descripcion){
  2.     $sql_servicios  = "insert into teirsac_servicios(idtiposervicio,descripcion)";
  3.     $sql_servicios .= "values('$idtiposervicio','$descripcion')";
  4.    
  5.     //$cn->query($sql_servicios) or die(mysql_error());
  6.     $cn = Conexion::query($sql_servicios) or die(mysql_error());
  7.    
  8.     header("Location:index.php");
  9.    
  10. }
  11.  
  12. function editarservicios($codigo,$idtiposervicio,$descripcion){
  13.     $sql_edit  = "update teirsac_servicios set idtiposervicio = '$idtiposervicio', descripcion = '$descripcion' ";
  14.     $sql_edit .= "where idservicio = '$codigo'";
  15.    
  16.     //$cn->query($sql_edit) or die(mysql_error());
  17.     $cn = Conexion::query($sql_edit) or die(mysql_error());
  18.    
  19.     header("Location:index.php");
  20.    
  21. }
  22.  
  23. function borrarservicios($cod){
  24.     $sql_del = "delete from teirsac_servicios where idservicio = '$cod'";
  25.     //$cn->query($sql_del) or die(mysql_error());
  26.     $cn = Conexion::query($sql_del) or die(mysql_error());
  27.    
  28.     //header("Location:index.php");
  29.    
  30. }

y me muestra el siguiente error.

Fatal error: Using $this when not in object context in /home/comunova/public_html/teirsac/includes/Conexion.class.php on line 47

a que se debe ese error. tengo que modificar al go en mi archivo clase de conexion ?.

saludos.
  #9 (permalink)  
Antiguo 04/02/2010, 10:03
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: problema de registrar datos utilizando clases

Lo que pasa es que tus funciones no son estaticas, si ves el link que te deje es forzoso que uses global $cn; en tu función para leer tu variable global, por favor lee el manual, y ve este ejemplo:
Código PHP:
Ver original
  1. $hola = "hola";
  2. function test1() {
  3.        echo $hola;
  4. }
  5. function test2() {
  6.       global $hola;
  7.       echo $hola;
  8. }
  9.  
  10. test1(); // no imprime nada
  11. test2(); // imprime hola

Saludos.
  #10 (permalink)  
Antiguo 04/02/2010, 10:54
(Desactivado)
 
Fecha de Ingreso: abril-2008
Mensajes: 787
Antigüedad: 16 años
Puntos: 7
Respuesta: problema de registrar datos utilizando clases

gracias por responder gatorv. lei el manual, pero lo he entendido poco.

voy a ver el ejemplo que usted puso y le comento si resolvi mi problema.

saludos.
  #11 (permalink)  
Antiguo 04/02/2010, 14:25
(Desactivado)
 
Fecha de Ingreso: abril-2008
Mensajes: 787
Antigüedad: 16 años
Puntos: 7
Respuesta: problema de registrar datos utilizando clases

hice lo que me dijiste que le pusiera global $cn a mis funciones. agrego correctamente los datos, pero al momento de guardar, me salio un error.


Warning: Cannot modify header information - headers already sent by (output started at /home/comunova/public_html/teirsac/admin/clientes/funciones.php:38) in /home/comunova/public_html/teirsac/admin/clientes/funciones.php on line 11


sera por el header ?.

este es mi codigo.

Código PHP:
Ver original
  1. function agregarclientes($nombre_cliente){ 
  2.     global $cn;
  3.     $sql_cliente  = "insert into teirsac_clientes(nombre_cliente)";
  4.     $sql_cliente .= "values('$nombre_cliente')";
  5.    
  6.     $cn->query($sql_cliente) or die(mysql_error());
  7.    
  8.     header("Location:index.php");
  9.            
  10. }
  11.  
  12. function editarclientes($codigo,$nombre_cliente){
  13.     $sql_edit  = "update teirsac_clientes set nombre_cliente = '$nombre_cliente' ";
  14.     $sql_edit .= "where idcliente = '$codigo'";
  15.    
  16.     $cn->query($sql_edit) or die(mysql_error());
  17.    
  18.     header("Location:index.php");
  19.            
  20. }  
  21.  
  22. function borrarclientes($cod){ 
  23.     $sql_del = "delete from teirsac_clientes where idcliente = '$cod'";
  24.     $cn->query($sql_del) or die(mysql_error());
  25.    
  26.     header("Location:index.php");
  27. }

saludos.
  #12 (permalink)  
Antiguo 04/02/2010, 20:15
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: problema de registrar datos utilizando clases

El error mismo te lo dice en la linea 38 estas enviando cabeceras o contenido de texto lo cual crea ese warning, para poder usar header() no puedes enviar nada de texto.

Saludos.
  #13 (permalink)  
Antiguo 05/02/2010, 11:24
(Desactivado)
 
Fecha de Ingreso: abril-2008
Mensajes: 787
Antigüedad: 16 años
Puntos: 7
Respuesta: problema de registrar datos utilizando clases

gracias de nuevo por responder gatorv. viendo el codigo de las funciones, vi que habia otros espacios, es decir, habia saltos de linea en mi codigo y por eso me salia ese error. cuando mencionaste que no puedes enviar nada de texto, significa que no puedo hacer ningun echo cuando estoy usando el header().

asi quedo mi codigo.

Código PHP:
Ver original
  1. function agregarclientes($nombre_cliente){ 
  2.     global $cn;
  3.     $sql_cliente  = "insert into teirsac_clientes(nombre_cliente)";
  4.     $sql_cliente .= "values('$nombre_cliente')";
  5.    
  6.     $cn->query($sql_cliente) or die(mysql_error());
  7.    
  8.     header("Location:index.php");
  9.            
  10. }
  11.  
  12. function editarclientes($codigo,$nombre_cliente){
  13.     global $cn;
  14.     $sql_edit  = "update teirsac_clientes set nombre_cliente = '$nombre_cliente' ";
  15.     $sql_edit .= "where idcliente = '$codigo'";
  16.    
  17.     $cn->query($sql_edit) or die(mysql_error());
  18.    
  19.     header("Location:index.php");
  20.            
  21. }  
  22.  
  23. function borrarclientes($cod){
  24.     global $cn;
  25.     $sql_del = "delete from teirsac_clientes where idcliente = '$cod'";
  26.     $cn->query($sql_del) or die(mysql_error());
  27.    
  28.     header("Location:index.php");
  29. }

quiero hacerte una consulta. cuando hay saltos de linea en el codigo, es decir, es decir, muchas teclas de espacio.


Código PHP:
Ver original
  1. function agregarclientes($nombre_cliente){ 
  2.     global $cn;
  3.     $sql_cliente  = "insert into teirsac_clientes(nombre_cliente)";
  4.     $sql_cliente .= "values('$nombre_cliente')";
  5.    
  6.     $cn->query($sql_cliente) or die(mysql_error());
  7.    
  8.     header("Location:index.php");
  9.            
  10. }

significa que por eso me mostraba ese error ?.

aclareme esa duda. si en algo me equivoco, corrijame.

saludos.
  #14 (permalink)  
Antiguo 05/02/2010, 11:27
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 14 años, 5 meses
Puntos: 65
Respuesta: problema de registrar datos utilizando clases

No, a lo que se refiere es si tenes algo como esto

Código PHP:



<?php
header
('location:algo.php');
?>
Se entiende? Antes de la apertura del php, hay espacios en blanco
__________________
HV Studio
Diseño y desarrollo web
  #15 (permalink)  
Antiguo 05/02/2010, 23:29
(Desactivado)
 
Fecha de Ingreso: abril-2008
Mensajes: 787
Antigüedad: 16 años
Puntos: 7
Respuesta: problema de registrar datos utilizando clases

aya. ya entendi. gracias por la respuesta jackson666.

saludos.

Etiquetas: clases
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:06.