Foros del Web » Programando para Internet » PHP »

Location y Clases

Estas en el tema de Location y Clases en el foro de PHP en Foros del Web. tengo una clase me conecta a una base de datos, cuando la llamo para revisar una tabla si no encuentra nada le mando un Código ...
  #1 (permalink)  
Antiguo 13/05/2005, 09:57
Avatar de Phobos  
Fecha de Ingreso: abril-2001
Ubicación: sentado frente a un pc prestado
Mensajes: 375
Antigüedad: 16 años, 7 meses
Puntos: 2
Location y Clases

tengo una clase me conecta a una base de datos, cuando la llamo para revisar una tabla si no encuentra nada le mando un
Código PHP:
header("Location:index.php" 
pero me sale el siguiente error que hace mencion a Cannot add header information - headers already sent by (output started at c:\apache\htdocs\delta\admin\clases.php:83)

siendo la linea 83 la ultima que aparece en la clase
me llama la atencion porque no tengo ningun echo y tampoco arroja nungun error...

salu2
  #2 (permalink)  
Antiguo 13/05/2005, 10:13
Avatar de dwaks  
Fecha de Ingreso: agosto-2002
Ubicación: Panamá
Mensajes: 962
Antigüedad: 15 años, 4 meses
Puntos: 15
Es que no puedes enviar el header cuando ya fueron enviado cabezaras ya sea html o cual quier otro tipo.

La solucion esta en esta seccion del foro:
http://www.forosdelweb.com/showthrea...490#post414490
  #3 (permalink)  
Antiguo 13/05/2005, 10:22
Avatar de Phobos  
Fecha de Ingreso: abril-2001
Ubicación: sentado frente a un pc prestado
Mensajes: 375
Antigüedad: 16 años, 7 meses
Puntos: 2
estimado
Cita:
no puedes enviar el header cuando ya fueron enviado cabezaras ya sea html o cual quier otro tipo.
me podrias explicar con un poco mas de detalle que tipo de cabecera estoy creando cuando instancio una clase.,

Saludos
  #4 (permalink)  
Antiguo 13/05/2005, 10:25
Avatar de dwaks  
Fecha de Ingreso: agosto-2002
Ubicación: Panamá
Mensajes: 962
Antigüedad: 15 años, 4 meses
Puntos: 15
Bueno no se cuales puedan ser puede ser desde un echo, hasta un <html> tag o cualquier otra de las muchas opciones, para que resuelvas el caso coloca antes de cualquier sentencia php arriba:
<?
ob_start();
?>

Y al final del codigo osea abajo despues de todo:
<?
ob_end_flush();
?>

Y caso resuelto.
  #5 (permalink)  
Antiguo 13/05/2005, 11:24
Avatar de Phobos  
Fecha de Ingreso: abril-2001
Ubicación: sentado frente a un pc prestado
Mensajes: 375
Antigüedad: 16 años, 7 meses
Puntos: 2
ok, Funciona perfect ahora.
Millon de gracias.

Pero sigo con la duda, porque como dije anteriormente no devuelvo nada por pantalla.

ok igual saludos y gracias nuevamente.
  #6 (permalink)  
Antiguo 13/05/2005, 11:31
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 14 años, 9 meses
Puntos: 1
Puede ser que tengas un simple retorno de carro o un espacio, suele pasar ya que no se ve pero esta, revisalo bien seguro que tiene que haber algo

Un Saludo
  #7 (permalink)  
Antiguo 13/05/2005, 11:32
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 15 años, 4 meses
Puntos: 8
Cita:
Pero sigo con la duda, porque como dije anteriormente no devuelvo nada por pantalla.
Inicias sesiones? tienes algun espacio o linea en blanco antes del "<?php" ; revisas/envias alguna cookie?
  #8 (permalink)  
Antiguo 13/05/2005, 11:34
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 14 años, 9 meses
Puntos: 1
antes o al final tambien puede ser no?

Un Saludo
  #9 (permalink)  
Antiguo 13/05/2005, 11:47
Avatar de Phobos  
Fecha de Ingreso: abril-2001
Ubicación: sentado frente a un pc prestado
Mensajes: 375
Antigüedad: 16 años, 7 meses
Puntos: 2
fran86 asi es
inicio una session pero busque si se habia quedado un espacio en blanco y no aparece nada.

Yo antes habia ocupado sesiones y mandado cabeceras y no habia tenido problemas.
Ahora que ocupo una clase me pasa esto.

Saludos.
pd si gustan posteo el codigo que ocupo?
  #10 (permalink)  
Antiguo 16/05/2005, 08:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Fijate bien en los mensajes de error:
output started at c:\apache\htdocs\delta\admin\clases.php:83

ese "nombre_script.php:n°" indica .. nombre del scritp y línea de este donde se origina el problema.

Revisa que haces en esa línea ... un echo? .. HTML directo? .. un espacio antes de un <? o salto de línea o bien <? ..?

Podrías poner también el código que usas de tu classe .. Por qué .. sea classe o simples funciones o código simple, el caso es que la llamada a tus "métodos" que puedan arrojar alguna "salida" (al cliente) no debe probocarse antes de un header() que puedas hacer en otra llamada a otro método de tu classe o resto de código .. eso deberías "re-organizar" tu código para que no se origine ese tipo de caso.

La solución vía "control del buffer" como ob_start() y afines, si bien resuelve el problema .. plantea otros problemas de "rendimiento" de tu servidor y sobrecarga del mismo para una taréa que se puede evitar si re-ordenas tu código.

Un saludo,
  #11 (permalink)  
Antiguo 16/05/2005, 08:39
Avatar de Phobos  
Fecha de Ingreso: abril-2001
Ubicación: sentado frente a un pc prestado
Mensajes: 375
Antigüedad: 16 años, 7 meses
Puntos: 2
Cita:
La solución vía "control del buffer" como ob_start() y afines, si bien resuelve el problema .. plantea otros problemas de "rendimiento" de tu servidor y sobrecarga del mismo para una taréa que se puede evitar si re-ordenas tu código.
Lo mismo pensaba yo.
no me acomoda una solucion de este tipo pensando que aun existe el otro problema.

El codigo (de la clase) es uno que saque de este mismo foro y lo adjunto.

El error lo arroja en la clase y apunta a la ultima linea de esta.
donde no existe ningun caracter.

Saludos.

Código PHP:
class CnxBd{
    
//Atributos Basicos de la clase
    
var $servidor//Nombre de la maquina donde se encuentra la BD generalmente es localhost
    
var $nombreBD//Nombre de la Base de Datos
    
var $nombreDeUsuario//Nombre del usuario autorizado para entrar a la Base de Datos
    
var $contrasena//Contraseña del Usuario

    //Atributos Modificados
    
var $enlace;//Almacena el enlace con la Base de Datos una vez establecido
    
var $resultado;//Almacena el resultado obtenido por la consulta a la BD
    
var $consulta;//Almacena la consulta realizada con el metodo consultaBD();
//----------------------------------------------------
    //Constructor de la Clase
    //Inicializa algunos atributos Básicos
    //Ejemplo: $objBD=new //AdaCnxBD("localhost","MiBaseDeDatos","MiNombreDeUsuario","MiContraseña");
    
function CnxBd($servidor,$nombreBD,$nombreDeUsuario,$contrasena){
        
$this->servidor=$servidor;
        
$this->nombreBD=$nombreBD;
        
$this->nombreDeUsuario=$nombreDeUsuario;
        
$this->contrasena=$contrasena;
    }

    
//Metodos y Procedimientos
    //conectarBD(); Te permite conectar y enlazar la BD, el enlace a la BD es almacenado modificando
    //el atributo $enlace
    //Ejemplo: $objBD->conectarBD();
    
function conectarBD(){        
        if(
$enlace=mysql_connect($this->servidor,$this->nombreDeUsuario,$this->contrasena)){
            if(
mysql_select_db($this->nombreBD,$enlace)){
                
$this->enlace=$enlace;
            }else{
                echo 
"Error al seleccionar la base de datos!";
                exit();
            }
        }else{
            echo 
"Error al enlazar al Servidor!";
           exit();
        }
    }

    
//consultarBD(); permite realizar consultas en la BD enlazada
    //Ejemplo: $objBD->consultarBD("select * from MyTabla where 1");
    
function consultarBD($sentenciaSQL){
        
$this->consulta=mysql_query($sentenciaSQL,$this->enlace);
    }

    
/*---------------------------------------------------------------
    obtenerResultado(); Devuelve los resultados de la Base de Datos
    Ejemplo:

    while($fila=$objBD->obtenerResultado()){
    printf("%s<br>",$fila["nombre"]);
    }
    ---------------------------------------------------------------*/

    
function obtenerResultado(){
        
$this->resultado=mysql_fetch_array($this->consulta);
        return 
$this->resultado;
    }

    
//obtenerCantidad() obtiene la cantidad de resultados obtenidos
    
function obtenerCantidad(){
        
$numero=mysql_num_rows($this->consulta);
        return 
$numero;
    }

    function 
insertarRegistro($sentenciaSQL){
        
mysql_query($sentenciaSQL,$this->enlace);
    }

    
//liberarConsulta(); libera el contenido del atributo que almacena las consultas
    //Ejemplo: $objBD->consultarBD("select * from MyTabla where 1");
    
function liberarConsulta(){
        
mysql_free_result($this->consulta);
    }

    
//desconecta el enlace con la base de datos
    
function desconectarBD(){
        
mysql_close($this->enlace);
    }
}
//Fin de la Clase CnxBd 
  #12 (permalink)  
Antiguo 16/05/2005, 11:47
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
El error lo arroja en la clase y apunta a la ultima linea de esta.
donde no existe ningun caracter.
Asegurate de no tener ningún espacio al final de la classe .. mete todo entre <? y ?> sin espacios ni saltos de línea al principio o al final (antes o despues de los tag's <? y ?>)

Un saludo,
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 14:33.