Foros del Web » Programando para Internet » PHP »

Sessiones dentro de FUNCION

Estas en el tema de Sessiones dentro de FUNCION en el foro de PHP en Foros del Web. Holas a todos, hos pido disculpa por la poca participacion en el foro pero hee estado muy ocupao y con algunos problemas personales... bueno el ...
  #1 (permalink)  
Antiguo 17/07/2007, 21:16
 
Fecha de Ingreso: marzo-2007
Mensajes: 39
Antigüedad: 12 años, 9 meses
Puntos: 0
Sessiones dentro de FUNCION

Holas a todos, hos pido disculpa por la poca participacion en el foro pero hee estado muy ocupao y con algunos problemas personales... bueno el asunto es qe me encuentro desarrollando una web y me surgio un gran problema, pues realise un sistema de login y esta dentro de una funcion(si el sistema lo aplico fuera de una funcion funciona perfecto) y me sale el siguiente error

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\ruta\index.php:2) in C:\ruta\index.php on line 52

a qe se debe el error? a qe esta definido session_start(); dentro de una funcion? bueno no tengo mucha experiencia con las funciones, a lo mejor ese es mi problema,, el asunto es qe no se como solucionarlo,..... ademas me sale un erro similar al aplicar el header('location: index.php');.. el siguiente erro me sale al aplicar el header

Warning: Cannot modify header information - headers already sent by (output started at C:\ruta\index.php:2) in C:\ruta\index.php on line 55

hos recuerdo qe header tambien lo defini dentro de la funcion... cmo podre solucionar aquel problema?? adjunto el codigo php para mayor comprension.
aaaa ademas hos informe qe utilizao ADODB para hacer las conexion a la base de datos, es por eso qe las consultas tiene algunas modificaciones pequeñas en la sintaxis.

Código PHP:
function conexion($userid$pasw){

         require_once 
'../adodb/adodb.inc.php';  //arhivos necesarios pa la conexion
         
require_once '../adodb/datos.php'//archio qe contien los datos pa conectar
 
         
$conexion ADONewConnection(db_driver);
         if(!
$conexion->Connect(db_serverdb_userdb_accesdb_db)){
              echo(
'<script type="text/javascript">alert("Ups!!Ocurrio un error al conectar a la DB, intenta nuevamente.");</script>');
              
loginbox();
         }else{
               if(isset(
$userid) && isset($pasw)){
                  
$sql $conexion->Prepare('select count(user) from tabla where user = ? and password = ?');
                  
$valido $conexion->GetOne($sql, array($userid$pasw));

                  if(
intval($valido) === 1){
                     
session_start();
                     
$_SESSION['userid'] = $userid;
                     
$_SESSION['valido'] = true;
                      
header ('location: entrar.php'); //lo envio a esa pagina si existe el user,ademas de iniciar la session
                     
exit();

                  }else{
                        echo(
'<script type="text/javascript">alert("Error: no existe el userId,logea nuevamente.");</script>');
                        
loginbox();
                        }
                }
             }

  



este codigo funciona pefectamente AFUERA de una funcion, pero al incluir dentro de una,en este caso function conexion(), me da los errores qe expuse mas arriba..

BUeno espero qe algen me pueda dar una mano...
  #2 (permalink)  
Antiguo 17/07/2007, 21:49
Avatar de TolerantX  
Fecha de Ingreso: marzo-2006
Ubicación: Guadalajara, México.
Mensajes: 408
Antigüedad: 13 años, 8 meses
Puntos: 10
Re: Sessiones dentro de FUNCION

Es porque tienes un echo antes del header ('location: entrar.php');, no puede haber ninguna salida como echo antes del header
__________________
TolerantX
http://tolerantx.com
Linux User #385226
  #3 (permalink)  
Antiguo 17/07/2007, 21:56
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 14 años, 6 meses
Puntos: 2
Re: Sessiones dentro de FUNCION

Por favor, la próxima vez intenta escribir bien ya que me debo esforzar para entender tu mensaje y no debería ser así... es más, deberías velar por facilitarnos la lectura así obtendrás más resultados (muchos cuando tienen poco tiempo o no tienen ganas de adivinar lo que escriben simplemente se van... yo a veces lo hago también).

Como te comentaba no leí todo tu mensaje pero por lo poco que leí pude saber de donde viene tu error. No sé si es o no por estar dentro de la función pero el error dice que no puede enviar cabeceras HTTP porque ya se ha enviado contenido. Tanto las sesiones ( session_start() ) como las cookies ( setcookie() ) envían cabeceras HTTP, por una limitación del protocolo éstas deben y tienen que ser lo primero en ser enviadas, si en algún momento se envió contenido y se intenta enviar alguna cabecera HTTP ocurrirá un error. Dicho lo anterior debes verificar de no imprimir nada, ni siquiera un espacio en blanco se puede y si encuentras donde se imprime y lo sacas ya arreglaras el problema, recuerda que si una función da un error y éste se imprime antes de usar dichas funciones también se producirá un error.

Saludos.
  #4 (permalink)  
Antiguo 19/07/2007, 18:24
 
Fecha de Ingreso: marzo-2007
Mensajes: 39
Antigüedad: 12 años, 9 meses
Puntos: 0
Re: Sessiones dentro de FUNCION

jejje bueno disculpa por la forma de escribir, creo qe mi fuerte no es la narracion, debe ser que estoy muy acostumbrado al lenguaje XAt(palabras abreviadas)..

Bueno TOLERANTX tienes razon, no debe ir ninguna "echo" ni nada impreso antes, me habia olbidado jejej, pero bueno quite todo eso y aun sigo con el problema =/ y pues bueno DIARIODARIO tienes razon, pero por mas que mira el codigo no encuentro el error =/ no se a qe de debe el problema =/ alguien que conosca el respecto podria observar mi codigo y verificar cual sera mi Error? adjunto el coodigo completo esta vez :

Hozz recuerdo qe trabaja con adodb para acer las conexion a la base de datos,,,, ademas igual DEJE los "Echos" pero en forma de comentario(/**/ //) por lo cual no deben funkar

Código PHP:
<?php

include 'header.php'//con tiene codigo html, cuadros,imagesne,etc, tamben lo saque una vez he igual siguio el problema

if($_POST['user'] && $_POST['pasw']){
   
$userid $_POST['user'];
   
$pasw md5($_POST['pasw']);
   
conexion($userid$pasw);
   
//si existe el post user y pasw, me envie los datos la funcion Conexion para autentificar al user
   
}else
    
loginbox();  //funciion qe contiene la visual en html(cuadros,imagenes,butons,inputs,etc)
  

include 'footer.php';

function 
conexion($userid$pasw){


         require_once 
'../adodb/adodb.inc.php'//archivos necesarios para adodb
         
require_once '../adodb/datos.php';
 
         
$conexion ADONewConnection(db_driver);
         if(!
$conexion->Connect(db_serverdb_userdb_accesdb_db)){
            
/*  echo('<script type="text/javascript">alert("Ups!!Ocurrio un error al conectar a la DB, intenta nuevamente.");</script>');*/
           
loginbox();
         }else{
               if(isset(
$userid) && isset($pasw)){
                  
$sql $conexion->Prepare('select count(user) from admin where user = ? and password = ?');
                  
$valido $conexion->GetOne($sql, array($userid$pasw));

                  if(
intval($valido) === 1){
                     
session_start();
                     
$_SESSION['userid'] = $userid;
                     
$_SESSION['valido'] = true;
                      
header ('location: entrar.php');
                     exit();

                  }else{
                       
/* echo('<script type="text/javascript">alert("Error: no existe el userId,logea nuevamente.");</script>');*/
                        
loginbox();
                        }
                }
             }

  

}

function 
loginbox(){ tambien deje el codigo fuera de la funcion y fuera del codigo php tan solo dejandolo como html pero igual me sigui dando el mismo error
            
echo'<center><div id="content">
            <div id="mainlogin">
                 <div id="welcome" class="post">
                  <h2 class="title"><span>Admin</span></h2>
                    <div class="story"><table align="center">
                      <form action="index.php" method="post" name="form">
                      <tr><td><font size="2" face="Verdana,arial" color="#000000">ID Admin</font></td>
                        <td><input type="text" name="user" value="" width="150" align="right" /></td></tr>
                      <tr><td><font size="2" face="verdana,arial" color="#000000">Password</font></td>
                        <td><input type="password" name="pasw" value="" width="150" align="right" /></td></tr>
                      <tr><td></td><td align="right"><input type="submit" value="Entrar" /></form></td></tr>
                    </table></div>
                 <div class="meta"><center><font size="1">Personas NO autorizadas seran registradas</font></div>
                 </div>
                 </div>'
;
           echo
'<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;';
}


?>
  #5 (permalink)  
Antiguo 19/07/2007, 18:54
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 14 años, 6 meses
Puntos: 2
Re: Sessiones dentro de FUNCION

Cita:
Iniciado por yonmax Ver Mensaje
jejje bueno disculpa por la forma de escribir, creo qe mi fuerte no es la narracion, debe ser que estoy muy acostumbrado al lenguaje XAt(palabras abreviadas)..

Bueno TOLERANTX tienes razon, no debe ir ninguna "echo" ni nada impreso antes, me habia olbidado jejej, pero bueno quite todo eso y aun sigo con el problema =/ y pues bueno DIARIODARIO tienes razon, pero por mas que mira el codigo no encuentro el error =/ no se a qe de debe el problema =/ alguien que conosca el respecto podria observar mi codigo y verificar cual sera mi Error? adjunto el coodigo completo esta vez :

Hozz recuerdo qe trabaja con adodb para acer las conexion a la base de datos,,,, ademas igual DEJE los "Echos" pero en forma de comentario(/**/ //) por lo cual no deben funkar

Código PHP:
<?php

include 'header.php'//con tiene codigo html, cuadros,imagesne,etc, tamben lo saque una vez he igual siguio el problema

if($_POST['user'] && $_POST['pasw']){
   
$userid $_POST['user'];
   
$pasw md5($_POST['pasw']);
   
conexion($userid$pasw);
   
//si existe el post user y pasw, me envie los datos la funcion Conexion para autentificar al user
   
}else
    
loginbox();  //funciion qe contiene la visual en html(cuadros,imagenes,butons,inputs,etc)
  

include 'footer.php';

function 
conexion($userid$pasw){


         require_once 
'../adodb/adodb.inc.php'//archivos necesarios para adodb
         
require_once '../adodb/datos.php';
 
         
$conexion ADONewConnection(db_driver);
         if(!
$conexion->Connect(db_serverdb_userdb_accesdb_db)){
            
/*  echo('<script type="text/javascript">alert("Ups!!Ocurrio un error al conectar a la DB, intenta nuevamente.");</script>');*/
           
loginbox();
         }else{
               if(isset(
$userid) && isset($pasw)){
                  
$sql $conexion->Prepare('select count(user) from admin where user = ? and password = ?');
                  
$valido $conexion->GetOne($sql, array($userid$pasw));

                  if(
intval($valido) === 1){
                     
session_start();
                     
$_SESSION['userid'] = $userid;
                     
$_SESSION['valido'] = true;
                      
header ('location: entrar.php');
                     exit();

                  }else{
                       
/* echo('<script type="text/javascript">alert("Error: no existe el userId,logea nuevamente.");</script>');*/
                        
loginbox();
                        }
                }
             }

  

}

function 
loginbox(){ tambien deje el codigo fuera de la funcion y fuera del codigo php tan solo dejandolo como html pero igual me sigui dando el mismo error
            
echo'<center><div id="content">
            <div id="mainlogin">
                 <div id="welcome" class="post">
                  <h2 class="title"><span>Admin</span></h2>
                    <div class="story"><table align="center">
                      <form action="index.php" method="post" name="form">
                      <tr><td><font size="2" face="Verdana,arial" color="#000000">ID Admin</font></td>
                        <td><input type="text" name="user" value="" width="150" align="right" /></td></tr>
                      <tr><td><font size="2" face="verdana,arial" color="#000000">Password</font></td>
                        <td><input type="password" name="pasw" value="" width="150" align="right" /></td></tr>
                      <tr><td></td><td align="right"><input type="submit" value="Entrar" /></form></td></tr>
                    </table></div>
                 <div class="meta"><center><font size="1">Personas NO autorizadas seran registradas</font></div>
                 </div>
                 </div>'
;
           echo
'<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;';
}


?>
Dime que "header.php" no genera ninguna salida... porque me late que ahí tienes el problema. Cuando se dice nada antes del session_start() no se refiere solo al script actual, sino a cualquier cosa antes de session_start().

Saludos.
  #6 (permalink)  
Antiguo 19/07/2007, 19:48
 
Fecha de Ingreso: marzo-2007
Mensajes: 39
Antigüedad: 12 años, 9 meses
Puntos: 0
Re: Sessiones dentro de FUNCION

asi es Header.php contiene codigo html en donde muestra el titulo de la web y el estilo(css), pero hay no esta el problemas puesto qe a Header.php y Footer.php ambos los elimine, para probar, y igual me siguio generando el mismo error =/ por eso no comprendo cual puede ser el problema qe tiene el codigo
  #7 (permalink)  
Antiguo 19/07/2007, 22:13
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 14 años, 6 meses
Puntos: 2
Re: Sessiones dentro de FUNCION

Cita:
Iniciado por yonmax Ver Mensaje
por eso no comprendo cual puede ser el problema qe tiene el codigo
Bueno, mira es simple, el error es porque hay una salida antes de la función, ayudanos a encontrarla no espere que te diga "prueba esto que ya anda"... ya sabes que hay que hacer, hay que buscar lo que esta generando una salida (incluso un espacio en blanco es una salida) pero si incluso así sigues estancado re-escribe todo el programa teniendo en cuenta lo que se hablo aquí y ya.

Saludos.
  #8 (permalink)  
Antiguo 19/07/2007, 22:16
 
Fecha de Ingreso: marzo-2007
Mensajes: 39
Antigüedad: 12 años, 9 meses
Puntos: 0
Re: Sessiones dentro de FUNCION

Cita:
Iniciado por DarioDario Ver Mensaje
Bueno, mira es simple, el error es porque hay una salida antes de la función....
OK compadre, tiene razon, tan solo debe ser eso el error, a lo mejor es un espacio en blanco,, seri revisando bien, o si no obligado realizar de nuevo todo el algoritmo =/

vale compadre muchas gracias,,,,,
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 05:01.