Foros del Web » Programando para Internet » PHP »

Problema Sesiones

Estas en el tema de Problema Sesiones en el foro de PHP en Foros del Web. Tengo un problemilla con las sesiones me salen estos mensajes. Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at ...
  #1 (permalink)  
Antiguo 21/09/2005, 07:20
 
Fecha de Ingreso: septiembre-2005
Mensajes: 28
Antigüedad: 12 años, 2 meses
Puntos: 0
Problema Sesiones

Tengo un problemilla con las sesiones me salen estos mensajes.

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at c:\wamp\www\WEB\carrito_php\ver_carrito.php:2) in c:\wamp\www\WEB\autentificator\aut_verifica.inc.ph p on line 150

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at c:\wamp\www\WEB\carrito_php\ver_carrito.php:2) in c:\wamp\www\WEB\autentificator\aut_verifica.inc.ph p on line 150

A lo mejor es por este encabezado que no se en que paginas ponerlo, si en todas una vez desde que se accede al index de la pagina restringida o solo en el index...

<?
require("../autentificator/aut_verifica.inc.php");
$nivel_acceso=10; // Nivel de acceso para esta página.
// se chequea si el usuario tiene un nivel inferior
// al del nivel de acceso definido para esta página.
// Si no es correcto, se mada a la página que lo llamo con
// la variable de $error_login definida con el nº de error segun el array de
// aut_mensaje_error.inc.php
if ($nivel_acceso <= $_SESSION['usuario_nivel']){
header ("Location: $redir?error_login=5");
exit;
}
?>

a qué se debe? me imagino q por el lio de sesiones y usuarios pero ni idea. Espero no ser pesado. GRACIAS.
  #2 (permalink)  
Antiguo 21/09/2005, 07:25
 
Fecha de Ingreso: agosto-2005
Mensajes: 143
Antigüedad: 12 años, 3 meses
Puntos: 0
Asgurate de que en el archivo antes de llamar a session_start() no haya ninguna salida de texto al navegador(ningun print, echo, entidad HTML, espacios).

Compruebal tambien en aut_verifica.inc.php ya que lo incluyes en este archivo.
  #3 (permalink)  
Antiguo 21/09/2005, 07:50
 
Fecha de Ingreso: septiembre-2005
Mensajes: 28
Antigüedad: 12 años, 2 meses
Puntos: 0
Pues lo he revisado y no tngo espacios. No debe ser por eso.
  #4 (permalink)  
Antiguo 21/09/2005, 07:58
 
Fecha de Ingreso: agosto-2005
Mensajes: 143
Antigüedad: 12 años, 3 meses
Puntos: 0
Cita:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at c:\wamp\www\WEB\carrito_php\ver_carrito.php:2) in c:\wamp\www\WEB\autentificator\aut_verifica.inc.ph p on line 150
¿Llamas a session_start() en la linea 150 de tu script?
  #5 (permalink)  
Antiguo 21/09/2005, 08:15
 
Fecha de Ingreso: septiembre-2005
Mensajes: 28
Antigüedad: 12 años, 2 meses
Puntos: 0
Sí que la llamo en la linea 150 de aut_verifica.inc.php
  #6 (permalink)  
Antiguo 21/09/2005, 08:58
 
Fecha de Ingreso: agosto-2005
Mensajes: 143
Antigüedad: 12 años, 3 meses
Puntos: 0
¿Y en esas primeras 149 lineas no mandas ninguna información al cliente?
¿No imprimes nada por pantalla?
¿Nada de <html>, ets, etc's?
  #7 (permalink)  
Antiguo 21/09/2005, 09:06
 
Fecha de Ingreso: septiembre-2005
Mensajes: 28
Antigüedad: 12 años, 2 meses
Puntos: 0
AHI TE VA EL SCRIPT COMPLETO. GRACIAS.

<?
require ("aut_config.inc.php");
// chequear página que lo llama para devolver errores a dicha página.

$url = explode("?",$_SERVER['HTTP_REFERER']);
$pag_referida=$url[0];
$redir=$pag_referida;
// chequear si se llama directo al script.
if ($_SERVER['HTTP_REFERER'] == ""){
die ("Error cod.:1 - Acceso incorrecto!");
exit;
}


// Chequeamos si se está autentificandose un usuario por medio del formulario
if (isset($_POST['user']) && isset($_POST['pass'])) {

// Conexión base de datos.
// si no se puede conectar a la BD salimos del scrip con error 0 y
// redireccionamos a la pagina de error.
$db_conexion= mysql_connect("$sql_host", "$sql_usuario", "$sql_pass") or die(header ("Location: $redir?error_login=0"));
mysql_select_db("$sql_db");

// realizamos la consulta a la BD para chequear datos del Usuario.
$usuario_consulta = mysql_query("SELECT ID,usuario,pass,Rsocial,Ncom,Domicilio,CIF,CP,Loca lidad,Provincia,nivel_acceso FROM $sql_tabla
WHERE usuario='".$_POST['user']."'") or die(header ("Location: $redir?error_login=1"));

// miramos el total de resultado de la consulta (si es distinto de 0 es que existe el usuario)
if (mysql_num_rows($usuario_consulta) != 0) {

// eliminamos barras invertidas y dobles en sencillas
$login = stripslashes($_POST['user']);
// encriptamos el password en formato md5 irreversible.
$password = md5($_POST['pass']);

// almacenamos datos del Usuario en un array para empezar a chequear.
$usuario_datos = mysql_fetch_array($usuario_consulta);

// liberamos la memoria usada por la consulta, ya que tenemos estos datos en el Array.
mysql_free_result($usuario_consulta);
// cerramos la Base de dtos.
mysql_close($db_conexion);

// chequeamos el nombre del usuario otra vez contrastandolo con la BD
// esta vez sin barras invertidas, etc ...
// si no es correcto, salimos del script con error 4 y redireccionamos a la
// página de error.
if ($login != $usuario_datos['usuario']) {
Header ("Location: $redir?error_login=4");
exit;}

// si el password no es correcto ..
// salimos del script con error 3 y redireccinamos hacia la página de error
if ($password != $usuario_datos['pass']) {
Header ("Location: $redir?error_login=3");
exit;}

// Paranoia: destruimos las variables login y password usadas
unset($login);
unset ($password);

// En este punto, el usuario ya esta validado.
// Grabamos los datos del usuario en una sesion.

// le damos un mobre a la sesion.
session_name($usuarios_sesion);
// incia sessiones
session_start();

// Paranoia: decimos al navegador que no "cachee" esta página.
session_cache_limiter('nocache,private');

// Asignamos variables de sesión con datos del Usuario para el uso en el
// resto de páginas autentificadas.

// definimos usuarios_id como IDentificador del usuario en nuestra BD de usuarios
$_SESSION['usuario_id']=$usuario_datos['ID'];

// definimos usuario_nivel con el Nivel de acceso del usuario de nuestra BD de usuarios
$_SESSION['usuario_nivel']=$usuario_datos['nivel_acceso'];

//definimos usuario_nivel con el Nivel de acceso del usuario de nuestra BD de usuarios
$_SESSION['usuario_login']=$usuario_datos['usuario'];

//definimos usuario_password con el password del usuario de la sesión actual (formato md5 encriptado)
$_SESSION['usuario_password']=$usuario_datos['pass'];

$_SESSION['usuario_rsocial']=$usuario_datos['Rsocial'];
$_SESSION['usuario_ncomercial']=$usuario_datos['Ncom'];
$_SESSION['usuario_domicilio']=$usuario_datos['Domicilio'];
$_SESSION['usuario_cp']=$usuario_datos['CP'];
$_SESSION['usuario_localidad']=$usuario_datos['Localidad'];
$_SESSION['usuario_provincia']=$usuario_datos['Provincia'];
$_SESSION['usuario_cif']=$usuario_datos['CIF'];



// Hacemos una llamada a si mismo (scritp) para que queden disponibles
// las variables de session en el array asociado $HTTP_...
$pag=$_SERVER['PHP_SELF'];
Header ("Location: $pag?");
exit;

} else {
// si no esta el nombre de usuario en la BD o el password ..
// se devuelve a pagina q lo llamo con error
Header ("Location: $redir?error_login=2");
exit;}
} else {

// -------- Chequear sesión existe -------

// usamos la sesion de nombre definido.
session_name($usuarios_sesion);
// Iniciamos el uso de sesiones
session_start();

// Chequeamos si estan creadas las variables de sesión de identificación del usuario,
// El caso mas comun es el de una vez "matado" la sesion se intenta volver hacia atras
// con el navegador.

if (!isset($_SESSION['usuario_login']) && !isset($_SESSION['usuario_password'])){
// Borramos la sesion creada por el inicio de session anterior
session_destroy();
die ("Error cod.: 2 - Acceso incorrecto!");
exit;
}
}
?>
  #8 (permalink)  
Antiguo 21/09/2005, 09:08
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 12 años, 10 meses
Puntos: 10
cual es la linia 150? es q yo uso tmb el autentificador de cluster y no me llega a tantas linias...
en todo caso coje el script original y cambia muy cuidadosamente tus datos...
a ver si se origina el error.

saludos
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier

Última edición por sergi_climent; 21/09/2005 a las 09:14
  #9 (permalink)  
Antiguo 21/09/2005, 09:21
 
Fecha de Ingreso: septiembre-2005
Mensajes: 28
Antigüedad: 12 años, 2 meses
Puntos: 0
Lo acabo de hacer lo de cojer el original y sale lo mismo. Creo que es lo de poner al principio de cada pag lo de las sesiones, si tiene permisos y eso. Pero no se como funciona y como se arregla porque si lo quito de algunas me falla tambien.
Es este codigo el que pongo al comienzo de paginas restringidas

<?
require("../autentificator/aut_verifica.inc.php");
$nivel_acceso=10; // Nivel de acceso para esta página.
// se chequea si el usuario tiene un nivel inferior
// al del nivel de acceso definido para esta página.
// Si no es correcto, se mada a la página que lo llamo con
// la variable de $error_login definida con el nº de error segun el array de
// aut_mensaje_error.inc.php
if ($nivel_acceso <= $_SESSION['usuario_nivel']){
header ("Location: $redir?error_login=5");
exit;
}
?>
  #10 (permalink)  
Antiguo 21/09/2005, 09:26
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 12 años, 10 meses
Puntos: 10
xo el error q has puesto arriba no es al principio de tu pagina sino q esta en la linia 150. y entras 10 primeras linias y las 140 restantes q hay?
el problema lo tienes en la pagina esta: c:\wamp\www\WEB\carrito_php\ver_carrito.php:2)
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier
  #11 (permalink)  
Antiguo 21/09/2005, 09:42
 
Fecha de Ingreso: septiembre-2005
Mensajes: 28
Antigüedad: 12 años, 2 meses
Puntos: 0
Puff que jaleo. en la ver_carrito solo llamo a una funcion de otro archivo y parece que es como si se llamara varias veces a session_start() y por eso da ese warning. De todas fomas te paso el codigo de ver_carrito y de lib_carrito ok? GRACIAS.

// ------VER_cARRITO.PHP-----
<?
require("../autentificator/aut_verifica.inc.php");
$nivel_acceso=10; // Nivel de acceso para esta página.
if ($nivel_acceso <= $_SESSION['usuario_nivel']){
header ("Location: $redir?error_login=5");
exit;
}
?>
<?
include("lib_carrito.php");
?>
<html>
<head>
<title>Introduce Producto</title>
</head>
<body>
<?
$_SESSION["ocarrito"]->imprime_carrito();
?>
<p><br>
<br>
<a href="index_carrito.php">Volver</a>
</p>
<p><a href="mnada_carrito.php" target="_self">Mandar</a></p>
</body>
</html>


// ----lib_carrito.php ------

<?
require("../autentificator/aut_verifica.inc.php");
$nivel_acceso=10; // Nivel de acceso para esta página.
if ($nivel_acceso <= $_SESSION['usuario_nivel']){
header ("Location: $redir?error_login=5");
exit;
}
?>

<?
class carrito {
//atributos de la clase
var $num_productos;
var $array_id_prod;
var $array_nombre_prod;
var $array_precio_prod;
var $array_cant_prod;
//constructor. Realiza las tareas de inicializar los objetos cuando se instancian
//inicializa el numero de productos a 0
function carrito () {
$this->num_productos=0;
}

//Introduce un producto en el carrito. Recibe los datos del producto
//Se encarga de introducir los datos en los arrays del objeto carrito
//luego aumenta en 1 el numero de productos
function introduce_producto($id_prod,$nombre_prod,$precio_p rod,$cantidad){

$this->array_id_prod[$this->num_productos]=$id_prod;
$this->array_nombre_prod[$this->num_productos]=$nombre_prod;
$this->array_precio_prod[$this->num_productos]=$precio_prod;
$this->array_cant_prod[$this->num_productos]=$cantidad;
$this->num_productos++;
}

//Muestra el contenido del carrito de la compra
//ademas pone los enlaces para eliminar un producto del carrito
function imprime_carrito(){

echo "<b>".$_SESSION['usuario_rsocial'] . "</b><br>";
echo $_SESSION['usuario_ncomercial'] . "<br>";
echo $_SESSION['usuario_domicilio'] . "<br>";
echo $_SESSION['usuario_localidad'] . "<br>";
echo $_SESSION['usuario_cp'] . " " .$_SESSION['usuario_provincia'] . "<br>";
echo "C.I.F./N.I.F.: ".$_SESSION['usuario_cif'] . "<br>";

$suma = 0;
echo '<table border=0 cellpadding="5">
<tr>
<td><b>Código</b></td>
<td><b>Cantidad</b></td>
<td><b>Nombre producto</b></td>
<td><b>Precio</b></td>
<td><b>Total</b></td>
<td>&nbsp;</td>
</tr>';
for ($i=0;$i<$this->num_productos;$i++){
if($this->array_id_prod[$i]!=0){
echo '<tr>';
echo "<td>" . $this->array_id_prod[$i] . "</td>";
echo "<td>" . $this->array_cant_prod[$i] . "</td>";
echo "<td>" . $this->array_nombre_prod[$i] . "</td>";
echo "<td>" . $this->array_precio_prod[$i] . "</td>";
echo "<td>" . $this->array_precio_prod[$i]*$this->array_cant_prod[$i] . "</td>";
echo "<td><a href='eliminar_producto.php?linea=$i'>Eliminar producto</td>";
echo '</tr>';
$suma += $this->array_precio_prod[$i]*$this->array_cant_prod[$i];
}
}
//muestro el total
echo "<tr><td></td><td></td><td><b>TOTAL:</b></td><td> </td><td><b>$suma</b></td><td>&nbsp;</td></tr>";
//total más IVA
echo "<tr><td></td><td></td><td><b>IVA (7%):</b></td><td></td><td> <b>" . $suma * 1.07 . "</b></td><td>&nbsp;</td></tr>";

echo "<tr><td></td><td></td><td><b>R.E.(7%+1%):</b></td><td></td><td> <b>" . $suma * 1.08 . "</b></td><td>&nbsp;</td></tr>";
echo "</table>";
}

function manda_carrito(){
$cuerpo="";
$headers_mensaje = "From: [email protected]\r\n" . "Reply-To: [email protected]\r\n" . "Return-path: [email protected]\r\n" . "MIME-Version: 1.0\n" . "Content-type: text/html; charset=iso-8859-1";

$cuerpo = "<!DOCTYPE HTML PUBLIC-//W3C//DTD HTML 4.01 Transitional//EN http://www.w3.org/TR/html4/loose.dtd>";

$cuerpo.= "<b>".$_SESSION['usuario_rsocial'] . "</b><br>" ;
$cuerpo.= $_SESSION['usuario_ncomercial'] . "<br>";
$cuerpo.= $_SESSION['usuario_domicilio'] . "<br>";
$cuerpo.= $_SESSION['usuario_localidad'] . "<br>";
$cuerpo.= $_SESSION['usuario_cp'] . " " .$_SESSION['usuario_provincia'] . "<br>";
$cuerpo.= "C.I.F./N.I.F.: ".$_SESSION['usuario_cif'] . "<br>";
$cuerpo.= "<html><head><meta http-equiv=Content-Type content=text/html; charset=iso-8859-1></head><body>";
$cuerpo.= "<table border=0 cellpadding=5>tr>";
$cuerpo.= "<td><b>Código</b></td>";
$cuerpo.= "<td><b>Cantidad</b></td>";
$cuerpo.= "<td><b>Nombre producto</b></td>";
$cuerpo.= "<td><b>Precio</b></td>";
$cuerpo.= "<td><b>Total</b></td>";
$cuerpo.= "<td>&nbsp;</td>";
$cuerpo.= "</tr>";
$suma = 0;
for ($i=0;$i<$this->num_productos;$i++){
if($this->array_id_prod[$i]!=0){
$cuerpo.="<tr>";
$cuerpo.="<td>" . $this->array_id_prod[$i] . "</td>";
$cuerpo.="<td>" . $this->array_cant_prod[$i] . "</td>";
$cuerpo.="<td>" . $this->array_nombre_prod[$i] . "</td>";
$cuerpo.="<td>" . $this->array_precio_prod[$i] . "</td>";
$cuerpo.="<td>" . $this->array_precio_prod[$i]*$this->array_cant_prod[$i] . "</td>";
/*echo <td><a href='eliminar_producto.php?linea=$i'>Eliminar producto</td>;*/
$cuerpo.="</tr>";
$suma += $this->array_precio_prod[$i]*$this->array_cant_prod[$i];
}
}
//muestro el total
$cuerpo.="<tr><td></td><td></td><td><b>TOTAL:</b></td><td> </td><td><b>".$suma."</b></td><td>&nbsp;</td></tr>";
//total más IVA
$cuerpo.="<tr><td></td><td></td><td><b>IVA (7%):</b></td><td></td><td> <b>" . $suma * 1.07 . "</b></td><td>&nbsp;</td></tr>";

$cuerpo.="<tr><td></td><td></td><td><b>R.E.(7%+1%):</b></td><td></td><td> <b>" . $suma * 1.08 . "</b></td><td>&nbsp;</td></tr>";
$cuerpo.="</table>";
$cuerpo.="</body>";
$cuerpo.="</html>";

mail("[email protected]","Nuevo Pedido",$cuerpo,$headers_mensaje);
}

//elimina un producto del carrito. recibe la linea del carrito que debe eliminar
//no lo elimina realmente, simplemente pone a cero el id, para saber que esta en estado retirado
function elimina_producto($linea){
$this->array_id_prod[$linea]=0;
}
}
//inicio la sesión
session_start();
//si no esta creado el objeto carrito en la sesion, lo creo
if (!isset($_SESSION["ocarrito"])){
$_SESSION["ocarrito"] = new carrito();
}
?>
  #12 (permalink)  
Antiguo 21/09/2005, 09:56
 
Fecha de Ingreso: agosto-2005
Mensajes: 143
Antigüedad: 12 años, 3 meses
Puntos: 0
En el archivo aut_config.inc.php tienes un espacio antes de <?php o cualquier otra cosa.
Aún así...en los archivos donde hagas uso de las sesiones pon session_start() en la primera linea y así evitas problemas.
  #13 (permalink)  
Antiguo 21/09/2005, 10:23
 
Fecha de Ingreso: septiembre-2005
Mensajes: 28
Antigüedad: 12 años, 2 meses
Puntos: 0
poniendo session_start(); me sale acceso incorrecto y no me deja entrar.
  #14 (permalink)  
Antiguo 21/09/2005, 10:32
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 12 años, 10 meses
Puntos: 10
es q el session start no se tiene q poner en todas la paginas... si usas el auntentificador de cluster... claro esta.
diria q te falla en la funcion manda_carrito. cuando inicias la variable $cuerpo="";
ponla justamente antes de empezar a llenar el $cuerpo.
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier
  #15 (permalink)  
Antiguo 21/09/2005, 10:49
 
Fecha de Ingreso: septiembre-2005
Mensajes: 28
Antigüedad: 12 años, 2 meses
Puntos: 0
Nada sergi, lo de $cuerpo no es. Joder, llevo todo el dia para estos warning xq es lo unico que me queda de solucionar de la web.
  #16 (permalink)  
Antiguo 21/09/2005, 10:49
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si llamas a scripts unos sobre otros .. en lugar de usar include() deberías usar include_once() que llama a ese código -sólo una vez- (el primero que se ejecute). (me refiero a la parte del aut_verifica.inc.php)


Un saludo,
  #17 (permalink)  
Antiguo 21/09/2005, 10:56
 
Fecha de Ingreso: septiembre-2005
Mensajes: 28
Antigüedad: 12 años, 2 meses
Puntos: 0
he puesto en todos los require e include require_once y nada, ni con esas. Perdon por el mareo que os estoy metiendo pero Gracias de todas formas
Saludos
  #18 (permalink)  
Antiguo 21/09/2005, 11:00
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 12 años, 10 meses
Puntos: 10
me puedes postear tu codigo xo bien separado x paginas. x cierto.. utiliza las etiquetas de codigo q asi lo podre ver mejor...
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier
  #19 (permalink)  
Antiguo 21/09/2005, 11:09
 
Fecha de Ingreso: septiembre-2005
Mensajes: 28
Antigüedad: 12 años, 2 meses
Puntos: 0
PUFF me puedes dar un email y te lo mando? es mucho para postear por aqui. ademas las etiquetas de codigo no las encuentro
  #20 (permalink)  
Antiguo 21/09/2005, 11:37
 
Fecha de Ingreso: septiembre-2005
Mensajes: 28
Antigüedad: 12 años, 2 meses
Puntos: 0
el codigo....

Ahí va el codigo de los 3 ficheros conflictivos creo que con esto vale.gracias.

aut_verifica.int.php

Código PHP:
<?
// Cargar datos conexion y otras variables.
include_once ("aut_config.inc.php");
// chequear página que lo llama para devolver errores a dicha página.
$url explode("?",$_SERVER['HTTP_REFERER']);
$pag_referida=$url[0];
$redir=$pag_referida;
// chequear si se llama directo al script.
if ($_SERVER['HTTP_REFERER'] == ""){
die (
"Error cod.:1 - Acceso incorrecto!");
exit;
}
// Chequeamos si se está autentificandose un usuario por medio del formulario
if (isset($_POST['user']) && isset($_POST['pass'])) {
// Conexión base de datos.
// si no se puede conectar a la BD salimos del scrip con error 0 y
// redireccionamos a la pagina de error.
$db_conexionmysql_connect("$sql_host""$sql_usuario""$sql_pass") or die(header ("Location:  $redir?error_login=0"));
mysql_select_db("$sql_db");
// realizamos la consulta a la BD para chequear datos del Usuario.
$usuario_consulta mysql_query("SELECT ID,usuario,pass,nivel_acceso FROM $sql_tabla WHERE usuario='".$_POST['user']."'") or die(header ("Location:  $redir?error_login=1"));
 
// miramos el total de resultado de la consulta (si es distinto de 0 es que existe el usuario)
 
if (mysql_num_rows($usuario_consulta) != 0) {
    
// eliminamos barras invertidas y dobles en sencillas
    
$login stripslashes($_POST['user']);
    
// encriptamos el password en formato md5 irreversible.
    
$password md5($_POST['pass']);
// almacenamos datos del Usuario en un array para empezar a chequear.
     
$usuario_datos mysql_fetch_array($usuario_consulta);
// liberamos la memoria usada por la consulta, ya que tenemos estos datos en el Array.
    
mysql_free_result($usuario_consulta);
    
// cerramos la Base de dtos.
    
mysql_close($db_conexion);  
    
// chequeamos el nombre del usuario otra vez contrastandolo con la BD
    // esta vez sin barras invertidas, etc ...
    // si no es correcto, salimos del script con error 4 y redireccionamos a la
    // página de error.
    
if ($login != $usuario_datos['usuario']) {
           
Header ("Location: $redir?error_login=4");
        exit;}
    
// si el password no es correcto ..
    // salimos del script con error 3 y redireccinamos hacia la página de error
    
if ($password != $usuario_datos['pass']) {
        
Header ("Location: $redir?error_login=3");
        exit;}
    
//  destruimos las variables login y password usadas
    
unset($login);
    unset (
$password);

    
// En este punto, el usuario ya esta validado.
    // Grabamos los datos del usuario en una sesion.
    
     // le damos un mobre a la sesion.
    
session_name($usuarios_sesion);
     
// incia sessiones
    
session_start();

    
// decimos al navegador que no "cachee" esta página.
    
session_cache_limiter('nocache,private');
    
    
// Asignamos variables de sesión con datos del Usuario para el uso en el
    // resto de páginas autentificadas.

    // definimos usuarios_id como IDentificador del usuario en nuestra BD de usuarios
    
$_SESSION['usuario_id']=$usuario_datos['ID'];
    
    
// definimos usuario_nivel con el Nivel de acceso del usuario de nuestra BD de usuarios
    
$_SESSION['usuario_nivel']=$usuario_datos['nivel_acceso'];
    
    
//definimos usuario_nivel con el Nivel de acceso del usuario de nuestra BD de usuarios
    
$_SESSION['usuario_login']=$usuario_datos['usuario'];

    
//definimos usuario_password con el password del usuario de la sesión actual (formato md5 encriptado)
    
$_SESSION['usuario_password']=$usuario_datos['pass'];


    
// Hacemos una llamada a si mismo (scritp) para que queden disponibles
    // las variables de session en el array asociado $HTTP_...
    
$pag=$_SERVER['PHP_SELF'];
    
Header ("Location: $pag?");
    exit;
    
   } else {
      
// si no esta el nombre de usuario en la BD o el password ..
      // se devuelve a pagina q lo llamo con error
      
Header ("Location: $redir?error_login=2");
      exit;}
} else {

// -------- Chequear sesión existe -------

// usamos la sesion de nombre definido.
session_name($usuarios_sesion);
// Iniciamos el uso de sesiones
session_start();

// Chequeamos si estan creadas las variables de sesión de identificación del usuario,
// El caso mas comun es el de una vez "matado" la sesion se intenta volver hacia atras
// con el navegador.

if (!isset($_SESSION['usuario_login']) && !isset($_SESSION['usuario_password'])){
// Borramos la sesion creada por el inicio de session anterior
session_destroy();
die (
"Error cod.: 2 - Acceso incorrecto!");
exit;
}
}
?>
  #21 (permalink)  
Antiguo 21/09/2005, 11:37
 
Fecha de Ingreso: septiembre-2005
Mensajes: 28
Antigüedad: 12 años, 2 meses
Puntos: 0
lib_carrito.php

Código PHP:
<?

require_once("../autentificator/aut_verifica.inc.php");
$nivel_acceso=10// Nivel de acceso para esta página.
// se chequea si el usuario tiene un nivel inferior
// al del nivel de acceso definido para esta página.
// Si no es correcto, se mada a la página que lo llamo con
// la variable de $error_login definida con el nº de error segun el array de
// aut_mensaje_error.inc.php
if ($nivel_acceso <= $_SESSION['usuario_nivel']){
header ("Location: $redir?error_login=5");
exit;
}
?>

<?
class carrito {
    
//atributos de la clase
       
var $num_productos;
       var 
$array_id_prod;
       var 
$array_nombre_prod;
       var 
$array_precio_prod;
    var 
$array_cant_prod;

    
//constructor. Realiza las tareas de inicializar los objetos cuando se instancian
    //inicializa el numero de productos a 0
    
function carrito () {
           
$this->num_productos=0;
    }
    
    
//Introduce un producto en el carrito. Recibe los datos del producto
    //Se encarga de introducir los datos en los arrays del objeto carrito
    //luego aumenta en 1 el numero de productos
    
function introduce_producto($id_prod,$nombre_prod,$precio_prod,$cantidad){
        
        
$this->array_id_prod[$this->num_productos]=$id_prod;
        
$this->array_nombre_prod[$this->num_productos]=$nombre_prod;
        
$this->array_precio_prod[$this->num_productos]=$precio_prod;
        
$this->array_cant_prod[$this->num_productos]=$cantidad;
        
$this->num_productos++;
    }

    
//Muestra el contenido del carrito de la compra
    //ademas pone los enlaces para eliminar un producto del carrito
    
function imprime_carrito(){
        
        echo 
"<b>".$_SESSION['usuario_rsocial'] . "</b><br>";
        echo  
$_SESSION['usuario_ncomercial'] . "<br>";
        echo  
$_SESSION['usuario_domicilio'] . "<br>";
        echo  
$_SESSION['usuario_localidad'] . "<br>";
        echo  
$_SESSION['usuario_cp'] . " " .$_SESSION['usuario_provincia'] . "<br>";
        echo  
"C.I.F./N.I.F.: ".$_SESSION['usuario_cif'] . "<br>";
        
        
$suma 0;
        echo 
'<table border=0 cellpadding="5">
              <tr>
                <td><b>Código</b></td>
                <td><b>Cantidad</b></td>
                <td><b>Nombre producto</b></td>
                <td><b>Precio</b></td>
                <td><b>Total</b></td>
                <td>&nbsp;</td>
              </tr>'
;
        for (
$i=0;$i<$this->num_productos;$i++){
            if(
$this->array_id_prod[$i]!=0){
                echo 
'<tr>';
                echo 
"<td>" $this->array_id_prod[$i] . "</td>";
                echo 
"<td>" $this->array_cant_prod[$i] . "</td>";
                echo 
"<td>" $this->array_nombre_prod[$i] . "</td>";
                echo 
"<td>" $this->array_precio_prod[$i] . "</td>";
                echo 
"<td>" $this->array_precio_prod[$i]*$this->array_cant_prod[$i] . "</td>";
                echo 
"<td><a href='eliminar_producto.php?linea=$i'>Eliminar producto</td>";
                echo 
'</tr>';
                
$suma += $this->array_precio_prod[$i]*$this->array_cant_prod[$i];
            }
        }
        
//muestro el total
        
echo "<tr><td></td><td></td><td><b>TOTAL:</b></td><td> </td><td><b>$suma</b></td><td>&nbsp;</td></tr>";
        
//total más IVA
        
echo "<tr><td></td><td></td><td><b>IVA (7%):</b></td><td></td><td> <b>" $suma 1.07 "</b></td><td>&nbsp;</td></tr>";
        
        echo 
"<tr><td></td><td></td><td><b>R.E.(7%+1%):</b></td><td></td><td> <b>" $suma 1.08 "</b></td><td>&nbsp;</td></tr>";
        echo 
"</table>";
    }
    
function 
manda_carrito(){
        
        
$headers_mensaje "From: [email protected]\r\n" "Reply-To: [email protected]\r\n" "Return-path: [email protected]\r\n" .         "MIME-Version: 1.0\n" "Content-type: text/html; charset=iso-8859-1"
$cuerpo="";
$cuerpo "<!DOCTYPE HTML PUBLIC-//W3C//DTD HTML 4.01 Transitional//EN http://www.w3.org/TR/html4/loose.dtd>"
$cuerpo.= "<b>".$_SESSION['usuario_rsocial'] . "</b><br>" ;
$cuerpo.= $_SESSION['usuario_ncomercial'] . "<br>";
$cuerpo.= $_SESSION['usuario_domicilio'] . "<br>";
$cuerpo.= $_SESSION['usuario_localidad'] . "<br>";
$cuerpo.= $_SESSION['usuario_cp'] . " " .$_SESSION['usuario_provincia'] . "<br>";
$cuerpo.= "C.I.F./N.I.F.: ".$_SESSION['usuario_cif'] . "<br>";
$cuerpo.= "<html><head><meta http-equiv=Content-Type content=text/html; charset=iso-8859-1></head><body>"
$cuerpo.= "<table border=0 cellpadding=5>tr>"
$cuerpo.= "<td><b>Código</b></td>"
$cuerpo.= "<td><b>Cantidad</b></td>"
$cuerpo.= "<td><b>Nombre producto</b></td>"
$cuerpo.= "<td><b>Precio</b></td>"
$cuerpo.= "<td><b>Total</b></td>"
$cuerpo.= "<td>&nbsp;</td>"
$cuerpo.= "</tr>"
$suma 0
for (
$i=0;$i<$this->num_productos;$i++){ 
if(
$this->array_id_prod[$i]!=0){ 
$cuerpo.="<tr>"
$cuerpo.="<td>" $this->array_id_prod[$i] . "</td>"
$cuerpo.="<td>" $this->array_cant_prod[$i] . "</td>"
$cuerpo.="<td>" $this->array_nombre_prod[$i] . "</td>"
$cuerpo.="<td>" $this->array_precio_prod[$i] . "</td>"
$cuerpo.="<td>" $this->array_precio_prod[$i]*$this->array_cant_prod[$i] . "</td>"
//echo <td><a href='eliminar_producto.php?linea=$i'>Eliminar producto</td>;
$cuerpo.="</tr>"
$suma += $this->array_precio_prod[$i]*$this->array_cant_prod[$i]; 


$cuerpo.="<tr><td></td><td></td><td><b>TOTAL:</b></td><td> </td><td><b>".$suma."</b></td><td>&nbsp;</td></tr>"
$cuerpo.="<tr><td></td><td></td><td><b>IVA (7%):</b></td><td></td><td> <b>" $suma 1.07 "</b></td><td>&nbsp;</td></tr>"
$cuerpo.="<tr><td></td><td></td><td><b>R.E.(7%+1%):</b></td><td></td><td> <b>" $suma 1.08 "</b></td><td>&nbsp;</td></tr>"
$cuerpo.="</table>"
$cuerpo.="</body>"
$cuerpo.="</html>"

mail("[email protected]","Nuevo Pedido",$cuerpo,$headers_mensaje); 
}
    
    
//elimina un producto del carrito. recibe la linea del carrito que debe eliminar
    //no lo elimina realmente, simplemente pone a cero el id, para saber que esta en estado retirado
    
function elimina_producto($linea){
        
$this->array_id_prod[$linea]=0;
    }
}
//inicio la sesión
session_start();
//si no esta creado el objeto carrito en la sesion, lo creo
if (!isset($_SESSION["ocarrito"])){
    
$_SESSION["ocarrito"] = new carrito();
}
?>
  #22 (permalink)  
Antiguo 21/09/2005, 11:38
 
Fecha de Ingreso: septiembre-2005
Mensajes: 28
Antigüedad: 12 años, 2 meses
Puntos: 0
VER_cARRITO.PHP
Código PHP:


<?

include_once("lib_carrito.php");
?>

<html>
<head>
    <title>Introduce Producto</title>
</head>

<body>

<?

$_SESSION
["ocarrito"]->imprime_carrito();
    
?>

<p><br>
  <br>
    <a href="index_carrito.php">Volver</a>
</p>

<p><a href="mnada_carrito.php" target="_self">Mandar</a></p>
</body>
</html>
  #23 (permalink)  
Antiguo 21/09/2005, 12:02
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
No recuerdo el n° de líneas de tus mensajes de error .. pero fijate algunas cosas:

En lib_carrito.php .. tienes esto:
Código PHP:
?> 

<? 
class carrito {
ahí .. donce cortas "php" ?> y lo vuelves abrir con un <? dejas unos sáltos de línea ..

Más abajo haces:
Código PHP:

//inicio la sesión 
session_start(); 
//si no esta creado el objeto carrito en la sesion, lo creo 
if (!isset($_SESSION["ocarrito"])){ 
Cuando ya aut_verifica.inc.php ya tiene su session_start() ..

Todo sumado .. (esos espacios/saltos de línea) junto con "session_Start()" que no corresponden pueden estar originando parte del problema (lo cual no quiere decir que existan más!).

Otro detalle (por claridad de código) .. esa classe "carrito" deberías tenerla en un script aparte (classe.carrito.php o algo así) .. sin autentificación (no es necesario y llamarlo con un simple include() en tu lib_carrito.php o en los que lo llama.


Un saludo,
  #24 (permalink)  
Antiguo 21/09/2005, 17:07
 
Fecha de Ingreso: septiembre-2005
Mensajes: 28
Antigüedad: 12 años, 2 meses
Puntos: 0
Problema Resuelto!!!! Muchas gracias a todos. Saben cual era al final la cuestión? los espacios que había entre líneas al comienzo del script ver_carrito.php. Gracias de nuevo.
  #25 (permalink)  
Antiguo 22/09/2005, 01:21
 
Fecha de Ingreso: febrero-2004
Ubicación: España. Madrid
Mensajes: 454
Antigüedad: 13 años, 9 meses
Puntos: 0
madre.. si es que al final... hay cosas tontas que no se ven :p
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 08:07.